diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-05-14 15:23:32 +0200 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-05-14 15:23:40 +0200 |
commit | 39a43ad4abc84733b6e8a5a244f1055048ce115c (patch) | |
tree | 89110bb753926ed22959f6f992ae66c97ddb45cc /resources/qml/Root.qml | |
parent | Move global avatarSize property (diff) | |
download | nheko-39a43ad4abc84733b6e8a5a244f1055048ce115c.tar.xz |
Reorganize TimelineView to prepare porting the room list
Diffstat (limited to 'resources/qml/Root.qml')
-rw-r--r-- | resources/qml/Root.qml | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml new file mode 100644 index 00000000..35b81a1f --- /dev/null +++ b/resources/qml/Root.qml @@ -0,0 +1,260 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +import "./delegates" +import "./device-verification" +import "./emoji" +import "./voip" +import Qt.labs.platform 1.1 as Platform +import QtGraphicalEffects 1.0 +import QtQuick 2.9 +import QtQuick.Controls 2.13 +import QtQuick.Layouts 1.3 +import QtQuick.Window 2.2 +import im.nheko 1.0 +import im.nheko.EmojiModel 1.0 + +Page { + id: timelineRoot + + palette: Nheko.colors + + FontMetrics { + id: fontMetrics + } + + EmojiPicker { + id: emojiPopup + + colors: palette + model: TimelineManager.completerFor("allemoji", "") + } + + Component { + id: userProfileComponent + + UserProfile { + } + + } + + Component { + id: roomSettingsComponent + + RoomSettings { + } + + } + + Component { + id: mobileCallInviteDialog + + CallInvite { + } + + } + + Component { + id: quickSwitcherComponent + + QuickSwitcher { + } + + } + + Component { + id: forwardCompleterComponent + + ForwardCompleter { + } + + } + + Shortcut { + sequence: "Ctrl+K" + onActivated: { + var quickSwitch = quickSwitcherComponent.createObject(timelineRoot); + TimelineManager.focusTimeline(); + quickSwitch.open(); + } + } + + 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: TimelineManager.timeline ? TimelineManager.timeline.permissions.canSend(MtxEvent.Reaction) : false + text: qsTr("React") + onTriggered: emojiPopup.show(null, function(emoji) { + TimelineManager.queueReactionMessage(messageContextMenu.eventId, emoji); + }) + } + + Platform.MenuItem { + visible: TimelineManager.timeline ? TimelineManager.timeline.permissions.canSend(MtxEvent.TextMessage) : false + text: qsTr("Reply") + onTriggered: TimelineManager.timeline.replyAction(messageContextMenu.eventId) + } + + Platform.MenuItem { + visible: messageContextMenu.isEditable && (TimelineManager.timeline ? TimelineManager.timeline.permissions.canSend(MtxEvent.TextMessage) : false) + enabled: visible + text: qsTr("Edit") + onTriggered: TimelineManager.timeline.editAction(messageContextMenu.eventId) + } + + Platform.MenuItem { + text: qsTr("Read receipts") + onTriggered: TimelineManager.timeline.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: TimelineManager.timeline.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: TimelineManager.timeline.viewDecryptedRawMessage(messageContextMenu.eventId) + } + + Platform.MenuItem { + visible: (TimelineManager.timeline ? TimelineManager.timeline.permissions.canRedact() : false) || messageContextMenu.isSender + text: qsTr("Remove message") + onTriggered: TimelineManager.timeline.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: TimelineManager.timeline.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: TimelineManager.timeline.openMedia(messageContextMenu.eventId) + } + + Platform.MenuItem { + visible: messageContextMenu.eventId + enabled: visible + text: qsTr("Copy link to event") + onTriggered: TimelineManager.timeline.copyLinkToEvent(messageContextMenu.eventId) + } + + } + + Component { + id: deviceVerificationDialog + + DeviceVerification { + } + + } + + Connections { + target: TimelineManager + onNewDeviceVerificationRequest: { + var dialog = deviceVerificationDialog.createObject(timelineRoot, { + "flow": flow + }); + dialog.show(); + } + onOpenProfile: { + var userProfile = userProfileComponent.createObject(timelineRoot, { + "profile": profile + }); + userProfile.show(); + } + } + + Connections { + target: TimelineManager.timeline + onOpenRoomSettingsDialog: { + var roomSettings = roomSettingsComponent.createObject(timelineRoot, { + "roomSettings": settings + }); + roomSettings.show(); + } + } + + Connections { + target: CallManager + onNewInviteState: { + if (CallManager.haveCallInvite && Settings.mobileMode) { + var dialog = mobileCallInviteDialog.createObject(msgView); + dialog.open(); + } + } + } + + ChatPage { + anchors.fill: parent + } + +} |