Warning, /network/neochat/src/qml/ExploreRoomsPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2019 Black Hat <bhat@encom.eu.org> 0002 // SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu> 0003 // SPDX-License-Identifier: GPL-3.0-only 0004 0005 import QtQuick 0006 import QtQuick.Controls as QQC2 0007 import QtQuick.Layouts 0008 import Qt.labs.qmlmodels 0009 0010 import org.kde.kirigami as Kirigami 0011 import org.kde.kirigamiaddons.delegates as Delegates 0012 0013 import org.kde.neochat 0014 0015 /** 0016 * @brief Component for finding rooms for the public list. 0017 * 0018 * This component is based on a SearchPage, adding the functionality to select or 0019 * enter a server in the header, as well as the ability to manually type a room in 0020 * if the public room search cannot find it. 0021 * 0022 * @sa SearchPage 0023 */ 0024 SearchPage { 0025 id: root 0026 0027 /** 0028 * @brief The connection for the current local user. 0029 */ 0030 required property NeoChatConnection connection 0031 0032 /** 0033 * @brief Whether results should only includes spaces. 0034 */ 0035 property bool showOnlySpaces: false 0036 0037 /** 0038 * @brief Signal emitted when a room is selected. 0039 * 0040 * The signal contains all the room's info so that it can be acted 0041 * upon as required, e.g. joining or entering the room or adding the room as 0042 * the child of a space. 0043 */ 0044 signal roomSelected(string roomId, string displayName, url avatarUrl, string alias, string topic, int memberCount, bool isJoined) 0045 0046 title: i18nc("@action:title", "Explore Rooms") 0047 0048 Component.onCompleted: focusSearch() 0049 0050 headerTrailing: ServerComboBox { 0051 id: serverComboBox 0052 connection: root.connection 0053 } 0054 0055 model: PublicRoomListModel { 0056 id: publicRoomListModel 0057 0058 connection: root.connection 0059 server: serverComboBox.server 0060 showOnlySpaces: root.showOnlySpaces 0061 } 0062 0063 modelDelegate: ExplorerDelegate { 0064 onRoomSelected: (roomId, displayName, avatarUrl, alias, topic, memberCount, isJoined) => { 0065 root.roomSelected(roomId, displayName, avatarUrl, alias, topic, memberCount, isJoined); 0066 root.closeDialog(); 0067 } 0068 } 0069 0070 listHeaderDelegate: Delegates.RoundedItemDelegate { 0071 onClicked: _private.openManualRoomDialog() 0072 0073 text: i18n("Enter a room address") 0074 icon.name: "compass" 0075 icon.width: Kirigami.Units.gridUnit * 2 0076 icon.height: Kirigami.Units.gridUnit * 2 0077 } 0078 0079 listFooterDelegate: QQC2.ProgressBar { 0080 width: ListView.view.width 0081 leftInset: Kirigami.Units.largeSpacing 0082 rightInset: Kirigami.Units.largeSpacing 0083 visible: root.count !== 0 && publicRoomListModel.searching 0084 indeterminate: true 0085 } 0086 0087 searchFieldPlaceholder: i18n("Find a room…") 0088 noResultPlaceholderMessage: i18nc("@info:label", "No public rooms found") 0089 0090 Component { 0091 id: manualRoomDialog 0092 ManualRoomDialog {} 0093 } 0094 0095 QtObject { 0096 id: _private 0097 function openManualRoomDialog() { 0098 let dialog = manualRoomDialog.createObject(applicationWindow().overlay, { 0099 connection: root.connection 0100 }); 0101 dialog.roomSelected.connect((roomId, displayName, avatarUrl, alias, topic, memberCount, isJoined) => { 0102 root.roomSelected(roomId, displayName, avatarUrl, alias, topic, memberCount, isJoined); 0103 root.closeDialog(); 0104 }); 0105 dialog.open(); 0106 } 0107 } 0108 }