Warning, /network/neochat/src/qml/CompletionMenu.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.de> 0002 // SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com> 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 import QtQuick 0006 import QtQuick.Layouts 0007 import QtQuick.Controls as QQC2 0008 import Qt.labs.qmlmodels 0009 0010 import org.kde.kirigami as Kirigami 0011 import org.kde.kirigamiaddons.delegates as Delegates 0012 import org.kde.kirigamiaddons.labs.components as KirigamiComponents 0013 0014 import org.kde.neochat 0015 0016 QQC2.Popup { 0017 id: root 0018 0019 required property NeoChatConnection connection 0020 required property var chatDocumentHandler 0021 0022 visible: completions.count > 0 0023 0024 onVisibleChanged: if (visible) { 0025 root.open(); 0026 } 0027 0028 RoomListModel { 0029 id: roomListModel 0030 connection: root.connection 0031 } 0032 0033 Component.onCompleted: { 0034 chatDocumentHandler.completionModel.roomListModel = roomListModel; 0035 } 0036 0037 function incrementIndex() { 0038 completions.incrementCurrentIndex(); 0039 } 0040 0041 function decrementIndex() { 0042 completions.decrementCurrentIndex(); 0043 } 0044 0045 function complete() { 0046 root.chatDocumentHandler.complete(completions.currentIndex); 0047 } 0048 0049 leftPadding: 0 0050 rightPadding: 0 0051 topPadding: 0 0052 bottomPadding: 0 0053 0054 implicitHeight: Math.min(completions.contentHeight, Kirigami.Units.gridUnit * 10) 0055 0056 contentItem: ColumnLayout { 0057 spacing: 0 0058 Kirigami.Separator { 0059 Layout.fillWidth: true 0060 } 0061 QQC2.ScrollView { 0062 Layout.fillWidth: true 0063 Layout.preferredHeight: contentHeight 0064 Layout.maximumHeight: Kirigami.Units.gridUnit * 10 0065 0066 background: Rectangle { 0067 color: Kirigami.Theme.backgroundColor 0068 } 0069 0070 ListView { 0071 id: completions 0072 0073 model: root.chatDocumentHandler.completionModel 0074 currentIndex: 0 0075 keyNavigationWraps: true 0076 highlightMoveDuration: 100 0077 onCountChanged: currentIndex = 0 0078 delegate: Delegates.RoundedItemDelegate { 0079 id: completionDelegate 0080 0081 required property int index 0082 required property string displayName 0083 required property string subtitle 0084 required property string iconName 0085 0086 text: displayName 0087 0088 contentItem: RowLayout { 0089 KirigamiComponents.Avatar { 0090 visible: completionDelegate.iconName !== "invalid" 0091 Layout.preferredWidth: Kirigami.Units.iconSizes.medium 0092 Layout.preferredHeight: Kirigami.Units.iconSizes.medium 0093 source: completionDelegate.iconName === "invalid" ? "" : completionDelegate.iconName 0094 name: completionDelegate.text 0095 } 0096 Delegates.SubtitleContentItem { 0097 itemDelegate: completionDelegate 0098 labelItem.textFormat: Text.PlainText 0099 subtitle: completionDelegate.subtitle ?? "" 0100 subtitleItem.textFormat: Text.PlainText 0101 } 0102 } 0103 onClicked: root.chatDocumentHandler.complete(completionDelegate.index) 0104 } 0105 } 0106 } 0107 } 0108 0109 background: Rectangle { 0110 color: Kirigami.Theme.backgroundColor 0111 } 0112 }