mirror of https://github.com/Nheko-Reborn/nheko
parent
aef0cb9884
commit
b187440e68
@ -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 |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue