import Quickshell.Services.UPower import QtQuick.Layouts import QtQuick import Quickshell.Widgets import Qt5Compat.GraphicalEffects import Quickshell import qs import qs.reusables import qs.settings Loader { id: batLoader active: UPower.displayDevice.isLaptopBattery sourceComponent: Rectangle { id: container radius: implicitHeight / 2 color: Colors.base00 anchors.verticalCenter: parent.verticalCenter implicitWidth: UPower.displayDevice.isLaptopBattery ? root.implicitWidth + 20 : 0 implicitHeight: Settings.config.barHeight - 10 Item { id: root anchors.centerIn: parent property bool frame1: UPower.displayDevice.percentage <= 0.16 property bool frame2: UPower.displayDevice.percentage < 0.32 property bool frame3: UPower.displayDevice.percentage < 0.48 property bool frame4: UPower.displayDevice.percentage < 0.74 property bool frame5: UPower.displayDevice.percentage < 0.90 property bool frame6: UPower.displayDevice.percentage <= 1 function getBatteryIcon() { if (UPower.displayDevice.state == UPowerDeviceState.Charging) { return "battery_android_frame_bolt"; } if (frame1) { return "battery_android_frame_1"; } if (frame2) { return "battery_android_frame_2"; } if (frame3) { return "battery_android_frame_3"; } if (frame4) { return "battery_android_frame_4"; } if (frame5) { return "battery_android_frame_5"; } if (frame6) { return "battery_android_frame_full"; } } function getProfileIcon() { if (PowerProfiles.profile.toString() == "2") { return "power-profile-performance-symbolic"; } if (PowerProfiles.profile.toString() == "1") { return "power-profile-balanced-symbolic"; } if (PowerProfiles.profile.toString() == "0") { return "power-profile-power-saver-symbolic"; } } implicitWidth: batRow.width implicitHeight: Settings.config.barHeight RowLayout { id: batRow anchors.centerIn: parent height: parent.height spacing: 5 CustomText { id: batText text: Math.round(UPower.displayDevice.percentage * 100) + "%" } CustomIcon { id: batIcon text: root.getBatteryIcon() } } } } }