Skip to content
Snippets Groups Projects
CommunitiesList.qml 6.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // 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.12
    import QtQuick 2.12
    import QtQuick.Controls 2.5
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    import QtQuick.Layouts 1.3
    import im.nheko 1.0
    
    Page {
    
        id: communitySidebar
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        //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.filtered()
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
            ScrollHelper {
                flickable: parent
                anchors.fill: parent
                enabled: !Settings.mobileMode
            }
    
            Platform.Menu {
                id: communityContextMenu
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                property string tagId
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
                function show(id_, tags_) {
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    tagId = id_;
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    open();
                }
    
                Platform.MenuItem {
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    text: qsTr("Hide rooms with this tag or from this space by default.")
                    onTriggered: Communities.toggleTagId(communityContextMenu.tagId)
    
            delegate: ItemDelegate {
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                id: communityItem
    
    
                property color backgroundColor: Nheko.colors.window
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                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"
    
                ToolTip.visible: hovered && collapsed
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                ToolTip.text: model.tooltip
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                onClicked: Communities.setCurrentTagId(model.id)
                onPressAndHold: communityContextMenu.show(model.id)
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                states: [
                    State {
                        name: "highlight"
    
                        when: (communityItem.hovered || model.hidden) && !(Communities.currentTagId == model.id)
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
                        PropertyChanges {
                            target: communityItem
    
                            backgroundColor: Nheko.colors.dark
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                            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
    
                            backgroundColor: Nheko.colors.highlight
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                            importantText: Nheko.colors.highlightedText
                            unimportantText: Nheko.colors.highlightedText
                            bubbleBackground: Nheko.colors.highlightedText
                            bubbleText: Nheko.colors.highlight
                        }
    
                    }
                ]
    
    
                Item {
                    anchors.fill: parent
    
                    TapHandler {
                        acceptedButtons: Qt.RightButton
                        onSingleTapped: communityContextMenu.show(model.id)
                        gesturePolicy: TapHandler.ReleaseWithinBounds
                        acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
                    }
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    spacing: Nheko.paddingMedium
                    anchors.fill: parent
                    anchors.margins: Nheko.paddingMedium
    
                    anchors.leftMargin: communitySidebar.collapsed ? Nheko.paddingMedium : (Nheko.paddingMedium * (model.depth + 1))
    
                    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.text: model.collapsed ? qsTr("Expand") : qsTr("Collapse")
                        hoverEnabled: true
    
                        onClicked: model.collapsed = !model.collapsed
                    }
    
                    Item {
                        Layout.preferredWidth: fontMetrics.lineSpacing
                        visible: !communitySidebar.collapsed && !model.collapsible
                    }
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
                    Avatar {
                        id: avatar
    
                        enabled: false
                        Layout.alignment: Qt.AlignVCenter
                        height: avatarSize
                        width: avatarSize
                        url: {
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                            if (model.avatarUrl.startsWith("mxc://"))
                                return model.avatarUrl.replace("mxc://", "image://MxcImage/");
                            else
                                return "image://colorimage/" + model.avatarUrl + "?" + communityItem.unimportantText;
    
                        roomid: model.id
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                        displayName: model.displayName
    
                        color: communityItem.backgroundColor
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    }
    
                    ElidedLabel {
    
                        visible: !communitySidebar.collapsed
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                        Layout.alignment: Qt.AlignVCenter
                        color: communityItem.importantText
    
                        elideWidth: parent.width - avatar.width - r.anchors.leftMargin - Nheko.paddingMedium - fontMetrics.lineSpacing
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                        fullText: model.displayName
                        textFormat: Text.PlainText
                    }
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    Item {
                        Layout.fillWidth: true
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                background: Rectangle {
                    color: backgroundColor
                }
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            }
    
        }
    
        background: Rectangle {
            color: Nheko.theme.sidebarBackground
        }
    
    }