diff --git a/Helpers/UPower.qml b/Helpers/UPower.qml index 5495000..ed9f1ad 100644 --- a/Helpers/UPower.qml +++ b/Helpers/UPower.qml @@ -10,15 +10,4 @@ Singleton { readonly property list devices: UPower.devices.values readonly property bool onBattery: UPower.onBattery readonly property UPowerDevice displayDevice: UPower.displayDevice - - property UPowerDevice batteryDevice: findDevice() - - function findDevice(): UPowerDevice { - for ( let i = 0; i < root.devices.length; i++ ) { - console.log(root.devices[i]) - if ( root.devices[i].isLaptopBattery ) { - return root.devices[i]; - } - } - } } diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml index 6e8c10d..fa09aa0 100644 --- a/Modules/UPower/UPowerWidget.qml +++ b/Modules/UPower/UPowerWidget.qml @@ -1,19 +1,51 @@ import Quickshell +import Quickshell.Services.UPower import QtQuick +import QtQuick.Layouts import qs.Components import qs.Config -import qs.Helpers +import qs.Helpers as Helpers import qs.Modules Item { id: root - implicitWidth: 100 + implicitWidth: layout.childrenRect.width anchors.top: parent.top anchors.bottom: parent.bottom - CustomText { - text: UPower.batteryDevice.percentage + "%" + RowLayout { + id: layout anchors.centerIn: parent + + MaterialIcon { + animate: true + Layout.alignment: Qt.AlignVCenter + text: { + if (!Helpers.UPower.displayDevice.isLaptopBattery) { + if (PowerProfiles.profile === PowerProfile.PowerSaver) + return "energy_savings_leaf"; + if (PowerProfiles.profile === PowerProfile.Performance) + return "rocket_launch"; + return "balance"; + } + + const perc = Helpers.UPower.displayDevice.percentage; + const charging = [UPowerDeviceState.Charging, UPowerDeviceState.FullyCharged, UPowerDeviceState.PendingCharge].includes(Helpers.UPower.displayDevice.state); + if (perc === 1) + return charging ? "battery_charging_full" : "battery_full"; + let level = Math.floor(perc * 7); + if (charging && (level === 4 || level === 1)) + level--; + return charging ? `battery_charging_${(level + 3) * 10}` : `battery_${level}_bar`; + } + color: !Helpers.UPower.onBattery || UPower.displayDevice.percentage > 0.2 ? root.colour : Colours.palette.m3error + fill: 1 + } + + CustomText { + Layout.alignment: Qt.AlignVCenter + text: Helpers.UPower.displayDevice.isLaptopBattery ? qsTr("%1%").arg(Math.round(UPower.displayDevice.percentage * 100)) : qsTr("NaN") + } } }