diff --git a/modules/bar/components/bluetooth/AvailableDevice.qml b/modules/bar/components/bluetooth/AvailableDevice.qml index df0c85f..51a54f4 100644 --- a/modules/bar/components/bluetooth/AvailableDevice.qml +++ b/modules/bar/components/bluetooth/AvailableDevice.qml @@ -10,7 +10,7 @@ import Quickshell.Widgets StyledLabel { id: root - required property BluetoothDevice modelData + property BluetoothDevice device RowLayout { id: row @@ -18,20 +18,20 @@ StyledLabel { spacing: 8 Loader { - active: root.modelData?.icon != undefined + active: root.device?.icon != undefined sourceComponent: IconImage { implicitSize: 22 - source: Quickshell.iconPath(root.modelData.icon, "device-support-unknown-symbolic") + source: Quickshell.iconPath(root.device.icon, "device-support-unknown-symbolic") } } StyledText { - text: root.modelData.deviceName + text: root.device.deviceName } StyledButton { Layout.alignment: Qt.AlignRight - hoverEnabled: !root.modelData.pairing + hoverEnabled: !root.device.pairing color: containsMouse ? Theme.palette.primary : Theme.palette.base200 content: StyledText { text: 'Pair' @@ -41,8 +41,8 @@ StyledLabel { if (!hoverEnabled) { return; } - root.modelData.trusted = true; - root.modelData.pair(); + root.device.trusted = true; + root.device.pair(); } } } diff --git a/modules/bar/components/bluetooth/BluetoothMenu.qml b/modules/bar/components/bluetooth/BluetoothMenu.qml index 1e6aad4..90186c8 100644 --- a/modules/bar/components/bluetooth/BluetoothMenu.qml +++ b/modules/bar/components/bluetooth/BluetoothMenu.qml @@ -42,8 +42,7 @@ StyledPopupWindow { Switch { checked: Bluetooth.defaultAdapter.discovering - onClicked: Bluetooth.defaultAdapter.discovering = true; - + onClicked: Bluetooth.defaultAdapter.discovering = checked } } } @@ -57,44 +56,89 @@ StyledPopupWindow { spacing: 8 StyledText { + Layout.topMargin: 8 Layout.minimumWidth: 320 font.bold: true + font.pixelSize: 14 text: "Connected Devices" } ColumnLayout { + Loader { + active: Bluetooth.connectedDevices.length == 0 + sourceComponent: StyledText { + font.italic: true + text: "No devices connected..." + } + } Repeater { model: Bluetooth.connectedDevices - delegate: ConnectedDevice { + delegate: Loader { + id: connectedDeviceLoader + required property var modelData Layout.fillWidth: true + active: modelData != null + sourceComponent: ConnectedDevice { + device: connectedDeviceLoader.modelData + } } } } StyledText { + Layout.topMargin: 8 font.bold: true + font.pixelSize: 14 text: "Paired Devices" } ColumnLayout { + Loader { + active: Bluetooth.availableDevices.length == 0 + sourceComponent: StyledText { + font.italic: true + text: "No paired devices..." + } + } Repeater { model: Bluetooth.pairedDevices - delegate: PairedDevice { + delegate: Loader { + id: pairedDeviceLoader + required property var modelData Layout.fillWidth: true + active: modelData != null + sourceComponent: PairedDevice { + device: pairedDeviceLoader.modelData + } } } } StyledText { + Layout.topMargin: 8 font.bold: true + font.pixelSize: 14 text: "Available Devices" } ColumnLayout { + Loader { + active: Bluetooth.availableDevices.length == 0 + sourceComponent: StyledText { + font.italic: true + text: Bluetooth.defaultAdapter.discovering ? "No devices found..." : "Scan to find devices..." + } + } Repeater { model: Bluetooth.availableDevices - delegate: AvailableDevice { + delegate: Loader { + id: availableDeviceLoader + required property var modelData Layout.fillWidth: true + active: modelData != null + sourceComponent: AvailableDevice { + device: availableDeviceLoader.modelData + } } } } diff --git a/modules/bar/components/bluetooth/ConnectedDevice.qml b/modules/bar/components/bluetooth/ConnectedDevice.qml index ed23fd6..0c46886 100644 --- a/modules/bar/components/bluetooth/ConnectedDevice.qml +++ b/modules/bar/components/bluetooth/ConnectedDevice.qml @@ -11,7 +11,7 @@ import Quickshell.Widgets StyledLabel { id: root - required property BluetoothDevice modelData + required property BluetoothDevice device RowLayout { id: row @@ -19,19 +19,19 @@ StyledLabel { spacing: 8 Loader { - active: root.modelData?.icon != undefined + active: root.device?.icon != undefined sourceComponent: IconImage { implicitSize: 22 - source: Quickshell.iconPath(root.modelData.icon, "device-support-unknown-symbolic") + source: Quickshell.iconPath(root.device.icon, "device-support-unknown-symbolic") } } StyledText { - text: root.modelData.deviceName + text: root.device.deviceName } Loader { - active: root.modelData.batteryAvailable + active: root.device.batteryAvailable sourceComponent: RowLayout { StyledText { id: icon @@ -42,11 +42,11 @@ StyledLabel { states: [ State { name: "full" - when: root.modelData.battery > 0.66 + when: root.device.battery > 0.66 }, State { name: "medium" - when: root.modelData.battery > 0.33 + when: root.device.battery > 0.33 PropertyChanges { icon { text: Icons.batteryFull @@ -55,7 +55,7 @@ StyledLabel { }, State { name: "low" - when: root.modelData.battery > 0.10 + when: root.device.battery > 0.10 PropertyChanges { icon { text: Icons.batteryFull @@ -64,7 +64,7 @@ StyledLabel { }, State { name: "critical" - when: root.modelData.battery > 0.10 + when: root.device.battery > 0.10 PropertyChanges { icon { text: Icons.batteryWarning @@ -85,10 +85,10 @@ StyledLabel { font.pixelSize: 12 } onClicked: { - if (root.modelData.state != BluetoothDeviceState.Connected) { + if (root.device.state != BluetoothDeviceState.Connected) { return; } - root.modelData.connected = false; + root.device.connected = false; } } } diff --git a/modules/bar/components/bluetooth/PairedDevice.qml b/modules/bar/components/bluetooth/PairedDevice.qml index aa479b3..b2979ee 100644 --- a/modules/bar/components/bluetooth/PairedDevice.qml +++ b/modules/bar/components/bluetooth/PairedDevice.qml @@ -10,7 +10,7 @@ import Quickshell.Widgets StyledLabel { id: root - required property BluetoothDevice modelData + required property BluetoothDevice device RowLayout { id: row @@ -18,21 +18,21 @@ StyledLabel { spacing: 8 Loader { - active: root.modelData?.icon != undefined + active: root.device?.icon != undefined sourceComponent: IconImage { implicitSize: 22 - source: Quickshell.iconPath(root.modelData.icon, "device-support-unknown-symbolic") + source: Quickshell.iconPath(root.device.icon, "device-support-unknown-symbolic") } } StyledText { - text: root.modelData.deviceName + text: root.device.deviceName } RowLayout { Layout.alignment: Qt.AlignRight StyledButton { - hoverEnabled: root.modelData.state == BluetoothDeviceState.Disconnected + hoverEnabled: root.device.state == BluetoothDeviceState.Disconnected color: containsMouse ? Theme.palette.primary : Theme.palette.base200 content: StyledText { text: 'Connect' @@ -42,12 +42,12 @@ StyledLabel { if (!hoverEnabled) { return; } - root.modelData.connect(); + root.device.connect(); } } StyledButton { - hoverEnabled: root.modelData.state == BluetoothDeviceState.Disconnected + hoverEnabled: root.device.state == BluetoothDeviceState.Disconnected color: containsMouse ? Theme.palette.error : Theme.palette.base200 content: StyledText { text: 'Unpair' @@ -57,7 +57,7 @@ StyledLabel { if (!hoverEnabled) { return; } - root.modelData.forget(); + root.device.forget(); } } }