summaryrefslogtreecommitdiffstats
path: root/resources/qml/TimelineEvent.qml
diff options
context:
space:
mode:
Diffstat (limited to 'resources/qml/TimelineEvent.qml')
-rw-r--r--resources/qml/TimelineEvent.qml255
1 files changed, 255 insertions, 0 deletions
diff --git a/resources/qml/TimelineEvent.qml b/resources/qml/TimelineEvent.qml
new file mode 100644
index 00000000..787fb7dc
--- /dev/null
+++ b/resources/qml/TimelineEvent.qml
@@ -0,0 +1,255 @@
+// SPDX-FileCopyrightText: Nheko Contributors
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+import "./components"
+import "./delegates"
+import "./emoji"
+import "./ui"
+import "./dialogs"
+import Qt.labs.platform 1.1 as Platform
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+import QtQuick.Layouts 1.2
+import QtQuick.Window 2.13
+import im.nheko 1.0
+
+EventDelegateChooser {
+ id: wrapper
+
+ required property bool isStateEvent
+
+ EventDelegateChoice {
+ roleValues: [MtxEvent.TextMessage, MtxEvent.NoticeMessage, MtxEvent.ElementEffectMessage, MtxEvent.UnknownMessage,]
+
+ TextMessage {
+ required property string formattedBody
+ required property int type
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ //Layout.maximumWidth: implicitWidth
+
+ color: type == MtxEvent.NoticeMessage ? palette.buttonText : palette.text
+ font.italic: type == MtxEvent.NoticeMessage
+ formatted: formattedBody
+ keepFullText: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.EmoteMessage,]
+
+ TextMessage {
+ required property string formattedBody
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ //Layout.maximumWidth: implicitWidth
+
+ color: TimelineManager.userColor(userId, palette.base)
+ font.italic: true
+ formatted: TimelineManager.escapeEmoji(userName) + " " + formattedBody
+ keepFullText: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.CanonicalAlias, MtxEvent.ServerAcl, MtxEvent.Name, MtxEvent.Topic, MtxEvent.Avatar, MtxEvent.PinnedEvents, MtxEvent.ImagePackInRoom, MtxEvent.SpaceParent, MtxEvent.RoomCreate, MtxEvent.PowerLevels, MtxEvent.PolicyRuleUser, MtxEvent.PolicyRuleRoom, MtxEvent.PolicyRuleServer, MtxEvent.RoomJoinRules, MtxEvent.RoomHistoryVisibility, MtxEvent.RoomGuestAccess,]
+
+ TextMessage {
+ required property string formattedStateEvent
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ //Layout.maximumWidth: implicitWidth
+
+ body: ''
+ color: palette.buttonText
+ font.italic: true
+ formatted: ''
+ horizontalAlignment: Text.AlignHCenter
+ isOnlyEmoji: false
+ keepFullText: true
+ text: formattedStateEvent
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.CallInvite,]
+
+ TextMessage {
+ required property string callType
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ body: formatted
+ color: palette.buttonText
+ font.italic: true
+ formatted: {
+ switch (callType) {
+ case "voice":
+ return qsTr("%1 placed a voice call.").arg(TimelineManager.escapeEmoji(userName));
+ case "video":
+ return qsTr("%1 placed a video call.").arg(TimelineManager.escapeEmoji(userName));
+ default:
+ return qsTr("%1 placed a call.").arg(TimelineManager.escapeEmoji(userName));
+ }
+ }
+ isOnlyEmoji: false
+ keepFullText: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.CallAnswer, MtxEvent.CallReject, MtxEvent.CallSelectAnswer, MtxEvent.CallHangUp, MtxEvent.CallCandidates, MtxEvent.CallNegotiate,]
+
+ TextMessage {
+ required property int type
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ body: formatted
+ color: palette.buttonText
+ font.italic: true
+ formatted: {
+ switch (type) {
+ case MtxEvent.CallAnswer:
+ return qsTr("%1 answered the call.").arg(TimelineManager.escapeEmoji(userName));
+ case MtxEvent.CallReject:
+ return qsTr("%1 rejected the call.").arg(TimelineManager.escapeEmoji(userName));
+ case MtxEvent.CallSelectAnswer:
+ return qsTr("%1 selected answer.").arg(TimelineManager.escapeEmoji(userName));
+ case MtxEvent.CallHangUp:
+ return qsTr("%1 ended the call.").arg(TimelineManager.escapeEmoji(userName));
+ case MtxEvent.CallCandidates:
+ return qsTr("%1 is negotiating the call...").arg(TimelineManager.escapeEmoji(userName));
+ case MtxEvent.CallNegotiate:
+ return qsTr("%1 is negotiating the call...").arg(TimelineManager.escapeEmoji(userName));
+ }
+ }
+ isOnlyEmoji: false
+ keepFullText: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.ImageMessage, MtxEvent.Sticker,]
+
+ ImageMessage {
+ Layout.fillWidth: true
+ Layout.maximumWidth: tempWidth
+ containerHeight: timelineView.height
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.FileMessage,]
+
+ FileMessage {
+ Layout.fillWidth: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.VideoMessage, MtxEvent.AudioMessage,]
+
+ PlayableMediaMessage {
+ Layout.fillWidth: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.Encrypted,]
+
+ Encrypted {
+ Layout.fillWidth: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.Encryption,]
+
+ EncryptionEnabled {
+ Layout.fillWidth: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.Redacted]
+
+ Redacted {
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.Member]
+
+ ColumnLayout {
+ id: member
+
+ required property string formattedStateEvent
+ required property bool isReply
+ required property Room room
+ required property string userId
+ required property string userName
+
+ NoticeMessage {
+ Layout.fillWidth: true
+ body: formatted
+ formatted: member.formattedStateEvent
+ isOnlyEmoji: false
+ isReply: member.isReply
+ isStateEvent: true
+ keepFullText: true
+ }
+ Button {
+ Layout.alignment: Qt.AlignHCenter
+ text: qsTr("Allow them in")
+ visible: room.showAcceptKnockButton(eventId)
+
+ onClicked: room.acceptKnock(member.eventId)
+ }
+ }
+ }
+ EventDelegateChoice {
+ roleValues: [MtxEvent.Tombstone]
+
+ ColumnLayout {
+ id: tombstone
+
+ required property string body
+ required property string eventId
+ required property bool isReply
+ required property Room room
+ required property string userId
+ required property string userName
+
+ NoticeMessage {
+ Layout.fillWidth: true
+ body: formatted
+ formatted: qsTr("This room was replaced for the following reason: %1").arg(tombstone.body)
+ isOnlyEmoji: false
+ isReply: tombstone.isReply
+ isStateEvent: true
+ keepFullText: true
+ }
+ Button {
+ Layout.alignment: Qt.AlignHCenter
+ text: qsTr("Go to replacement room")
+
+ onClicked: tombstone.room.joinReplacementRoom(tombstone.eventId)
+ }
+ }
+ }
+ EventDelegateChoice {
+ roleValues: []
+
+ MatrixText {
+ required property string typeString
+ required property string userId
+ required property string userName
+
+ Layout.fillWidth: true
+ text: "Unsupported: " + typeString
+ }
+ }
+}