Add quick switcher
This commit is contained in:
81
imports/NeoChat/Component/QuickSwitcher.qml
Normal file
81
imports/NeoChat/Component/QuickSwitcher.qml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2021 Carson Black <uhhadd@gmail.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Layouts 1.10
|
||||||
|
import QtQuick.Controls 2.12 as QQC2
|
||||||
|
import org.kde.kirigami 2.14 as Kirigami
|
||||||
|
import org.kde.kitemmodels 1.0
|
||||||
|
import org.kde.neochat 1.0
|
||||||
|
|
||||||
|
QQC2.Popup {
|
||||||
|
id: _popup
|
||||||
|
|
||||||
|
onVisibleChanged: {
|
||||||
|
if (!visible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
quickSearch.forceActiveFocus()
|
||||||
|
quickSearch.text = ""
|
||||||
|
}
|
||||||
|
anchors.centerIn: QQC2.Overlay.overlay
|
||||||
|
background: Kirigami.Card {}
|
||||||
|
height: 2 * Math.round(implicitHeight / 2)
|
||||||
|
padding: Kirigami.Units.largeSpacing * 2
|
||||||
|
contentItem: ColumnLayout {
|
||||||
|
spacing: Kirigami.Units.largeSpacing * 2
|
||||||
|
|
||||||
|
Kirigami.SearchField {
|
||||||
|
id: quickSearch
|
||||||
|
|
||||||
|
// TODO: get this broken property removed/disabled by default in Kirigami,
|
||||||
|
// we used to be able to expect that the text field wouldn't attempt to
|
||||||
|
// perform a mini-DDOS attack using signals.
|
||||||
|
autoAccept: false
|
||||||
|
|
||||||
|
Layout.preferredWidth: Kirigami.Units.gridUnit * 21 // 3 * 7 = 21, roughly 7 avatars on screen
|
||||||
|
Keys.onLeftPressed: cView.decrementCurrentIndex()
|
||||||
|
Keys.onRightPressed: cView.incrementCurrentIndex()
|
||||||
|
onAccepted: {
|
||||||
|
const item = cView.itemAtIndex(cView.currentIndex)
|
||||||
|
|
||||||
|
RoomManager.enterRoom(item.currentRoom)
|
||||||
|
|
||||||
|
_popup.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ListView {
|
||||||
|
id: cView
|
||||||
|
|
||||||
|
orientation: Qt.Horizontal
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
model: SortFilterRoomListModel {
|
||||||
|
id: sortFilterRoomListModel
|
||||||
|
sourceModel: RoomListModel {
|
||||||
|
id: roomListModel
|
||||||
|
connection: Controller.activeConnection
|
||||||
|
}
|
||||||
|
filterText: quickSearch.text
|
||||||
|
roomSortOrder: SortFilterRoomListModel.LastActivity
|
||||||
|
}
|
||||||
|
|
||||||
|
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
delegate: Kirigami.Avatar {
|
||||||
|
id: del
|
||||||
|
|
||||||
|
implicitHeight: Kirigami.Units.gridUnit * 3
|
||||||
|
implicitWidth: Kirigami.Units.gridUnit * 3
|
||||||
|
|
||||||
|
required property string avatar
|
||||||
|
required property var currentRoom
|
||||||
|
|
||||||
|
source: avatar != "" ? "image://mxc/" + avatar : ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
modal: true
|
||||||
|
focus: true
|
||||||
|
}
|
||||||
@@ -3,3 +3,4 @@ FullScreenImage 1.0 FullScreenImage.qml
|
|||||||
ChatTextInput 1.0 ChatTextInput.qml
|
ChatTextInput 1.0 ChatTextInput.qml
|
||||||
FancyEffectsContainer 1.0 FancyEffectsContainer.qml
|
FancyEffectsContainer 1.0 FancyEffectsContainer.qml
|
||||||
TypingPane 1.0 TypingPane.qml
|
TypingPane 1.0 TypingPane.qml
|
||||||
|
QuickSwitcher 1.0 QuickSwitcher.qml
|
||||||
|
|||||||
13
qml/main.qml
13
qml/main.qml
@@ -52,6 +52,19 @@ Kirigami.ApplicationWindow {
|
|||||||
onXChanged: saveWindowGeometryTimer.restart()
|
onXChanged: saveWindowGeometryTimer.restart()
|
||||||
onYChanged: saveWindowGeometryTimer.restart()
|
onYChanged: saveWindowGeometryTimer.restart()
|
||||||
|
|
||||||
|
Shortcut {
|
||||||
|
sequence: "Ctrl+K"
|
||||||
|
onActivated: {
|
||||||
|
quickView.item.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: quickView
|
||||||
|
|
||||||
|
active: !Kirigami.Settings.isMobile
|
||||||
|
sourceComponent: QuickSwitcher { }
|
||||||
|
}
|
||||||
|
|
||||||
/// Setup keyboard navigation to the room page.
|
/// Setup keyboard navigation to the room page.
|
||||||
function connectRoomToSignal(item) {
|
function connectRoomToSignal(item) {
|
||||||
|
|||||||
1
res.qrc
1
res.qrc
@@ -18,6 +18,7 @@
|
|||||||
<file>imports/NeoChat/Component/FullScreenImage.qml</file>
|
<file>imports/NeoChat/Component/FullScreenImage.qml</file>
|
||||||
<file>imports/NeoChat/Component/FancyEffectsContainer.qml</file>
|
<file>imports/NeoChat/Component/FancyEffectsContainer.qml</file>
|
||||||
<file>imports/NeoChat/Component/TypingPane.qml</file>
|
<file>imports/NeoChat/Component/TypingPane.qml</file>
|
||||||
|
<file>imports/NeoChat/Component/QuickSwitcher.qml</file>
|
||||||
<file>imports/NeoChat/Component/ChatBox</file>
|
<file>imports/NeoChat/Component/ChatBox</file>
|
||||||
<file>imports/NeoChat/Component/ChatBox/ChatBox.qml</file>
|
<file>imports/NeoChat/Component/ChatBox/ChatBox.qml</file>
|
||||||
<file>imports/NeoChat/Component/ChatBox/ChatBar.qml</file>
|
<file>imports/NeoChat/Component/ChatBox/ChatBar.qml</file>
|
||||||
|
|||||||
Reference in New Issue
Block a user