Improve bluetooth panel layout

- Header now uses anchors so the on/off pill sits cleanly at the right
  instead of relying on a fixed-width spacer that drifted as content
  grew.
- Discovery toggle moved out of the header and into a labeled action
  row alongside a new 'Manage…' button that launches
  omarchy-launch-bluetooth (the Impala TUI).
- Empty-state message tells you what to do based on adapter state
  (off / scanning / no paired devices) instead of one generic line.
This commit is contained in:
Ryan Hughes
2026-05-14 02:21:48 -04:00
parent 3177a396ff
commit fbe45d517b
@@ -74,43 +74,64 @@ Item {
Column {
id: column
anchors.fill: parent
spacing: 8
spacing: 10
Row {
// Header: title left, on/off toggle right.
Item {
width: parent.width
spacing: 8
height: titleText.implicitHeight
Text {
id: titleText
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
text: "Bluetooth"
color: root.bar.foreground
font.family: root.bar.fontFamily
font.pixelSize: 13
font.bold: true
anchors.verticalCenter: parent.verticalCenter
}
Item { width: parent.width - 200; height: 1 }
Common.PillButton {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
iconText: root.adapter && root.adapter.enabled ? "󰂯" : "󰂲"
text: root.adapter && root.adapter.enabled ? "On" : "Off"
foreground: root.bar.foreground
horizontalPadding: 8
horizontalPadding: 10
verticalPadding: 4
active: root.adapter && root.adapter.enabled
onClicked: if (root.adapter) root.adapter.enabled = !root.adapter.enabled
}
}
// Action row: scan toggle and TUI launcher.
Row {
width: parent.width
spacing: 8
Common.PillButton {
width: (parent.width - parent.spacing) / 2
iconText: "󰂳"
text: root.adapter && root.adapter.discovering ? "Scanning…" : "Scan"
foreground: root.bar.foreground
horizontalPadding: 8
verticalPadding: 4
horizontalPadding: 10
verticalPadding: 6
enabled: root.adapter !== null && root.adapter.enabled
opacity: enabled ? 1 : 0.4
active: root.adapter && root.adapter.discovering
onClicked: if (root.adapter) root.adapter.discovering = !root.adapter.discovering
}
Common.PillButton {
width: (parent.width - parent.spacing) / 2
iconText: "󱁤"
text: "Manage…"
foreground: root.bar.foreground
horizontalPadding: 10
verticalPadding: 6
onClicked: { root.bar.run("omarchy-launch-bluetooth"); root.popupOpen = false }
}
}
Repeater {
@@ -142,10 +163,15 @@ Item {
Text {
visible: root.knownDevices.length === 0
text: root.adapter && root.adapter.enabled ? "Scanning for devices…" : "Turn Bluetooth on to scan"
text: !root.adapter ? "No Bluetooth adapter"
: !root.adapter.enabled ? "Turn Bluetooth on to scan"
: root.adapter.discovering ? "Scanning for devices…"
: "No paired devices. Hit Scan to find new ones."
color: Qt.darker(root.bar.foreground, 1.5)
font.family: root.bar.fontFamily
font.pixelSize: 11
wrapMode: Text.WordWrap
width: parent.width
}
}
}