diff --git a/imports/NeoChat/Component/ChatBox/AttachmentPane.qml b/imports/NeoChat/Component/ChatBox/AttachmentPane.qml index 2de62ff21..9d47b5620 100644 --- a/imports/NeoChat/Component/ChatBox/AttachmentPane.qml +++ b/imports/NeoChat/Component/ChatBox/AttachmentPane.qml @@ -14,14 +14,14 @@ import NeoChat.Page 1.0 Loader { id: root - property var attachmentMimetype: FileType.mimeTypeForUrl(ChatBoxHelper.attachmentPath) + property var attachmentMimetype: FileType.mimeTypeForUrl(chatBoxHelper.attachmentPath) readonly property bool hasImage: attachmentMimetype.valid && FileType.supportedImageFormats.includes(attachmentMimetype.preferredSuffix) active: visible sourceComponent: Component { Pane { id: attachmentPane - property string baseFileName: ChatBoxHelper.attachmentPath.toString().substring(ChatBoxHelper.attachmentPath.toString().lastIndexOf('/') + 1, ChatBoxHelper.attachmentPath.length) + property string baseFileName: chatBoxHelper.attachmentPath.toString().substring(chatBoxHelper.attachmentPath.toString().lastIndexOf('/') + 1, chatBoxHelper.attachmentPath.length) Kirigami.Theme.colorSet: Kirigami.Theme.View contentItem: Item { @@ -46,7 +46,7 @@ Loader { asynchronous: true cache: false // Cache is not needed. Images will rarely be shown repeatedly. smooth: height == preferredHeight && parent.height == parent.implicitHeight // Don't smooth until height animation stops - source: hasImage ? ChatBoxHelper.attachmentPath : "" + source: hasImage ? chatBoxHelper.attachmentPath : "" visible: hasImage fillMode: Image.PreserveAspectFit @@ -162,14 +162,14 @@ Loader { Component { id: imageEditorPage ImageEditorPage { - imagePath: ChatBoxHelper.attachmentPath + imagePath: chatBoxHelper.attachmentPath } } onClicked: { let imageEditor = applicationWindow().pageStack.layers.push(imageEditorPage); imageEditor.newPathChanged.connect(function(newPath) { applicationWindow().pageStack.layers.pop(); - ChatBoxHelper.attachmentPath = newPath; + chatBoxHelper.attachmentPath = newPath; }); } ToolTip.text: text @@ -180,7 +180,7 @@ Loader { icon.name: "dialog-cancel" text: i18n("Cancel") display: AbstractButton.IconOnly - onClicked: ChatBoxHelper.clearAttachment(); + onClicked: chatBoxHelper.clearAttachment(); ToolTip.text: text ToolTip.visible: hovered } diff --git a/imports/NeoChat/Component/ChatBox/ChatBar.qml b/imports/NeoChat/Component/ChatBox/ChatBar.qml index 3dd997dbc..be53a5ab3 100644 --- a/imports/NeoChat/Component/ChatBox/ChatBar.qml +++ b/imports/NeoChat/Component/ChatBox/ChatBar.qml @@ -277,14 +277,14 @@ ToolBar { } Item { - visible: !ChatBoxHelper.isReplying && (!ChatBoxHelper.hasAttachment || uploadingBusySpinner.running) + visible: !chatBoxHelper.isReplying && (!chatBoxHelper.hasAttachment || uploadingBusySpinner.running) implicitWidth: uploadButton.implicitWidth implicitHeight: uploadButton.implicitHeight ToolButton { id: uploadButton anchors.fill: parent // Matrix does not allow sending attachments in replies - visible: !ChatBoxHelper.isReplying && !ChatBoxHelper.hasAttachment && !uploadingBusySpinner.running + visible: !chatBoxHelper.isReplying && !chatBoxHelper.hasAttachment && !uploadingBusySpinner.running icon.name: "mail-attachment" text: i18n("Attach an image or file") display: AbstractButton.IconOnly @@ -296,7 +296,7 @@ ToolBar { var fileDialog = openFileDialog.createObject(ApplicationWindow.overlay) fileDialog.chosen.connect((path) => { if (!path) { return } - ChatBoxHelper.attachmentPath = path; + chatBoxHelper.attachmentPath = path; }) fileDialog.open() } @@ -379,16 +379,16 @@ ToolBar { if (!Clipboard.saveImage(localPath)) { return; } - ChatBoxHelper.attachmentPath = localPath; + chatBoxHelper.attachmentPath = localPath; } function postMessage() { checkForFancyEffectsReason(); - if (ChatBoxHelper.hasAttachment) { + if (chatBoxHelper.hasAttachment) { // send attachment but don't reset the text - actionsHandler.postMessage("", ChatBoxHelper.attachmentPath, - ChatBoxHelper.replyEventId, ChatBoxHelper.editEventId, {}, this.customEmojiModel); + actionsHandler.postMessage("", chatBoxHelper.attachmentPath, + chatBoxHelper.replyEventId, chatBoxHelper.editEventId, {}, this.customEmojiModel); currentRoom.markAllMessagesAsRead(); messageSent(); return; @@ -400,8 +400,8 @@ ToolBar { actionsHandler.postEdit(inputField.text); } else { // send normal message - actionsHandler.postMessage(inputField.text.trim(), ChatBoxHelper.attachmentPath, - ChatBoxHelper.replyEventId, ChatBoxHelper.editEventId, userAutocompleted, this.customEmojiModel); + actionsHandler.postMessage(inputField.text.trim(), chatBoxHelper.attachmentPath, + chatBoxHelper.replyEventId, chatBoxHelper.editEventId, userAutocompleted, this.customEmojiModel); } currentRoom.markAllMessagesAsRead(); inputField.clear(); diff --git a/imports/NeoChat/Component/ChatBox/ChatBox.qml b/imports/NeoChat/Component/ChatBox/ChatBox.qml index f9c3b78df..9156c5d91 100644 --- a/imports/NeoChat/Component/ChatBox/ChatBox.qml +++ b/imports/NeoChat/Component/ChatBox/ChatBox.qml @@ -127,8 +127,8 @@ Item { ReplyPane { id: replyPane - visible: ChatBoxHelper.isReplying || ChatBoxHelper.isEditing - user: ChatBoxHelper.replyUser + visible: chatBoxHelper.isReplying || chatBoxHelper.isEditing + user: chatBoxHelper.replyUser width: parent.width height: visible ? implicitHeight : 0 anchors.bottom: attachmentSeparator.top @@ -154,7 +154,7 @@ Item { AttachmentPane { id: attachmentPane - visible: ChatBoxHelper.hasAttachment + visible: chatBoxHelper.hasAttachment width: parent.width height: visible ? implicitHeight : 0 anchors.bottom: chatBarSeparator.top @@ -248,7 +248,7 @@ Item { } Connections { - target: ChatBoxHelper + target: chatBoxHelper function onShouldClearText() { root.inputFieldText = ""; @@ -277,7 +277,7 @@ Item { } function closeAll() { - ChatBoxHelper.clear(); + chatBoxHelper.clear(); chatBar.emojiPaneOpened = false; } } diff --git a/imports/NeoChat/Component/ChatBox/ReplyPane.qml b/imports/NeoChat/Component/ChatBox/ReplyPane.qml index a637ffc24..311e1e159 100644 --- a/imports/NeoChat/Component/ChatBox/ReplyPane.qml +++ b/imports/NeoChat/Component/ChatBox/ReplyPane.qml @@ -12,7 +12,7 @@ import org.kde.neochat 1.0 Loader { id: root - readonly property bool isEdit: ChatBoxHelper.isEditing + readonly property bool isEdit: chatBoxHelper.isEditing property var user: null property string avatarMediaUrl: user ? "image://mxc/" + user.avatarMediaId : "" @@ -83,7 +83,7 @@ Loader { bottomPadding: 0 text: { const stylesheet = ""; - const content = ChatBoxHelper.isReplying ? ChatBoxHelper.replyEventContent : ChatBoxHelper.editContent; + const content = chatBoxHelper.isReplying ? chatBoxHelper.replyEventContent : chatBoxHelper.editContent; return stylesheet + content; } selectByMouse: true @@ -106,7 +106,7 @@ Loader { text: i18n("Cancel") display: AbstractButton.IconOnly onClicked: { - ChatBoxHelper.clear(); + chatBoxHelper.clear(); root.replyCancelled(); } ToolTip.text: text diff --git a/imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml b/imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml index 63b9ac0fe..2a5623f79 100644 --- a/imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml +++ b/imports/NeoChat/Menu/Timeline/FileDelegateContextMenu.qml @@ -50,7 +50,7 @@ MessageDelegateContextMenu { text: i18n("Reply") icon.name: "mail-replied-symbolic" onTriggered: { - ChatBoxHelper.replyToMessage(eventId, message, author); + chatBoxHelper.replyToMessage(eventId, message, author); } }, Kirigami.Action { diff --git a/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml b/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml index 78e88ee29..1ade0ae65 100644 --- a/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml +++ b/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml @@ -28,13 +28,13 @@ Loader { Kirigami.Action { text: i18n("Edit") icon.name: "document-edit" - onTriggered: ChatBoxHelper.edit(message, formattedBody, eventId); + onTriggered: chatBoxHelper.edit(message, formattedBody, eventId); visible: eventType.length > 0 && author.id === Controller.activeConnection.localUserId && (eventType === "emote" || eventType === "message") }, Kirigami.Action { text: i18n("Reply") icon.name: "mail-replied-symbolic" - onTriggered: ChatBoxHelper.replyToMessage(eventId, message, author); + onTriggered: chatBoxHelper.replyToMessage(eventId, message, author); }, Kirigami.Action { visible: author.id === currentRoom.localUser.id || currentRoom.canSendState("redact") diff --git a/imports/NeoChat/Page/RoomPage.qml b/imports/NeoChat/Page/RoomPage.qml index 240e2aa8a..6307db6aa 100644 --- a/imports/NeoChat/Page/RoomPage.qml +++ b/imports/NeoChat/Page/RoomPage.qml @@ -53,7 +53,7 @@ Kirigami.ScrollablePage { onCurrentRoomChanged: { hasScrolledUpBefore = false; - ChatBoxHelper.clearEditReply() + chatBoxHelper.clearEditReply() } Connections { @@ -81,6 +81,10 @@ Kirigami.ScrollablePage { connection: Controller.activeConnection } + ChatBoxHelper { + id: chatBoxHelper + } + Shortcut { sequence: StandardKey.Cancel onActivated: applicationWindow().pageStack.get(0).forceActiveFocus() @@ -262,7 +266,7 @@ Kirigami.ScrollablePage { fileDialog.chosen.connect(function(path) { if (!path) return - ChatBoxHelper.attachmentPath = path; + chatBoxHelper.attachmentPath = path; }) fileDialog.open() @@ -284,7 +288,7 @@ Kirigami.ScrollablePage { if (!Clipboard.saveImage(localPath)) { return; } - ChatBoxHelper.attachmentPath = localPath; + chatBoxHelper.attachmentPath = localPath; attachDialog.close(); } } @@ -359,7 +363,7 @@ Kirigami.ScrollablePage { DropArea { id: dropAreaFile anchors.fill: parent - onDropped: ChatBoxHelper.attachmentPath = drop.urls[0] + onDropped: chatBoxHelper.attachmentPath = drop.urls[0] } QQC2.Pane { @@ -486,7 +490,7 @@ Kirigami.ScrollablePage { icon.name: "document-edit" onClicked: { if (hoverActions.showEdit) { - ChatBoxHelper.edit(hoverActions.event.message, hoverActions.event.formattedBody, hoverActions.event.eventId) + chatBoxHelper.edit(hoverActions.event.message, hoverActions.event.formattedBody, hoverActions.event.eventId) } chatBox.focusInputField(); } @@ -496,7 +500,7 @@ Kirigami.ScrollablePage { QQC2.ToolTip.visible: hovered icon.name: "mail-replied-symbolic" onClicked: { - ChatBoxHelper.replyToMessage(hoverActions.event.eventId, hoverActions.event.message, hoverActions.event.author); + chatBoxHelper.replyToMessage(hoverActions.event.eventId, hoverActions.event.message, hoverActions.event.author); chatBox.focusInputField(); } } @@ -516,14 +520,14 @@ Kirigami.ScrollablePage { onEditLastUserMessage: { const targetMessage = messageEventModel.getLastLocalUserMessageEventId(); if (targetMessage) { - ChatBoxHelper.edit(targetMessage["message"], targetMessage["formattedBody"], targetMessage["event_id"]); + chatBoxHelper.edit(targetMessage["message"], targetMessage["formattedBody"], targetMessage["event_id"]); chatBox.focusInputField(); } } onReplyPreviousUserMessage: { const replyResponse = messageEventModel.getLatestMessageFromIndex(0); if (replyResponse && replyResponse["event_id"]) { - ChatBoxHelper.replyToMessage(replyResponse["event_id"], replyResponse["message"], replyResponse["sender_id"]); + chatBoxHelper.replyToMessage(replyResponse["event_id"], replyResponse["message"], replyResponse["sender_id"]); } } } diff --git a/src/main.cpp b/src/main.cpp index 7a09d3e99..9c4f96ee1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -195,13 +195,13 @@ int main(int argc, char *argv[]) qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "RoomManager", &RoomManager::instance()); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "FileType", &fileTypeSingleton); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "LoginHelper", login); - qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "ChatBoxHelper", &chatBoxHelper); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "UrlHelper", &urlHelper); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "EmojiModel", new EmojiModel(&app)); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "CommandModel", new CommandModel(&app)); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "AccountRegistry", &Quotient::AccountRegistry::instance()); qmlRegisterSingletonInstance("org.kde.neochat", 1, 0, "SpaceHierarchyCache", &spaceHierarchyCache); qmlRegisterType("org.kde.neochat", 1, 0, "ActionsHandler"); + qmlRegisterType("org.kde.neochat", 1, 0, "ChatBoxHelper"); qmlRegisterType("org.kde.neochat", 1, 0, "ChatDocumentHandler"); qmlRegisterType("org.kde.neochat", 1, 0, "RoomListModel"); qmlRegisterType("org.kde.neochat", 1, 0, "WebShortcutModel");