87 lines
2.8 KiB
QML
87 lines
2.8 KiB
QML
import Quickshell
|
|
import Quickshell.Io
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell.Widgets
|
|
import Quickshell.Services.Pipewire
|
|
import QtQuick.VectorImage
|
|
import QtQuick.Effects
|
|
import Quickshell.Services.UPower
|
|
import "common" as Common
|
|
|
|
Rectangle {
|
|
// TODO eventually fix the alignment (it isnt centered horizentally)
|
|
id: root
|
|
property int battPercent: 58
|
|
implicitWidth: itemContent.width + 8
|
|
implicitHeight: 24
|
|
visible: {
|
|
if (UPower.displayDevice.ready) {
|
|
true;
|
|
} else {
|
|
false;
|
|
}
|
|
}
|
|
radius: 5.5
|
|
Layout.alignment: Qt.AlignVCenter
|
|
color: "#2a2a2a" // Define item color
|
|
RowLayout {
|
|
id: itemContent
|
|
implicitWidth: 24
|
|
implicitHeight: 24
|
|
anchors.centerIn: parent
|
|
Text {
|
|
// anchors.centerIn: parent
|
|
text: Math.round(UPower.displayDevice.percentage * 100) + "%"
|
|
color: Common.Colors.colors.primary
|
|
font.weight: Font.DemiBold
|
|
font.pointSize: 12
|
|
}
|
|
Item {
|
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
implicitWidth: icon.width
|
|
implicitHeight: icon.height
|
|
Text {
|
|
id: icon
|
|
anchors.centerIn: parent
|
|
text: root.getBatteryState(UPower.displayDevice.percentage * 100, ((UPower.displayDevice.timeToFull > 0)))
|
|
color: root.getBatteryColor(UPower.displayDevice.percentage * 100)
|
|
font.weight: Font.DemiBold
|
|
font.pointSize: 24 / 1.4
|
|
}
|
|
}
|
|
}
|
|
function getBatteryState(level, isCharging) {
|
|
if (level === null || level === 0) {
|
|
// Return the battery empty icon
|
|
return isCharging ? Common.Icons.battery.charging["1"] : Common.Icons.battery["0"];
|
|
}
|
|
|
|
if (level === 100) {
|
|
// Return the battery full icon
|
|
return isCharging ? Common.Icons.battery.charging["10"] : Common.Icons.battery["10"];
|
|
}
|
|
|
|
// Calculate step as a value between 1 and 10 (divide level into 10 ranges)
|
|
let step = Math.ceil(level / 10); // Range mapping
|
|
if (step > 10)
|
|
step = 10; // Clamp to 10 if it exceeds bounds
|
|
|
|
// Return the correct icon based on state
|
|
return isCharging ? Common.Icons.battery.charging[String(step)] : Common.Icons.battery[String(step)];
|
|
}
|
|
function getBatteryColor(level) {
|
|
if (level === null || level === 0) {
|
|
// Use critical color for empty battery
|
|
return Common.Colors.colors.critial2;
|
|
}
|
|
|
|
if (level > 0 && level <= 20) {
|
|
// Use critical color for low battery
|
|
return Common.Colors.colors.critial2;
|
|
}
|
|
// Default color if no specific condition is met
|
|
return Common.Colors.colors.primary;
|
|
}
|
|
}
|