1 files changed, 139 insertions, 1 deletions
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index 5af4e4de..176905db 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -4,6 +4,7 @@
import "./delegates"
import "./emoji"
+import Qt.labs.platform 1.1 as Platform
import QtGraphicalEffects 1.0
import QtQuick 2.12
import QtQuick.Controls 2.3
@@ -22,7 +23,7 @@ ScrollView {
property int delegateMaxWidth: ((Settings.timelineMaxWidth > 100 && Settings.timelineMaxWidth < parent.availableWidth) ? Settings.timelineMaxWidth : parent.availableWidth) - parent.padding * 2
- model: TimelineManager.timeline
+ model: room
boundsBehavior: Flickable.StopAtBounds
pixelAligned: true
spacing: 4
@@ -413,4 +414,141 @@ ScrollView {
}
+ Platform.Menu {
+ id: messageContextMenu
+
+ property string eventId
+ property string link
+ property string text
+ property int eventType
+ property bool isEncrypted
+ property bool isEditable
+ property bool isSender
+
+ function show(eventId_, eventType_, isSender_, isEncrypted_, isEditable_, link_, text_, showAt_) {
+ eventId = eventId_;
+ eventType = eventType_;
+ isEncrypted = isEncrypted_;
+ isEditable = isEditable_;
+ isSender = isSender_;
+ if (text_)
+ text = text_;
+ else
+ text = "";
+ if (link_)
+ link = link_;
+ else
+ link = "";
+ if (showAt_)
+ open(showAt_);
+ else
+ open();
+ }
+
+ Platform.MenuItem {
+ visible: messageContextMenu.text
+ enabled: visible
+ text: qsTr("Copy")
+ onTriggered: Clipboard.text = messageContextMenu.text
+ }
+
+ Platform.MenuItem {
+ visible: messageContextMenu.link
+ enabled: visible
+ text: qsTr("Copy link location")
+ onTriggered: Clipboard.text = messageContextMenu.link
+ }
+
+ Platform.MenuItem {
+ id: reactionOption
+
+ visible: room ? room.permissions.canSend(MtxEvent.Reaction) : false
+ text: qsTr("React")
+ onTriggered: emojiPopup.show(null, function(emoji) {
+ room.input.reaction(messageContextMenu.eventId, emoji);
+ })
+ }
+
+ Platform.MenuItem {
+ visible: room ? room.permissions.canSend(MtxEvent.TextMessage) : false
+ text: qsTr("Reply")
+ onTriggered: room.replyAction(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ visible: messageContextMenu.isEditable && (room ? room.permissions.canSend(MtxEvent.TextMessage) : false)
+ enabled: visible
+ text: qsTr("Edit")
+ onTriggered: room.editAction(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ text: qsTr("Read receipts")
+ onTriggered: room.readReceiptsAction(messageContextMenu.eventId)
+ }
+
+ 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")
+ }
+
+ Platform.MenuItem {
+ text: qsTr("View raw message")
+ onTriggered: room.viewRawMessage(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ // TODO(Nico): Fix this still being iterated over, when using keyboard to select options
+ visible: messageContextMenu.isEncrypted
+ enabled: visible
+ text: qsTr("View decrypted raw message")
+ onTriggered: room.viewDecryptedRawMessage(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ visible: (room ? room.permissions.canRedact() : false) || messageContextMenu.isSender
+ text: qsTr("Remove message")
+ onTriggered: room.redactEvent(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker
+ enabled: visible
+ text: qsTr("Save as")
+ onTriggered: room.saveMedia(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker
+ enabled: visible
+ text: qsTr("Open in external program")
+ onTriggered: room.openMedia(messageContextMenu.eventId)
+ }
+
+ Platform.MenuItem {
+ visible: messageContextMenu.eventId
+ enabled: visible
+ text: qsTr("Copy link to event")
+ onTriggered: room.copyLinkToEvent(messageContextMenu.eventId)
+ }
+
+ }
+
+ Component {
+ id: forwardCompleterComponent
+
+ ForwardCompleter {
+ }
+
+ }
+
}
|