Warning, /network/neochat/src/qml/SpaceListContextMenu.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu> 0002 // SPDX-FileCopyrightText: 2022 Tobias Fella <tobias.fella@kde.org> 0003 // SPDX-License-Identifier: GPL-3.0-only 0004 0005 import QtQuick 0006 import QtQuick.Controls as QQC2 0007 import QtQuick.Layouts 0008 0009 import org.kde.kirigami as Kirigami 0010 import org.kde.kirigamiaddons.components as KirigamiComponents 0011 import org.kde.kirigamiaddons.formcard as FormCard 0012 0013 import org.kde.neochat 0014 0015 /** 0016 * Context menu when clicking on a room in the room list 0017 */ 0018 Loader { 0019 id: root 0020 0021 property NeoChatRoom room 0022 required property NeoChatConnection connection 0023 0024 signal closed 0025 0026 Component { 0027 id: regularMenu 0028 QQC2.Menu { 0029 QQC2.MenuItem { 0030 text: i18nc("'Space' is a matrix space", "View Space") 0031 icon.name: "view-list-details" 0032 onTriggered: RoomManager.resolveResource(room.id) 0033 } 0034 0035 QQC2.MenuItem { 0036 text: i18nc("@action:inmenu", "Copy Address to Clipboard") 0037 icon.name: "edit-copy" 0038 onTriggered: if (room.canonicalAlias.length === 0) { 0039 Clipboard.saveText(room.id); 0040 } else { 0041 Clipboard.saveText(room.canonicalAlias); 0042 } 0043 } 0044 0045 QQC2.MenuItem { 0046 text: i18nc("'Space' is a matrix space", "Space Settings") 0047 icon.name: 'settings-configure' 0048 onTriggered: QQC2.ApplicationWindow.window.pageStack.pushDialogLayer('qrc:/org/kde/neochat/qml/Categories.qml', { 0049 room: room, 0050 connection: connection 0051 }, { 0052 title: i18n("Space Settings") 0053 }) 0054 } 0055 0056 QQC2.MenuSeparator {} 0057 0058 QQC2.MenuItem { 0059 text: i18nc("'Space' is a matrix space", "Leave Space") 0060 icon.name: "go-previous" 0061 onTriggered: RoomManager.leaveRoom(room) 0062 } 0063 0064 onClosed: { 0065 root.closed(); 0066 regularMenu.destroy(); 0067 } 0068 } 0069 } 0070 0071 Component { 0072 id: mobileMenu 0073 0074 Kirigami.OverlayDrawer { 0075 id: drawer 0076 height: popupContent.implicitHeight 0077 edge: Qt.BottomEdge 0078 padding: 0 0079 leftPadding: 0 0080 rightPadding: 0 0081 bottomPadding: 0 0082 topPadding: 0 0083 0084 parent: applicationWindow().overlay 0085 0086 ColumnLayout { 0087 id: popupContent 0088 0089 width: parent.width 0090 spacing: 0 0091 0092 RowLayout { 0093 id: headerLayout 0094 Layout.fillWidth: true 0095 Layout.margins: Kirigami.Units.largeSpacing 0096 spacing: Kirigami.Units.largeSpacing 0097 0098 KirigamiComponents.Avatar { 0099 id: avatar 0100 source: room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : "" 0101 Layout.preferredWidth: Kirigami.Units.gridUnit * 3 0102 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0103 Layout.alignment: Qt.AlignTop 0104 } 0105 0106 Kirigami.Heading { 0107 level: 5 0108 Layout.fillWidth: true 0109 text: room.displayName 0110 wrapMode: Text.WordWrap 0111 } 0112 } 0113 0114 FormCard.FormButtonDelegate { 0115 text: i18nc("'Space' is a matrix space", "View Space") 0116 icon.name: "view-list-details" 0117 onClicked: RoomManager.resolveResource(root.room.id) 0118 } 0119 0120 FormCard.FormButtonDelegate { 0121 text: i18nc("@action:inmenu", "Copy Address to Clipboard") 0122 icon.name: "edit-copy" 0123 onClicked: if (room.canonicalAlias.length === 0) { 0124 Clipboard.saveText(room.id); 0125 } else { 0126 Clipboard.saveText(room.canonicalAlias); 0127 } 0128 } 0129 0130 FormCard.FormButtonDelegate { 0131 text: i18nc("'Space' is a matrix space", "Space Settings") 0132 icon.name: 'settings-configure' 0133 onClicked: QQC2.ApplicationWindow.window.pageStack.pushDialogLayer('qrc:/org/kde/neochat/qml/Categories.qml', { 0134 room: room, 0135 connection: connection 0136 }, { 0137 title: i18n("Space Settings") 0138 }) 0139 } 0140 0141 FormCard.FormButtonDelegate { 0142 text: i18nc("'Space' is a matrix space", "Leave Space") 0143 onClicked: RoomManager.leaveRoom(room) 0144 } 0145 } 0146 onClosed: root.closed() 0147 } 0148 } 0149 0150 asynchronous: true 0151 sourceComponent: Kirigami.Settings.isMobile ? mobileMenu : regularMenu 0152 0153 function open() { 0154 active = true; 0155 } 0156 0157 onStatusChanged: if (status == Loader.Ready) { 0158 if (Kirigami.Settings.isMobile) { 0159 item.open(); 0160 } else { 0161 item.popup(); 0162 } 0163 } 0164 }