152 lines
4.5 KiB
QML
152 lines
4.5 KiB
QML
|
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||
|
//
|
||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||
|
|
||
|
import "./dialogs"
|
||
|
import Qt.labs.platform 1.1 as Platform
|
||
|
import QtQml 2.13
|
||
|
import QtQuick 2.13
|
||
|
import QtQuick.Controls 2.13
|
||
|
import QtQuick.Layouts 1.3
|
||
|
import im.nheko 1.0
|
||
|
|
||
|
|
||
|
Page {
|
||
|
//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
|
||
|
model: Communities
|
||
|
|
||
|
ScrollHelper {
|
||
|
flickable: parent
|
||
|
anchors.fill: parent
|
||
|
enabled: !Settings.mobileMode
|
||
|
}
|
||
|
|
||
|
Platform.Menu {
|
||
|
id: communityContextMenu
|
||
|
|
||
|
property string id
|
||
|
|
||
|
function show(id_, tags_) {
|
||
|
id = id_;
|
||
|
open();
|
||
|
}
|
||
|
|
||
|
Platform.MenuItem {
|
||
|
text: qsTr("Leave room")
|
||
|
onTriggered: Rooms.leave(roomContextMenu.roomid)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
delegate: Rectangle {
|
||
|
id: communityItem
|
||
|
|
||
|
property color background: Nheko.colors.window
|
||
|
property color importantText: Nheko.colors.text
|
||
|
property color unimportantText: Nheko.colors.buttonText
|
||
|
property color bubbleBackground: Nheko.colors.highlight
|
||
|
property color bubbleText: Nheko.colors.highlightedText
|
||
|
|
||
|
color: background
|
||
|
height: avatarSize + 2 * Nheko.paddingMedium
|
||
|
width: ListView.view.width
|
||
|
state: "normal"
|
||
|
ToolTip.visible: hovered.hovered && collapsed
|
||
|
ToolTip.text: model.tooltip
|
||
|
states: [
|
||
|
State {
|
||
|
name: "highlight"
|
||
|
when: hovered.hovered && !(Communities.currentTagId == model.id)
|
||
|
|
||
|
PropertyChanges {
|
||
|
target: communityItem
|
||
|
background: Nheko.colors.dark
|
||
|
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
|
||
|
background: Nheko.colors.highlight
|
||
|
importantText: Nheko.colors.highlightedText
|
||
|
unimportantText: Nheko.colors.highlightedText
|
||
|
bubbleBackground: Nheko.colors.highlightedText
|
||
|
bubbleText: Nheko.colors.highlight
|
||
|
}
|
||
|
|
||
|
}
|
||
|
]
|
||
|
|
||
|
TapHandler {
|
||
|
margin: -Nheko.paddingSmall
|
||
|
acceptedButtons: Qt.RightButton
|
||
|
onSingleTapped: communityContextMenu.show(model.id);
|
||
|
|
||
|
gesturePolicy: TapHandler.ReleaseWithinBounds
|
||
|
}
|
||
|
|
||
|
TapHandler {
|
||
|
margin: -Nheko.paddingSmall
|
||
|
onSingleTapped: Communities.setCurrentTagId(model.id)
|
||
|
onLongPressed: communityContextMenu.show(model.id)
|
||
|
}
|
||
|
|
||
|
HoverHandler {
|
||
|
id: hovered
|
||
|
|
||
|
margin: -Nheko.paddingSmall
|
||
|
}
|
||
|
|
||
|
RowLayout {
|
||
|
spacing: Nheko.paddingMedium
|
||
|
anchors.fill: parent
|
||
|
anchors.margins: Nheko.paddingMedium
|
||
|
|
||
|
Avatar {
|
||
|
id: avatar
|
||
|
|
||
|
enabled: false
|
||
|
Layout.alignment: Qt.AlignVCenter
|
||
|
height: avatarSize
|
||
|
width: avatarSize
|
||
|
url: {
|
||
|
if (model.avatarUrl.startsWith("mxc://")) {
|
||
|
return model.avatarUrl.replace("mxc://", "image://MxcImage/")
|
||
|
} else {
|
||
|
return "image://colorimage/"+model.avatarUrl+"?" + communityItem.unimportantText
|
||
|
}
|
||
|
}
|
||
|
displayName: model.displayName
|
||
|
color: communityItem.background
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
background: Rectangle {
|
||
|
color: Nheko.theme.sidebarBackground
|
||
|
}
|
||
|
|
||
|
}
|