64 lines
1.8 KiB
QML
64 lines
1.8 KiB
QML
import Quickshell.Bluetooth
|
|
import QtQuick
|
|
import "../components"
|
|
|
|
Item {
|
|
id: root
|
|
implicitWidth: chip.implicitWidth + 10
|
|
implicitHeight: 24
|
|
|
|
signal clickedLeft
|
|
|
|
readonly property var adapter: Bluetooth.defaultAdapter
|
|
readonly property bool powered: adapter?.enabled ?? false
|
|
readonly property var connectedDevices:
|
|
Bluetooth.devices.values.filter(d => d.connected)
|
|
|
|
// \uf293 = FA bluetooth-b (on), \uf294 = FA bluetooth (off / no connection)
|
|
readonly property string btIcon: root.powered ? "\uf293" : "\uf294"
|
|
|
|
function label() {
|
|
const n = root.connectedDevices.length
|
|
if (n === 0) return ""
|
|
if (n === 1) {
|
|
const name = root.connectedDevices[0].name || ""
|
|
return name.length > 16 ? name.substring(0, 15) + "…" : name
|
|
}
|
|
return n + " devices"
|
|
}
|
|
|
|
Row {
|
|
id: chip
|
|
anchors.centerIn: parent
|
|
spacing: 5
|
|
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: root.btIcon
|
|
font.family: "JetBrainsMono Nerd Font Mono"
|
|
font.pixelSize: 14
|
|
color: (root.powered && root.connectedDevices.length > 0) ? Theme.text : Theme.textDim
|
|
}
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: root.label()
|
|
font.pixelSize: 11
|
|
color: Theme.textDim
|
|
visible: text !== ""
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: mouse => {
|
|
if (mouse.button === Qt.RightButton) {
|
|
if (root.adapter) root.adapter.enabled = !root.adapter.enabled
|
|
} else {
|
|
root.clickedLeft()
|
|
}
|
|
}
|
|
}
|
|
}
|