1 files changed, 71 insertions, 318 deletions
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index a848cb49..0d0e286d 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -9,370 +9,123 @@ import "./voip"
import Qt.labs.platform 1.1 as Platform
import QtGraphicalEffects 1.0
import QtQuick 2.9
-import QtQuick.Controls 2.3
+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 {
- }
+Item {
+ id: timelineView
+ Label {
+ visible: !TimelineManager.timeline && !TimelineManager.isInitialSync
+ anchors.centerIn: parent
+ text: qsTr("No room open")
+ font.pointSize: 24
+ color: Nheko.colors.text
}
- Shortcut {
- sequence: "Ctrl+K"
- onActivated: {
- var quickSwitch = quickSwitcherComponent.createObject(timelineRoot);
- TimelineManager.focusTimeline();
- quickSwitch.open();
- }
+ BusyIndicator {
+ visible: running
+ anchors.centerIn: parent
+ running: TimelineManager.isInitialSync
+ height: 200
+ width: 200
+ z: 3
}
- 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
+ ColumnLayout {
+ id: timelineLayout
- 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)
- }
-
- }
-
- Rectangle {
+ visible: TimelineManager.timeline != null
anchors.fill: parent
- color: Nheko.colors.window
-
- 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();
- }
- }
- }
+ spacing: 0
- Label {
- visible: !TimelineManager.timeline && !TimelineManager.isInitialSync
- anchors.centerIn: parent
- text: qsTr("No room open")
- font.pointSize: 24
- color: Nheko.colors.text
+ TopBar {
}
- BusyIndicator {
- visible: running
- anchors.centerIn: parent
- running: TimelineManager.isInitialSync
- height: 200
- width: 200
+ Rectangle {
+ Layout.fillWidth: true
+ height: 1
z: 3
+ color: Nheko.colors.mid
}
- ColumnLayout {
- id: timelineLayout
+ Rectangle {
+ id: msgView
- visible: TimelineManager.timeline != null
- anchors.fill: parent
- spacing: 0
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ color: Nheko.colors.base
- TopBar {
- }
-
- Rectangle {
- Layout.fillWidth: true
- height: 1
- z: 3
- color: Nheko.colors.mid
- }
-
- Rectangle {
- id: msgView
-
- Layout.fillWidth: true
- Layout.fillHeight: true
- color: Nheko.colors.base
-
- ColumnLayout {
- anchors.fill: parent
- spacing: 0
-
- StackLayout {
- id: stackLayout
+ ColumnLayout {
+ anchors.fill: parent
+ spacing: 0
- currentIndex: 0
+ StackLayout {
+ id: stackLayout
- Connections {
- function onActiveTimelineChanged() {
- stackLayout.currentIndex = 0;
- }
+ currentIndex: 0
- target: TimelineManager
+ Connections {
+ function onActiveTimelineChanged() {
+ stackLayout.currentIndex = 0;
}
- MessageView {
- Layout.fillWidth: true
- Layout.fillHeight: true
- }
-
- Loader {
- source: CallManager.isOnCall && CallManager.callType != CallType.VOICE ? "voip/VideoCall.qml" : ""
- onLoaded: TimelineManager.setVideoCallItem()
- }
+ target: TimelineManager
+ }
+ MessageView {
+ Layout.fillWidth: true
+ implicitHeight: msgView.height - typingIndicator.height
}
- TypingIndicator {
+ Loader {
+ source: CallManager.isOnCall && CallManager.callType != CallType.VOICE ? "voip/VideoCall.qml" : ""
+ onLoaded: TimelineManager.setVideoCallItem()
}
}
- }
-
- CallInviteBar {
- id: callInviteBar
+ TypingIndicator {
+ id: typingIndicator
+ }
- Layout.fillWidth: true
- z: 3
}
- ActiveCallBar {
- Layout.fillWidth: true
- z: 3
- }
+ }
- Rectangle {
- Layout.fillWidth: true
- z: 3
- height: 1
- color: Nheko.colors.mid
- }
+ CallInviteBar {
+ id: callInviteBar
- ReplyPopup {
- }
+ Layout.fillWidth: true
+ z: 3
+ }
- MessageInput {
- }
+ ActiveCallBar {
+ Layout.fillWidth: true
+ z: 3
+ }
+
+ Rectangle {
+ Layout.fillWidth: true
+ z: 3
+ height: 1
+ color: Nheko.colors.mid
+ }
+ ReplyPopup {
}
- NhekoDropArea {
- anchors.fill: parent
- roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : ""
+ MessageInput {
}
}
- PrivacyScreen {
+ NhekoDropArea {
anchors.fill: parent
- visible: Settings.privacyScreen
- screenTimeout: Settings.privacyScreenTimeout
- timelineRoot: timelineLayout
+ roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : ""
}
}
|