initial commit
This commit is contained in:
136
launcher/Launcher.qml
Normal file
136
launcher/Launcher.qml
Normal file
@@ -0,0 +1,136 @@
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import "root:/singeltons"
|
||||
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
property bool show: true
|
||||
|
||||
implicitWidth: 600
|
||||
implicitHeight: 400
|
||||
visible: show
|
||||
focusable: true
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
|
||||
WlrLayershell.layer: WlrLayer.Top
|
||||
|
||||
HyprlandWindow.opacity: 0.9
|
||||
|
||||
// Main window
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
anchors.centerIn: parent
|
||||
|
||||
color: Qt.hsla(0, 0, 1, 0.5)
|
||||
border.color: Qt.hsla(0, 0, 1, 0.2)
|
||||
border.width: 2
|
||||
radius: 12
|
||||
|
||||
// Main window layout
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 16
|
||||
spacing: 20
|
||||
|
||||
// Search bar
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 40
|
||||
spacing: 8
|
||||
|
||||
TextField {
|
||||
id: searchInput
|
||||
|
||||
Layout.fillWidth: true
|
||||
focus: true
|
||||
placeholderText: "Search..."
|
||||
font.pixelSize: 20
|
||||
background: null
|
||||
color: "white"
|
||||
selectByMouse: true
|
||||
|
||||
Keys.onPressed: (event) => {
|
||||
switch (event.key){
|
||||
case (Qt.Key_Escape):
|
||||
root.show = false
|
||||
event.accepted = true
|
||||
break
|
||||
case (Qt.Key_Return):
|
||||
case (Qt.Key_Enter):
|
||||
if (resultsList.currentIndex >= 0) {
|
||||
const item = resultsList.model[resultsList.currentIndex]
|
||||
DesktopApps.launch(item)
|
||||
}
|
||||
root.show = false
|
||||
event.accepted = true
|
||||
break
|
||||
case (Qt.Key_Down):
|
||||
case (Qt.Key_Tab):
|
||||
resultsList.currentIndex = Math.min(resultsList.count - 1, resultsList.currentIndex + 1)
|
||||
event.accepted = true
|
||||
break
|
||||
case (Qt.Key_Up):
|
||||
case (Qt.Key_Backtab):
|
||||
resultsList.currentIndex = Math.max(0, resultsList.currentIndex - 1)
|
||||
break
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Results
|
||||
ListView {
|
||||
id: resultsList
|
||||
model: DesktopApps.fuzzySearch(searchInput.text)
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
spacing: 4
|
||||
keyNavigationWraps: true
|
||||
|
||||
// Result item
|
||||
delegate: Rectangle {
|
||||
required property DesktopEntry modelData
|
||||
|
||||
width: parent.width
|
||||
height: 50
|
||||
radius: 6
|
||||
color: ListView.isCurrentItem ? "#3a3a3c" : "transparent"
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 8
|
||||
spacing: 8
|
||||
|
||||
Image {
|
||||
source: parent.parent.modelData.icon !== "" ? Quickshell.iconPath(parent.parent.modelData.icon,true) : ""
|
||||
visible: parent.parent.modelData.icon !== ""
|
||||
fillMode: Image.PreserveAspectFit
|
||||
sourceSize.width: 30
|
||||
sourceSize.height: 30
|
||||
}
|
||||
|
||||
Text {
|
||||
text: parent.parent.modelData.name
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
font.pixelSize: 18
|
||||
color: "white"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user