Files
quickshell/Bar/Bluetooth.qml
2026-08-06 17:44:23 +01:00

110 lines
1.7 KiB
QML

import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Hyprland
import "../Color.js" as Colors
import "../Components/"
import "../Services/"
Container {
id: root
required property HyprlandMonitor monitor
property bool opened: false
animOffset: 200
boxColor: Colors.peach
boxHeight: 25
boxWidth: 33
defaultItem: icon
exclusiveMonitor: root.monitor
exclusiveToScreen: true
forceHidden: !(BluetoothManager.getConnected())
states: [
State {
name: "hovered"
when: root.hovered == true && root.opened == false
PropertyChanges {
root.boxHeight: 28
root.boxWidth: 35
}
},
State {
name: "opened"
when: root.opened == true && root.hovered == true
PropertyChanges {
root.boxHeight: 300
root.boxWidth: 350
}
StateChangeScript {
script: {
stack.replace(deviceList);
}
}
}
]
hover.onHoveredChanged: {
if (hover.hovered == false) {
root.opened = false;
if (root.state != "icon") {
root.stack.replace(icon);
}
}
}
tap.onTapped: {
root.opened = true;
}
Component {
id: icon
StyledText {
property string component: "icon"
horizontalAlignment: Qt.AlignCenter
propo: true
text: "󰂱"
verticalAlignment: Qt.AlignVCenter
}
}
Component {
id: deviceList
Column {
property string component: "deviceList"
spacing: 3
Repeater {
delegate: devicePlaque
model: BluetoothManager.getConnectedDevicesList()
}
Component {
id: devicePlaque
Rectangle {
id: devicePlaqueRoot
required property var modelData
color: Colors.surface1
implicitHeight: 10
anchors {
left: parent.left
right: parent.right
}
}
}
}
}
}