summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorDeepBlueV7.X <nicolas.werner@hotmail.de>2021-04-27 09:35:47 +0000
committerGitHub <noreply@github.com>2021-04-27 09:35:47 +0000
commit1e3f0f3b269e9813e55d27da27ffe77fecc04b22 (patch)
treebcf9862d3aa1bec082ed80192bd38fab08883df2 /resources
parentUpdate translation files (diff)
parentMake forward messages a bit more readable (diff)
downloadnheko-1e3f0f3b269e9813e55d27da27ffe77fecc04b22.tar.xz
Merge pull request #552 from Jedi18/forward_message_feature
Forward Message
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/ForwardCompleter.qml117
-rw-r--r--resources/qml/TimelineView.qml18
-rw-r--r--resources/qml/TopBar.qml4
-rw-r--r--resources/res.qrc1
4 files changed, 138 insertions, 2 deletions
diff --git a/resources/qml/ForwardCompleter.qml b/resources/qml/ForwardCompleter.qml
new file mode 100644

index 00000000..c544378b --- /dev/null +++ b/resources/qml/ForwardCompleter.qml
@@ -0,0 +1,117 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +import "./delegates/" +import QtQuick 2.9 +import QtQuick.Controls 2.3 +import im.nheko 1.0 + +Popup { + id: forwardMessagePopup + + property var mid + + function setMessageEventId(mid_in) { + mid = mid_in; + } + + x: Math.round(parent.width / 2 - width / 2) + y: Math.round(parent.height / 2 - height / 2) + modal: true + palette: colors + parent: Overlay.overlay + width: implicitWidth >= (timelineRoot.width * 0.8) ? implicitWidth : (timelineRoot.width * 0.8) + height: implicitHeight + completerPopup.height + padding * 2 + leftPadding: 10 + rightPadding: 10 + background: Rectangle { + color: colors.window + } + + onOpened: { + completerPopup.open(); + roomTextInput.forceActiveFocus(); + } + onClosed: { + completerPopup.close(); + } + + Column { + id: forwardColumn + + spacing: 5 + + Label { + id: titleLabel + + text: qsTr("Forward Message") + font.bold: true + bottomPadding: 10 + color: colors.text + } + + Reply { + id: replyPreview + + modelData: TimelineManager.timeline ? TimelineManager.timeline.getDump(mid, "") : { + } + userColor: TimelineManager.userColor(modelData.userId, colors.window) + } + + MatrixTextField { + id: roomTextInput + + width: forwardMessagePopup.width - forwardMessagePopup.leftPadding * 2 + color: colors.text + onTextEdited: { + completerPopup.completer.searchString = text; + } + Keys.onPressed: { + if (event.key == Qt.Key_Up && completerPopup.opened) { + event.accepted = true; + completerPopup.up(); + } else if (event.key == Qt.Key_Down && completerPopup.opened) { + event.accepted = true; + completerPopup.down(); + } else if (event.matches(StandardKey.InsertParagraphSeparator)) { + completerPopup.finishCompletion(); + event.accepted = true; + } + } + } + + } + + Completer { + id: completerPopup + + y: titleLabel.height + replyPreview.height + roomTextInput.height + roomTextInput.bottomPadding + forwardColumn.spacing * 3 + width: forwardMessagePopup.width - forwardMessagePopup.leftPadding * 2 + completerName: "room" + fullWidth: true + centerRowContent: false + avatarHeight: 24 + avatarWidth: 24 + bottomToTop: false + closePolicy: Popup.NoAutoClose + } + + Connections { + onCompletionSelected: { + TimelineManager.timeline.forwardMessage(messageContextMenu.eventId, id); + forwardMessagePopup.close(); + } + onCountChanged: { + if (completerPopup.count > 0 && (completerPopup.currentIndex < 0 || completerPopup.currentIndex >= completerPopup.count)) + completerPopup.currentIndex = 0; + + } + target: completerPopup + } + + Overlay.modal: Rectangle { + color: Qt.rgba(colors.window.r, colors.window.g, colors.window.b, 0.7) + } + +} diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index 3cc2ab15..81ca7705 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml
@@ -71,6 +71,14 @@ Page { } + Component { + id: forwardCompleterComponent + + ForwardCompleter { + } + + } + Shortcut { sequence: "Ctrl+K" onActivated: { @@ -126,6 +134,16 @@ Page { } Platform.MenuItem { + visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker || messageContextMenu.eventType == MtxEvent.TextMessage || messageContextMenu.eventType == MtxEvent.LocationMessage || messageContextMenu.eventType == MtxEvent.EmoteMessage || messageContextMenu.eventType == MtxEvent.NoticeMessage + text: qsTr("Forward") + onTriggered: { + var forwardMess = forwardCompleterComponent.createObject(timelineRoot); + forwardMess.setMessageEventId(messageContextMenu.eventId); + forwardMess.open(); + } + } + + Platform.MenuItem { text: qsTr("Mark as read") } diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index f5c5c84a..858652c2 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml
@@ -72,8 +72,8 @@ Rectangle { font.pointSize: fontMetrics.font.pointSize * 1.1 text: room ? room.roomName : qsTr("No room selected") maximumLineCount: 1 - elide: Text.ElideRight - textFormat: Text.RichText + elide: Text.ElideRight + textFormat: Text.RichText } MatrixText { diff --git a/resources/res.qrc b/resources/res.qrc
index 328f65ca..304493b6 100644 --- a/resources/res.qrc +++ b/resources/res.qrc
@@ -142,6 +142,7 @@ <file>qml/TimelineRow.qml</file> <file>qml/TopBar.qml</file> <file>qml/QuickSwitcher.qml</file> + <file>qml/ForwardCompleter.qml</file> <file>qml/TypingIndicator.qml</file> <file>qml/RoomSettings.qml</file> <file>qml/emoji/EmojiButton.qml</file>