matrixion/resources/qml/CommunitiesList.qml

257 lines
9.6 KiB
QML
Raw Normal View History

2021-06-11 14:12:43 +03:00
// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
2021-06-11 14:12:43 +03:00
//
// SPDX-License-Identifier: GPL-3.0-or-later
import "./dialogs"
import Qt.labs.platform 1.1 as Platform
2021-06-13 02:48:11 +03:00
import QtQml 2.12
import QtQuick 2.12
import QtQuick.Controls 2.5
2021-06-11 14:12:43 +03:00
import QtQuick.Layouts 1.3
import im.nheko 1.0
Page {
2021-12-01 02:02:41 +03:00
id: communitySidebar
2021-06-11 14:12:43 +03:00
//leftPadding: Nheko.paddingSmall
//rightPadding: Nheko.paddingSmall
property int avatarSize: Math.ceil(fontMetrics.lineSpacing * 1.6)
property bool collapsed: false
ListView {
id: communitiesList
anchors.left: parent.left
anchors.right: parent.right
height: parent.height
2021-12-01 02:02:41 +03:00
model: Communities.filtered()
2021-06-11 14:12:43 +03:00
ScrollHelper {
flickable: parent
anchors.fill: parent
enabled: !Settings.mobileMode
}
Platform.Menu {
id: communityContextMenu
2021-06-11 18:54:05 +03:00
property string tagId
2021-06-11 14:12:43 +03:00
function show(id_, tags_) {
2021-06-11 18:54:05 +03:00
tagId = id_;
2021-06-11 14:12:43 +03:00
open();
}
Platform.MenuItem {
2021-06-11 18:54:05 +03:00
text: qsTr("Hide rooms with this tag or from this space by default.")
onTriggered: Communities.toggleTagId(communityContextMenu.tagId)
2021-06-11 14:12:43 +03:00
}
}
2021-11-04 01:20:28 +03:00
delegate: ItemDelegate {
2021-06-11 14:12:43 +03:00
id: communityItem
2021-11-04 01:20:28 +03:00
property color backgroundColor: Nheko.colors.window
2021-06-11 14:12:43 +03:00
property color importantText: Nheko.colors.text
property color unimportantText: Nheko.colors.buttonText
property color bubbleBackground: Nheko.colors.highlight
property color bubbleText: Nheko.colors.highlightedText
height: avatarSize + 2 * Nheko.paddingMedium
width: ListView.view.width
state: "normal"
2021-11-04 01:20:28 +03:00
ToolTip.visible: hovered && collapsed
2021-06-11 14:12:43 +03:00
ToolTip.text: model.tooltip
ToolTip.delay: Nheko.tooltipDelay
2021-11-11 23:32:38 +03:00
onClicked: Communities.setCurrentTagId(model.id)
onPressAndHold: communityContextMenu.show(model.id)
2021-06-11 14:12:43 +03:00
states: [
State {
name: "highlight"
2021-11-04 01:20:28 +03:00
when: (communityItem.hovered || model.hidden) && !(Communities.currentTagId == model.id)
2021-06-11 14:12:43 +03:00
PropertyChanges {
target: communityItem
2021-11-04 01:20:28 +03:00
backgroundColor: Nheko.colors.dark
2021-06-11 14:12:43 +03:00
importantText: Nheko.colors.brightText
unimportantText: Nheko.colors.brightText
bubbleBackground: Nheko.colors.highlight
bubbleText: Nheko.colors.highlightedText
}
},
State {
name: "selected"
when: Communities.currentTagId == model.id
PropertyChanges {
target: communityItem
2021-11-04 01:20:28 +03:00
backgroundColor: Nheko.colors.highlight
2021-06-11 14:12:43 +03:00
importantText: Nheko.colors.highlightedText
unimportantText: Nheko.colors.highlightedText
bubbleBackground: Nheko.colors.highlightedText
bubbleText: Nheko.colors.highlight
}
}
]
2021-11-04 01:20:28 +03:00
Item {
anchors.fill: parent
2021-06-11 14:12:43 +03:00
2021-11-04 01:20:28 +03:00
TapHandler {
acceptedButtons: Qt.RightButton
onSingleTapped: communityContextMenu.show(model.id)
gesturePolicy: TapHandler.ReleaseWithinBounds
acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
}
2021-06-11 14:12:43 +03:00
}
RowLayout {
2021-12-01 02:02:41 +03:00
id: r
2021-06-11 14:12:43 +03:00
spacing: Nheko.paddingMedium
anchors.fill: parent
anchors.margins: Nheko.paddingMedium
2021-12-01 02:24:57 +03:00
anchors.leftMargin: Nheko.paddingMedium + (communitySidebar.collapsed ? 0 : (fontMetrics.lineSpacing * model.depth))
2021-12-01 02:02:41 +03:00
ImageButton {
visible: !communitySidebar.collapsed && model.collapsible
Layout.preferredHeight: fontMetrics.lineSpacing
Layout.preferredWidth: fontMetrics.lineSpacing
Layout.alignment: Qt.AlignVCenter
height: fontMetrics.lineSpacing
width: fontMetrics.lineSpacing
image: model.collapsed ? ":/icons/icons/ui/collapsed.svg" : ":/icons/icons/ui/expanded.svg"
ToolTip.visible: hovered
ToolTip.delay: Nheko.tooltipDelay
2021-12-01 02:02:41 +03:00
ToolTip.text: model.collapsed ? qsTr("Expand") : qsTr("Collapse")
hoverEnabled: true
onClicked: model.collapsed = !model.collapsed
}
Item {
Layout.preferredWidth: fontMetrics.lineSpacing
visible: !communitySidebar.collapsed && !model.collapsible && Communities.containsSubspaces
2021-12-01 02:02:41 +03:00
}
2021-06-11 14:12:43 +03:00
Avatar {
id: avatar
enabled: false
Layout.alignment: Qt.AlignVCenter
height: avatarSize
width: avatarSize
url: {
2021-06-11 15:51:29 +03:00
if (model.avatarUrl.startsWith("mxc://"))
return model.avatarUrl.replace("mxc://", "image://MxcImage/");
else
return "image://colorimage/" + model.avatarUrl + "?" + communityItem.unimportantText;
2021-06-11 14:12:43 +03:00
}
2021-09-08 03:38:39 +03:00
roomid: model.id
2021-06-11 14:12:43 +03:00
displayName: model.displayName
2021-11-04 01:20:28 +03:00
color: communityItem.backgroundColor
Rectangle {
id: collapsedNotificationBubble
visible: model.unreadMessages > 0 && communitySidebar.collapsed
anchors.right: avatar.right
anchors.bottom: avatar.bottom
anchors.margins: -Nheko.paddingSmall
height: collapsedNotificationBubbleText.height + Nheko.paddingMedium
width: Math.max(collapsedNotificationBubbleText.width, height)
radius: height / 2
color: /*hasLoudNotification ? Nheko.theme.red :*/ communityItem.bubbleBackground
ToolTip.text: model.unreadMessages
ToolTip.delay: Nheko.tooltipDelay
ToolTip.visible: collapsedNotificationBubbleHover.hovered && (model.unreadMessages > 9999)
Label {
id: collapsedNotificationBubbleText
anchors.centerIn: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
width: Math.max(implicitWidth + Nheko.paddingMedium, parent.height)
font.bold: true
font.pixelSize: fontMetrics.font.pixelSize * 0.6
color: /*hasLoudNotification ? "white" :*/ communityItem.bubbleText
text: model.unreadMessages > 9999 ? "9999+" : model.unreadMessages
HoverHandler {
id: collapsedNotificationBubbleHover
}
}
}
2021-06-11 15:51:29 +03:00
}
ElidedLabel {
2021-12-01 02:02:41 +03:00
visible: !communitySidebar.collapsed
2021-06-11 15:51:29 +03:00
Layout.alignment: Qt.AlignVCenter
color: communityItem.importantText
2021-12-01 02:33:22 +03:00
Layout.fillWidth: true
elideWidth: width
2021-06-11 15:51:29 +03:00
fullText: model.displayName
textFormat: Text.PlainText
}
2021-06-11 14:12:43 +03:00
2021-06-11 15:51:29 +03:00
Item {
Layout.fillWidth: true
2021-06-11 14:12:43 +03:00
}
Rectangle {
id: notificationBubble
visible: model.unreadMessages > 0 && !communitySidebar.collapsed
Layout.alignment: Qt.AlignRight
Layout.leftMargin: Nheko.paddingSmall
height: notificationBubbleText.height + Nheko.paddingMedium
Layout.preferredWidth: Math.max(notificationBubbleText.width, height)
radius: height / 2
color: /*hasLoudNotification ? Nheko.theme.red :*/ communityItem.bubbleBackground
ToolTip.text: model.unreadMessages
ToolTip.delay: Nheko.tooltipDelay
ToolTip.visible: notificationBubbleHover.hovered && (model.unreadMessages > 9999)
Label {
id: notificationBubbleText
anchors.centerIn: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
width: Math.max(implicitWidth + Nheko.paddingMedium, parent.height)
font.bold: true
font.pixelSize: fontMetrics.font.pixelSize * 0.8
color: /*hasLoudNotification ? "white" :*/ communityItem.bubbleText
text: model.unreadMessages > 9999 ? "9999+" : model.unreadMessages
HoverHandler {
id: notificationBubbleHover
}
}
}
2021-06-11 14:12:43 +03:00
}
2021-11-11 23:32:38 +03:00
background: Rectangle {
color: backgroundColor
}
2021-06-11 14:12:43 +03:00
}
}
background: Rectangle {
color: Nheko.theme.sidebarBackground
}
}