Use required properties and delegate pooling for room list

This commit is contained in:
Nicolas Werner 2021-07-10 20:28:46 +02:00
parent d61a9c718a
commit f7ffcb4846
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
2 changed files with 38 additions and 26 deletions

View file

@ -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)

View file

@ -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
}
}