diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index 7f2de64d..03ed1a8d 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -252,9 +252,9 @@ ScrollView { topPadding: 4 bottomPadding: 4 spacing: 8 - visible: (previousMessageUserId !== userId || previousMessageDay !== day) + visible: (previousMessageUserId !== userId || previousMessageDay !== day || previousMessageIsStateEvent) && !isStateEvent width: parentWidth - height: ((previousMessageDay !== day) ? dateBubble.height + 8 + userName.height : userName.height) + 8 + height: ((previousMessageDay !== day) ? dateBubble.height : 0) + (isStateEvent? 0 : userName.height +8 ) Label { id: dateBubble @@ -317,7 +317,7 @@ ScrollView { color: TimelineManager.userColor(userId, Nheko.colors.base) textFormat: Text.RichText ToolTip.visible: displayNameHover.hovered - ToolTip.delay: Nheko.tooltipDelay + ToolTip.delay: Nheko.tooltipDelay ToolTip.text: userId TapHandler { @@ -379,6 +379,8 @@ ScrollView { required property bool isEncrypted required property bool isEditable required property bool isEdited + required property bool isStateEvent + required property bool previousMessageIsStateEvent required property string replyTo required property string userId required property string roomTopic @@ -455,6 +457,8 @@ ScrollView { property string previousMessageUserId: wrapper.previousMessageUserId property string day: wrapper.day property string previousMessageDay: wrapper.previousMessageDay + property bool previousMessageIsStateEvent: wrapper.previousMessageIsStateEvent + property bool isStateEvent: wrapper.isStateEvent property string userName: wrapper.userName property date timestamp: wrapper.timestamp @@ -487,6 +491,7 @@ ScrollView { isEncrypted: wrapper.isEncrypted isEditable: wrapper.isEditable isEdited: wrapper.isEdited + isStateEvent: wrapper.isStateEvent replyTo: wrapper.replyTo userId: wrapper.userId userName: wrapper.userName diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index c221d43f..b91d08d2 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -31,6 +31,7 @@ Item { required property bool isEncrypted required property bool isEditable required property bool isEdited + required property bool isStateEvent required property string replyTo required property string userId required property string userName @@ -89,7 +90,7 @@ Item { property color bgColor: Nheko.colors.base color: Qt.rgba(userColor.r*0.1+bgColor.r*0.9,userColor.g*0.1+bgColor.g*0.9,userColor.b*0.1+bgColor.b*0.9,1) //TimelineManager.userColor(userId, Nheko.colors.base) radius: 4 - visible: Settings.bubbles + visible: Settings.bubbles && !isStateEvent } GridLayout { @@ -130,6 +131,7 @@ Item { url: r.relatedEventCacheBuster, fromModel(Room.Url) ?? "" originalWidth: r.relatedEventCacheBuster, fromModel(Room.OriginalWidth) ?? 0 isOnlyEmoji: r.relatedEventCacheBuster, fromModel(Room.IsOnlyEmoji) ?? false + isStateEvent: r.relatedEventCacheBuster, fromModel(Room.IsStateEvent) ?? false userId: r.relatedEventCacheBuster, fromModel(Room.UserId) ?? "" userName: r.relatedEventCacheBuster, fromModel(Room.UserName) ?? "" thumbnailUrl: r.relatedEventCacheBuster, fromModel(Room.ThumbnailUrl) ?? "" @@ -160,6 +162,7 @@ Item { thumbnailUrl: r.thumbnailUrl originalWidth: r.originalWidth isOnlyEmoji: r.isOnlyEmoji + isStateEvent: r.isStateEvent userId: r.userId userName: r.userName roomTopic: r.roomTopic @@ -176,6 +179,7 @@ Item { Layout.rowSpan: msg.narrowLayout? 1 : 2 Layout.bottomMargin: msg.narrowLayout? -4 : 0 Layout.alignment: Qt.AlignTop | Qt.AlignRight + visible: !isStateEvent property double scaling: msg.narrowLayout? 0.75 : 1 StatusIndicator { diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml index 8c74bfe8..aef69ba4 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml @@ -27,6 +27,7 @@ Item { required property string url required property string thumbnailUrl required property bool isOnlyEmoji + required property bool isStateEvent required property string userId required property string userName required property string roomTopic @@ -77,6 +78,7 @@ Item { body: d.body isOnlyEmoji: d.isOnlyEmoji isReply: d.isReply + isStateEvent: d.isStateEvent } } @@ -90,6 +92,7 @@ Item { body: d.body isOnlyEmoji: d.isOnlyEmoji isReply: d.isReply + isStateEvent: d.isStateEvent } } @@ -184,6 +187,7 @@ Item { Pill { text: qsTr("removed") + isStateEvent: d.isStateEvent } } @@ -193,6 +197,7 @@ Item { Pill { text: qsTr("Encryption enabled") + isStateEvent: d.isStateEvent } } @@ -214,6 +219,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: d.roomName ? qsTr("room name changed to: %1").arg(d.roomName) : qsTr("removed room name") } @@ -226,6 +232,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: d.roomTopic ? qsTr("topic changed to: %1").arg(d.roomTopic) : qsTr("removed topic") } @@ -238,6 +245,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 changed the room avatar").arg(d.userName) } @@ -250,6 +258,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 changed the pinned messages.").arg(d.userName) } @@ -262,6 +271,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 changed the stickers and emotes in this room.").arg(d.userName) } @@ -274,6 +284,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 changed the addresses for this room.").arg(d.userName) } @@ -286,6 +297,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 changed the parent spaces for this room.").arg(d.userName) } @@ -298,6 +310,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 created and configured room: %2").arg(d.userName).arg(room.roomId) } @@ -310,6 +323,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: { switch (d.callType) { case "voice": @@ -331,6 +345,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 answered the call.").arg(d.userName) } @@ -343,6 +358,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("%1 ended the call.").arg(d.userName) } @@ -355,6 +371,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: qsTr("Negotiating call...") } @@ -368,6 +385,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: d.relatedEventCacheBuster, room.formatPowerLevelEvent(d.eventId) } @@ -380,6 +398,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: d.relatedEventCacheBuster, room.formatJoinRuleEvent(d.eventId) } @@ -392,6 +411,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: d.relatedEventCacheBuster, room.formatHistoryVisibilityEvent(d.eventId) } @@ -404,6 +424,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: d.relatedEventCacheBuster, room.formatGuestAccessEvent(d.eventId) } @@ -419,6 +440,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent Layout.fillWidth: true formatted: d.relatedEventCacheBuster, room.formatMemberEvent(d.eventId) } @@ -441,6 +463,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationRequest" } @@ -453,6 +476,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationStart" } @@ -465,6 +489,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationReady" } @@ -477,6 +502,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationCancel" } @@ -489,6 +515,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationKey" } @@ -501,6 +528,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationMac" } @@ -513,6 +541,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationDone" } @@ -525,6 +554,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationDone" } @@ -537,6 +567,7 @@ Item { body: formatted isOnlyEmoji: false isReply: d.isReply + isStateEvent: d.isStateEvent formatted: "KeyVerificationAccept" } diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml index fa4bbb35..544af109 100644 --- a/resources/qml/delegates/NoticeMessage.qml +++ b/resources/qml/delegates/NoticeMessage.qml @@ -5,7 +5,10 @@ import im.nheko 1.0 + TextMessage { + property bool isStateEvent font.italic: true color: Nheko.colors.buttonText + font.pointSize: isStateEvent? 0.75*fontMetrics.font.pointSize : 1*fontMetrics.font.pointSize } diff --git a/resources/qml/delegates/Pill.qml b/resources/qml/delegates/Pill.qml index 06420586..bfc18b9a 100644 --- a/resources/qml/delegates/Pill.qml +++ b/resources/qml/delegates/Pill.qml @@ -8,10 +8,12 @@ import QtQuick.Controls 2.1 import im.nheko 1.0 Label { + property bool isStateEvent color: Nheko.colors.text horizontalAlignment: Text.AlignHCenter height: contentHeight * 1.2 width: contentWidth * 1.2 + font.pointSize: isStateEvent? 0.75*fontMetrics.font.pointSize : 1*fontMetrics.font.pointSize background: Rectangle { radius: parent.height / 2 diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml index cc7f8d8f..f5556c8b 100644 --- a/resources/qml/delegates/Reply.qml +++ b/resources/qml/delegates/Reply.qml @@ -26,6 +26,7 @@ Item { property string filesize property string url property bool isOnlyEmoji + property bool isStateEvent property string userId property string userName property string thumbnailUrl @@ -110,6 +111,7 @@ Item { thumbnailUrl: r.thumbnailUrl originalWidth: r.originalWidth isOnlyEmoji: r.isOnlyEmoji + isStateEvent: r.isStateEvent userId: r.userId userName: r.userName roomTopic: r.roomTopic