lux-shell/modules/bar/components/bluetooth/ConnectedDevice.qml
2025-07-29 16:28:59 -04:00

95 lines
2.9 KiB
QML

pragma ComponentBehavior: Bound
import qs.config
import qs.constants
import qs.widgets
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Bluetooth
import Quickshell.Widgets
StyledLabel {
id: device
required property BluetoothDevice modelData
RowLayout {
id: row
spacing: 8
Loader {
active: device.modelData.icon != undefined
sourceComponent: IconImage {
implicitSize: 22
source: Quickshell.iconPath(device.modelData.icon, "device-support-unknown-symbolic")
}
}
StyledText {
text: device.modelData.deviceName
}
Loader {
active: device.modelData.batteryAvailable
sourceComponent: RowLayout {
StyledText {
id: icon
font.family: Theme.lucide.font.family
font.pixelSize: Dimensions.cpu.iconSize
font.bold: true
text: Icons.batteryFull
states: [
State {
name: "full"
when: device.modelData.battery > 0.66
},
State {
name: "medium"
when: device.modelData.battery > 0.33
PropertyChanges {
icon {
text: Icons.batteryFull
}
}
},
State {
name: "low"
when: device.modelData.battery > 0.10
PropertyChanges {
icon {
text: Icons.batteryFull
}
}
},
State {
name: "critical"
when: device.modelData.battery > 0.10
PropertyChanges {
icon {
text: Icons.batteryWarning
color: Theme.palette.error
}
}
}
]
}
}
}
StyledButton {
Layout.alignment: Qt.AlignRight
color: containsMouse ? Theme.palette.error : Theme.palette.base200
content: StyledText {
text: 'Disconnect'
font.pixelSize: 12
}
onClicked: {
if (device.modelData.state != BluetoothDeviceState.Connected) {
return;
}
device.modelData.connected = false;
}
}
}
}