diff --git a/CMakeLists.txt b/CMakeLists.txt index 302dc32d..0b22a7f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -165,7 +165,7 @@ endif() # # Discover Qt dependencies. # -find_package(Qt5 5.12 COMPONENTS Core Widgets LinguistTools Concurrent Svg Multimedia Qml QuickControls2 QuickWidgets REQUIRED) +find_package(Qt5 5.15 COMPONENTS Core Widgets LinguistTools Concurrent Svg Multimedia Qml QuickControls2 QuickWidgets REQUIRED) find_package(Qt5QuickCompiler) find_package(Qt5DBus) diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index a92beb38..a1ce8d7e 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -5,8 +5,8 @@ import "./dialogs" import Qt.labs.platform 1.1 as Platform import QtQml 2.12 -import QtQuick 2.12 -import QtQuick.Controls 2.5 +import QtQuick 2.15 +import QtQuick.Controls 2.15 import QtQuick.Layouts 1.3 import im.nheko 1.0 @@ -23,6 +23,7 @@ Page { anchors.right: parent.right height: parent.height model: Rooms + reuseItems: true ScrollHelper { flickable: parent @@ -111,17 +112,28 @@ Page { property color unimportantText: Nheko.colors.buttonText property color bubbleBackground: Nheko.colors.highlight property color bubbleText: Nheko.colors.highlightedText + required property string roomName + required property string roomId + required property string avatarUrl + required property string time + required property string lastMessage + required property var tags + required property bool isInvite + required property bool isSpace + required property int notificationCount + required property bool hasLoudNotification + required property bool hasUnreadMessages color: background height: avatarSize + 2 * Nheko.paddingMedium width: ListView.view.width state: "normal" ToolTip.visible: hovered.hovered && collapsed - ToolTip.text: model.roomName + ToolTip.text: roomName states: [ State { name: "highlight" - when: hovered.hovered && !((Rooms.currentRoom && model.roomId == Rooms.currentRoom.roomId()) || Rooms.currentRoomPreview.roomid == model.roomId) + when: hovered.hovered && !((Rooms.currentRoom && roomId == Rooms.currentRoom.roomId()) || Rooms.currentRoomPreview.roomid == roomId) PropertyChanges { target: roomItem @@ -135,7 +147,7 @@ Page { }, State { name: "selected" - when: (Rooms.currentRoom && model.roomId == Rooms.currentRoom.roomId()) || Rooms.currentRoomPreview.roomid == model.roomId + when: (Rooms.currentRoom && roomId == Rooms.currentRoom.roomId()) || Rooms.currentRoomPreview.roomid == roomId PropertyChanges { target: roomItem @@ -154,7 +166,7 @@ Page { acceptedButtons: Qt.RightButton onSingleTapped: { if (!TimelineManager.isInvite) - roomContextMenu.show(model.roomId, model.tags); + roomContextMenu.show(roomId, tags); } gesturePolicy: TapHandler.ReleaseWithinBounds @@ -162,10 +174,10 @@ Page { TapHandler { margin: -Nheko.paddingSmall - onSingleTapped: Rooms.setCurrentRoom(model.roomId) + onSingleTapped: Rooms.setCurrentRoom(roomId) onLongPressed: { - if (!TimelineManager.isInvite) - roomContextMenu.show(model.roomId, model.tags); + if (!isInvite) + roomContextMenu.show(roomId, tags); } } @@ -191,8 +203,8 @@ Page { Layout.alignment: Qt.AlignVCenter height: avatarSize width: avatarSize - url: model.avatarUrl.replace("mxc://", "image://MxcImage/") - displayName: model.roomName + url: avatarUrl.replace("mxc://", "image://MxcImage/") + displayName: roomName Rectangle { id: collapsedNotificationBubble @@ -200,13 +212,13 @@ Page { anchors.right: parent.right anchors.bottom: parent.bottom anchors.margins: -Nheko.paddingSmall - visible: collapsed && model.notificationCount > 0 + visible: collapsed && notificationCount > 0 enabled: false Layout.alignment: Qt.AlignRight height: fontMetrics.averageCharacterWidth * 3 width: height radius: height / 2 - color: model.hasLoudNotification ? Nheko.theme.red : roomItem.bubbleBackground + color: hasLoudNotification ? Nheko.theme.red : roomItem.bubbleBackground Label { anchors.centerIn: parent @@ -217,8 +229,8 @@ Page { fontSizeMode: Text.Fit font.bold: true font.pixelSize: fontMetrics.font.pixelSize * 0.8 - color: model.hasLoudNotification ? "white" : roomItem.bubbleText - text: model.notificationCount > 99 ? "99+" : model.notificationCount + color: hasLoudNotification ? "white" : roomItem.bubbleText + text: notificationCount > 99 ? "99+" : notificationCount } } @@ -244,7 +256,7 @@ Page { Layout.alignment: Qt.AlignBottom color: roomItem.importantText elideWidth: textContent.width - timestamp.width - Nheko.paddingMedium - fullText: model.roomName + fullText: roomName textFormat: Text.RichText } @@ -255,12 +267,12 @@ Page { Label { id: timestamp - visible: !model.isInvite && !model.isSpace + visible: !isInvite && !isSpace width: visible ? 0 : undefined Layout.alignment: Qt.AlignRight | Qt.AlignBottom font.pixelSize: fontMetrics.font.pixelSize * 0.9 color: roomItem.unimportantText - text: model.time + text: time } } @@ -268,14 +280,14 @@ Page { RowLayout { Layout.fillWidth: true spacing: 0 - visible: !model.isSpace + visible: !isSpace height: visible ? 0 : undefined ElidedLabel { color: roomItem.unimportantText font.pixelSize: fontMetrics.font.pixelSize * 0.9 elideWidth: textContent.width - (notificationBubble.visible ? notificationBubble.width : 0) - Nheko.paddingSmall - fullText: model.lastMessage + fullText: lastMessage textFormat: Text.RichText } @@ -286,12 +298,12 @@ Page { Rectangle { id: notificationBubble - visible: model.notificationCount > 0 + visible: notificationCount > 0 Layout.alignment: Qt.AlignRight height: fontMetrics.averageCharacterWidth * 3 width: height radius: height / 2 - color: model.hasLoudNotification ? Nheko.theme.red : roomItem.bubbleBackground + color: hasLoudNotification ? Nheko.theme.red : roomItem.bubbleBackground Label { anchors.centerIn: parent @@ -302,8 +314,8 @@ Page { fontSizeMode: Text.Fit font.bold: true font.pixelSize: fontMetrics.font.pixelSize * 0.8 - color: model.hasLoudNotification ? "white" : roomItem.bubbleText - text: model.notificationCount > 99 ? "99+" : model.notificationCount + color: hasLoudNotification ? "white" : roomItem.bubbleText + text: notificationCount > 99 ? "99+" : notificationCount } } @@ -320,7 +332,7 @@ Page { height: parent.height - Nheko.paddingSmall * 2 width: 3 color: Nheko.colors.highlight - visible: model.hasUnreadMessages + visible: hasUnreadMessages } }