diff --git a/constants/Icons.qml b/constants/Icons.qml index b905db8..4126c27 100644 --- a/constants/Icons.qml +++ b/constants/Icons.qml @@ -3,10 +3,6 @@ pragma Singleton import Quickshell Singleton { - property string batteryFull: "\u{E059}" - property string batteryMedium: "\u{E05b}" - property string batteryLow: "\u{E05a}" - property string batteryWarning: "\u{E3b0}" property string bell: "\u{E05d}" property string bellRing: "\u{E224}" property string bluetooth: "\u{E060}" diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index 961775d..66eae2c 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -1,6 +1,5 @@ import qs.config import QtQuick -import QtQuick.Layouts import Quickshell import "components" import "components/bluetooth" @@ -40,7 +39,7 @@ Scope { } } - RowLayout { + Row { id: leftbar anchors.left: parent.left @@ -53,15 +52,20 @@ Scope { spacing: Dimensions.bar.spacing SystemLogo { + anchors.verticalCenter: parent.verticalCenter implicitSize: 22 } - Workspaces {} + Workspaces { + anchors.verticalCenter: parent.verticalCenter + } - Tray {} + Tray { + anchors.verticalCenter: parent.verticalCenter + } } - RowLayout { + Row { id: centerbar anchors.horizontalCenter: parent.horizontalCenter @@ -72,10 +76,12 @@ Scope { spacing: Dimensions.bar.spacing - Mpris {} + Mpris { + anchors.verticalCenter: parent.verticalCenter + } } - RowLayout { + Row { id: rightbar anchors.right: parent.right @@ -87,27 +93,49 @@ Scope { spacing: Dimensions.bar.spacing - Pywal {} + Pywal { + anchors.verticalCenter: parent.verticalCenter + } - Pipewire {} + Pipewire { + anchors.verticalCenter: parent.verticalCenter + } - Caffeine {} + Caffeine { + anchors.verticalCenter: parent.verticalCenter + } - Network {} + Network { + anchors.verticalCenter: parent.verticalCenter + } - Bluetooth {} + Bluetooth { + anchors.verticalCenter: parent.verticalCenter + } - Storage {} + Storage { + anchors.verticalCenter: parent.verticalCenter + } - Memory {} + Memory { + anchors.verticalCenter: parent.verticalCenter + } - Cpu {} + Cpu { + anchors.verticalCenter: parent.verticalCenter + } - Gpu {} + Gpu { + anchors.verticalCenter: parent.verticalCenter + } - Clock {} + Clock { + anchors.verticalCenter: parent.verticalCenter + } - Notifications {} + Notifications { + anchors.verticalCenter: parent.verticalCenter + } } } } diff --git a/modules/bar/components/bluetooth/BluetoothMenu.qml b/modules/bar/components/bluetooth/BluetoothMenu.qml index b85fec6..ed896c3 100644 --- a/modules/bar/components/bluetooth/BluetoothMenu.qml +++ b/modules/bar/components/bluetooth/BluetoothMenu.qml @@ -1,8 +1,9 @@ pragma ComponentBehavior: Bound import qs.config +import qs.constants import qs.services -import qs.widgets +import qs.styled import QtQuick import QtQuick.Controls import QtQuick.Layouts @@ -28,7 +29,6 @@ StyledPopupWindow { } Switch { - Layout.alignment: Qt.AlignRight checked: Bluetooth.defaultAdapter.enabled onClicked: Bluetooth.defaultAdapter.enabled = checked } @@ -43,18 +43,12 @@ StyledPopupWindow { spacing: 8 StyledText { - Layout.minimumWidth: 320 font.bold: true text: "Connected Devices" } - ColumnLayout { - Repeater { - model: Bluetooth.connectedDevices - delegate: ConnectedDevice { - Layout.fillWidth: true - } - } + DeviceList { + devices: Bluetooth.connectedDevices } StyledText { @@ -62,13 +56,8 @@ StyledPopupWindow { text: "Paired Devices" } - ColumnLayout { - Repeater { - model: Bluetooth.pairedDevices - delegate: PairedDevice { - Layout.fillWidth: true - } - } + DeviceList { + devices: Bluetooth.pairedDevices } StyledText { @@ -78,9 +67,6 @@ StyledPopupWindow { DeviceList { devices: Bluetooth.availableDevices - onDeviceActivated: device => { - device.pair(); - } } } } diff --git a/modules/bar/components/bluetooth/ConnectedDevice.qml b/modules/bar/components/bluetooth/ConnectedDevice.qml deleted file mode 100644 index c59fa2b..0000000 --- a/modules/bar/components/bluetooth/ConnectedDevice.qml +++ /dev/null @@ -1,94 +0,0 @@ -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: modelData.icon != undefined - sourceComponent: IconImage { - implicitSize: 18 - source: Quickshell.iconPath(modelData.icon) - } - } - - 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' - } - onClicked: { - if (modelData.state != BluetoothDeviceState.Connected) { - return; - } - modelData.disconnect(); - } - } - } -} diff --git a/modules/bar/components/bluetooth/DeviceList.qml b/modules/bar/components/bluetooth/DeviceList.qml index c4e5d92..6508c8a 100644 --- a/modules/bar/components/bluetooth/DeviceList.qml +++ b/modules/bar/components/bluetooth/DeviceList.qml @@ -1,18 +1,16 @@ -pragma ComponentBehavior: Bound - import qs.config +import qs.constants +import qs.services import qs.styled import QtQuick import QtQuick.Layouts -import Quickshell.Bluetooth ColumnLayout { id: root required property var devices - signal deviceActivated(device: BluetoothDevice) Repeater { - model: root.devices + model: devices delegate: Clickable { id: device required property var modelData @@ -20,9 +18,6 @@ ColumnLayout { implicitWidth: row.width implicitHeight: row.height Layout.fillWidth: true - onClicked: { - root.deviceActivated(modelData); - } RowLayout { id: row diff --git a/modules/bar/components/bluetooth/PairedDevice.qml b/modules/bar/components/bluetooth/PairedDevice.qml deleted file mode 100644 index 2512344..0000000 --- a/modules/bar/components/bluetooth/PairedDevice.qml +++ /dev/null @@ -1,64 +0,0 @@ -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: modelData.icon != undefined - sourceComponent: IconImage { - implicitSize: 18 - source: Quickshell.iconPath(device.modelData.icon) - } - } - - StyledText { - text: device.modelData.deviceName - } - - RowLayout { - Layout.alignment: Qt.AlignRight - StyledButton { - hoverEnabled: device.modelData.state == BluetoothDeviceState.Disconnected - color: containsMouse ? Theme.palette.info : Theme.palette.base200 - content: StyledText { - text: 'Connect' - } - onClicked: { - if (!hoverEnabled) { - return; - } - device.modelData.connect(); - } - } - - StyledButton { - hoverEnabled: device.modelData.state == BluetoothDeviceState.Disconnected - color: containsMouse ? Theme.palette.error : Theme.palette.base200 - content: StyledText { - text: 'Unpair' - } - onClicked: { - if (!hoverEnabled) { - return; - } - device.modelData.forget(); - } - } - } - } -} diff --git a/modules/bar/components/mpris/Mpris.qml b/modules/bar/components/mpris/Mpris.qml index 8c39c15..b129e77 100644 --- a/modules/bar/components/mpris/Mpris.qml +++ b/modules/bar/components/mpris/Mpris.qml @@ -8,6 +8,8 @@ Item { property int currentIndex: 0 property var players: Mpris.players + anchors.horizontalCenter: parent.horizontalCenter + Repeater { id: players model: Mpris.players.values.filter(item => item != null) diff --git a/modules/bar/components/tray/menu/Menu.qml b/modules/bar/components/tray/menu/Menu.qml index 4d49037..52d1627 100644 --- a/modules/bar/components/tray/menu/Menu.qml +++ b/modules/bar/components/tray/menu/Menu.qml @@ -1,16 +1,16 @@ pragma ComponentBehavior: Bound -import qs.config -import qs.widgets import QtQuick import QtQuick.Layouts import Quickshell +import "../../../../../config/" +import "../../../../../styled/" StyledPopupWindow { id: window backgroundColor: Theme.palette.base300 - margins: 14 + margins: 8 radius: 8 property QsMenuOpener menuOpener @@ -25,7 +25,7 @@ StyledPopupWindow { active: true Layout.fillWidth: true - Layout.minimumWidth: 160 + Layout.minimumWidth: 120 sourceComponent: modelData.isSeparator ? menuSeperator : menuItem property Component menuSeperator: Rectangle { diff --git a/modules/bar/components/tray/menu/MenuItem.qml b/modules/bar/components/tray/menu/MenuItem.qml index bdf866c..58b550b 100644 --- a/modules/bar/components/tray/menu/MenuItem.qml +++ b/modules/bar/components/tray/menu/MenuItem.qml @@ -1,12 +1,28 @@ -import qs.widgets import Quickshell +import "../../../../../config/" +import "../../../../../styled/" -StyledButton { - id: root +Clickable { + id: item property QsMenuEntry menuEntry + + implicitWidth: text.width + implicitHeight: 30 + onClicked: menuEntry.triggered() - content: StyledText { - font.pixelSize: 14 - text: root.menuEntry.text + + StyledText { + id: text + + opacity: item.opacity + + font.pixelSize: Dimensions.clock.fontSize + anchors.verticalCenter: parent.verticalCenter + topPadding: Dimensions.clock.verticalPadding + bottomPadding: Dimensions.clock.verticalPadding + leftPadding: Dimensions.clock.horizontalPadding + rightPadding: Dimensions.clock.horizontalPadding + + text: item.menuEntry.text } } diff --git a/services/Bluetooth.qml b/services/Bluetooth.qml index d802ac8..0904672 100644 --- a/services/Bluetooth.qml +++ b/services/Bluetooth.qml @@ -8,7 +8,7 @@ Singleton { property BluetoothAdapter defaultAdapter: Bluetooth.defaultAdapter property list connectedDevices: defaultAdapter.devices.values.filter(device => device.connected) - property list pairedDevices: defaultAdapter.devices.values.filter(device => device.paired && !device.connected) + property list pairedDevices: defaultAdapter.devices.values.filter(device => device.paired) property list availableDevices: defaultAdapter.devices.values.filter(device => !device.paired) function isConnected(BluetoothDevice: device) { diff --git a/widgets/StyledPopupWindow.qml b/styled/StyledPopupWindow.qml similarity index 97% rename from widgets/StyledPopupWindow.qml rename to styled/StyledPopupWindow.qml index f409be8..cd6374b 100644 --- a/widgets/StyledPopupWindow.qml +++ b/styled/StyledPopupWindow.qml @@ -60,7 +60,7 @@ PopupWindow { Loader { active: root.visible - sourceComponent: root.content + sourceComponent: content } } } diff --git a/widgets/StyledButton.qml b/widgets/StyledButton.qml index c14e4f3..3ac2ee6 100644 --- a/widgets/StyledButton.qml +++ b/widgets/StyledButton.qml @@ -26,7 +26,7 @@ WrapperMouseArea { } Loader { active: true - sourceComponent: root.content + sourceComponent: content } } } diff --git a/widgets/StyledLabel.qml b/widgets/StyledLabel.qml index 4b9dd07..13781b9 100644 --- a/widgets/StyledLabel.qml +++ b/widgets/StyledLabel.qml @@ -4,6 +4,7 @@ import Quickshell.Widgets WrapperRectangle { id: root + required property Component content margin: 8 radius: 8 color: Theme.palette.base100