Warning, /network/neochat/src/qml/ExplorerDelegate.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Layouts
0007 
0008 import org.kde.kirigami as Kirigami
0009 import org.kde.kirigamiaddons.delegates as Delegates
0010 import org.kde.kirigamiaddons.labs.components as Components
0011 
0012 import org.kde.neochat
0013 
0014 Delegates.RoundedItemDelegate {
0015     id: root
0016 
0017     required property string roomId
0018     required property string displayName
0019     required property url avatarUrl
0020     required property string alias
0021     required property string topic
0022     required property int memberCount
0023     required property bool isJoined
0024     property bool justJoined: false
0025 
0026     /**
0027      * @brief Signal emitted when a room delegate is selected.
0028      *
0029      * The signal contains all the delegate's model info so that it can be acted
0030      * upon as required, e.g. joining or entering the room or adding the room as
0031      * the child of a space.
0032      */
0033     signal roomSelected(string roomId,
0034                         string displayName,
0035                         url avatarUrl,
0036                         string alias,
0037                         string topic,
0038                         int memberCount,
0039                         bool isJoined)
0040 
0041     onClicked: {
0042         if (!isJoined) {
0043             justJoined = true;
0044         }
0045         root.roomSelected(root.roomId,
0046                           root.displayName,
0047                           root.avatarUrl,
0048                           root.alias,
0049                           root.topic,
0050                           root.memberCount,
0051                           root.isJoined)
0052     }
0053 
0054     contentItem: RowLayout {
0055         spacing: Kirigami.Units.smallSpacing
0056 
0057         Components.Avatar {
0058             Layout.preferredWidth: Kirigami.Units.gridUnit * 2
0059             Layout.preferredHeight: Kirigami.Units.gridUnit * 2
0060             Layout.alignment: Qt.AlignTop
0061 
0062             source: root.avatarUrl
0063             name: root.displayName
0064         }
0065 
0066         ColumnLayout {
0067             Layout.fillWidth: true
0068             RowLayout {
0069                 Layout.fillWidth: true
0070                 Kirigami.Heading {
0071                     Layout.fillWidth: true
0072                     level: 4
0073                     text: root.displayName
0074                     font.bold: true
0075                     textFormat: Text.PlainText
0076                     elide: Text.ElideRight
0077                     wrapMode: Text.NoWrap
0078                 }
0079                 QQC2.Label {
0080                     visible: root.isJoined || root.justJoined
0081                     text: i18n("Joined")
0082                     color: Kirigami.Theme.linkColor
0083                 }
0084             }
0085             QQC2.Label {
0086                 Layout.fillWidth: true
0087                 visible: text
0088                 text: root.topic ? root.topic.replace(/(\r\n\t|\n|\r\t)/gm," ") : ""
0089                 textFormat: Text.PlainText
0090                 elide: Text.ElideRight
0091                 wrapMode: Text.NoWrap
0092             }
0093             RowLayout {
0094                 Layout.fillWidth: true
0095                 Kirigami.Icon {
0096                     source: "user"
0097                     color: Kirigami.Theme.disabledTextColor
0098                     implicitHeight: Kirigami.Units.iconSizes.small
0099                     implicitWidth: Kirigami.Units.iconSizes.small
0100                 }
0101                 QQC2.Label {
0102                     text: root.memberCount + " " + (root.alias ?? root.roomId)
0103                     color: Kirigami.Theme.disabledTextColor
0104                     elide: Text.ElideRight
0105                     Layout.fillWidth: true
0106                 }
0107             }
0108         }
0109     }
0110 }