From ded156f58d0a23b3926e9dbbbc5ed2a7d1d4c0c7 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 5 Jun 2025 22:13:27 +1000 Subject: feat: bluetooth popout --- modules/bar/Content.qml | 15 +++++++++++---- modules/bar/components/StatusIcons.qml | 2 ++ modules/bar/popouts/Bluetooth.qml | 18 ++++++++++++++++++ modules/bar/popouts/Content.qml | 9 +++++++-- 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 modules/bar/popouts/Bluetooth.qml (limited to 'modules/bar') diff --git a/modules/bar/Content.qml b/modules/bar/Content.qml index 2531f4d..ebd19cc 100644 --- a/modules/bar/Content.qml +++ b/modules/bar/Content.qml @@ -12,21 +12,28 @@ StyledRect { required property ShellScreen screen function checkPopout(y: real): var { + const spacing = Appearance.spacing.small; const aw = activeWindow.child; const awy = activeWindow.y + aw.y; const n = statusIconsInner.network; - const ny = statusIcons.y + statusIconsInner.y + n.y; + const ny = statusIcons.y + statusIconsInner.y + n.y - spacing / 2; + const bls = statusIcons.y + statusIconsInner.y + statusIconsInner.bs - spacing / 2; + const ble = statusIcons.y + statusIconsInner.y + statusIconsInner.be + spacing / 2; const b = statusIconsInner.battery; - const by = statusIcons.y + statusIconsInner.y + b.y; + const by = statusIcons.y + statusIconsInner.y + b.y - spacing / 2; if (y >= awy && y <= awy + aw.implicitHeight) { Popouts.currentName = "activewindow"; Popouts.currentCenter = Qt.binding(() => activeWindow.y + aw.y + aw.implicitHeight / 2); Popouts.hasCurrent = true; - } else if (y >= ny && y <= ny + n.implicitHeight) { + } else if (y >= ny && y <= ny + n.implicitHeight + spacing) { Popouts.currentName = "network"; Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + n.y + n.implicitHeight / 2); Popouts.hasCurrent = true; - } else if (y >= by && y <= by + b.implicitHeight) { + } else if (y >= bls && y <= ble) { + Popouts.currentName = "bluetooth"; + Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + statusIconsInner.bs + (statusIconsInner.be - statusIconsInner.bs) / 2); + Popouts.hasCurrent = true; + } else if (y >= by && y <= by + b.implicitHeight + spacing) { Popouts.currentName = "battery"; Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + b.y + b.implicitHeight / 2); Popouts.hasCurrent = true; diff --git a/modules/bar/components/StatusIcons.qml b/modules/bar/components/StatusIcons.qml index d4dba6c..f92159b 100644 --- a/modules/bar/components/StatusIcons.qml +++ b/modules/bar/components/StatusIcons.qml @@ -12,6 +12,8 @@ Item { property color colour: Colours.palette.m3secondary readonly property Item network: network + readonly property real bs: bluetooth.y + readonly property real be: repeater.count > 0 ? devices.y + devices.implicitHeight : bluetooth.y + bluetooth.implicitHeight readonly property Item battery: battery clip: true diff --git a/modules/bar/popouts/Bluetooth.qml b/modules/bar/popouts/Bluetooth.qml new file mode 100644 index 0000000..ad7d087 --- /dev/null +++ b/modules/bar/popouts/Bluetooth.qml @@ -0,0 +1,18 @@ +import "root:/widgets" +import "root:/services" +import "root:/config" +import QtQuick + +Column { + id: root + + spacing: Appearance.spacing.normal + + StyledText { + text: qsTr("Bluetooth %1").arg(Bluetooth.powered ? "enabled" : "disabled") + } + + StyledText { + text: Bluetooth.devices.some(d => d.connected) ? qsTr("Connected to: %1").arg(Bluetooth.devices.filter(d => d.connected).map(d => d.alias).join(", ")) : qsTr("No devices connected") + } +} diff --git a/modules/bar/popouts/Content.qml b/modules/bar/popouts/Content.qml index 43f2c8e..a8051f8 100644 --- a/modules/bar/popouts/Content.qml +++ b/modules/bar/popouts/Content.qml @@ -10,8 +10,8 @@ Item { anchors.centerIn: parent - implicitWidth: Popouts.hasCurrent ? content.children.find(c => c.shouldBeActive).implicitWidth + Appearance.padding.large * 2 : 0 - implicitHeight: Popouts.hasCurrent ? content.children.find(c => c.shouldBeActive).implicitHeight + Appearance.padding.large * 2 : 0 + implicitWidth: Popouts.hasCurrent ? (content.children.find(c => c.shouldBeActive)?.implicitWidth ?? 0) + Appearance.padding.large * 2 : 0 + implicitHeight: Popouts.hasCurrent ? (content.children.find(c => c.shouldBeActive)?.implicitHeight ?? 0) + Appearance.padding.large * 2 : 0 Item { id: content @@ -31,6 +31,11 @@ Item { source: "Network.qml" } + Popout { + name: "bluetooth" + source: "Bluetooth.qml" + } + Popout { name: "battery" source: "Battery.qml" -- cgit v1.2.3-freya