Files
quickshell/modules/bar/widgets/Battery.qml
T
2026-06-14 01:15:30 +02:00

120 lines
4.2 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import "../../../config"
import "../states/Battery"
MouseArea {
id: batteryButton
width: expanded ? Math.max(batteryPercentageText.width + Config.spacing_fun(height), bar.height) : Math.max(batteryText.width + Config.spacing_fun(height)*2, bar.height)
height: bar.height
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
visible: BatteryState.available
property bool expanded: false
Rectangle {
anchors.fill: parent
color: batteryButton.containsMouse ? Colors.tertiary : Qt.alpha(Colors.tertiaryContainer, 0.25)
radius: Config.radius_fun(batteryButton.height)
border.width: Config.border_width
border.color: batteryButton.containsMouse ? Colors.tertiaryContainer_fg
: Colors.secondaryContainer_fg
Text {
id: batteryText
visible : !expanded
anchors.centerIn: parent
text:(
BatteryState.percentage >= 95 ? "" :
BatteryState.percentage >= 75 ? "" :
BatteryState.percentage >= 50 ? "" :
BatteryState.percentage >= 25 ? "" :
""
)
font.pixelSize: Config.font_size(batteryButton.height)
font.family: Config.font
color: (
BatteryState.charging ? (
BatteryState.percentage == 100 ? Colors.secondary :
Colors.tertiary
) :
BatteryState.percentage <= 5 ? Colors.errorContainer :
BatteryState.percentage < 10 ? "yellow" :
batteryButton.containsMouse ? Colors.tertiary_fg :
Colors.primary
)
}
Text {
id: chargeIcon
visible : !expanded && BatteryState.charging
anchors.centerIn: parent
text: "󱐋"
font.pixelSize: Config.iconSize(batteryButton.height)
font.family: Config.font
style: Text.Outline
styleColor: Qt.alpha(Colors.tertiaryContainer, 0.5)
color: Colors.tertiary
}
Row {
id: expandedRow
visible: expanded
anchors.centerIn: parent
spacing: Config.spacing_fun(batteryButton.height)
Text {
id: batteryPercentageSymbol
text: (
BatteryState.charging ? "󰂄" :
BatteryState.percentage >= 90 ? "󰁹":
BatteryState.percentage >= 80 ? "󰂂":
BatteryState.percentage >= 70 ? "󰂁":
BatteryState.percentage >= 60 ? "󰂀":
BatteryState.percentage >= 50 ? "󰁿":
BatteryState.percentage >= 40 ? "󰁾":
BatteryState.percentage >= 30 ? "󰁽":
BatteryState.percentage >= 20 ? "󰁼":
BatteryState.percentage >= 10 ? "󰁻":
BatteryState.percentage >= 5 ? "󰁺":
"󰂃"
)
font.pixelSize: Config.labelSize(batteryButton.height)
font.family: Config.font
font.bold: true
color: (
BatteryState.percentage <= 5 ? Colors.errorContainer :
BatteryState.charging ? (
BatteryState.percentage == 100 ? Colors.secondary :
Colors.tertiary
) :
BatteryState.percentage < 10 ? "yellow" :
batteryButton.containsMouse ? Colors.tertiary_fg :
Colors.primary
)
}
Text {
id: batteryPercentageText
text: BatteryState.percentage + "%"
font.pixelSize: Config.labelSize(batteryButton.height)
font.family: Config.font
font.bold: true
color: batteryPercentageSymbol.color
}
}
}
onClicked: {
expanded = !expanded
console.log("[Battery] Expanded: " + expanded + ", percentage: " + BatteryState.percentage + "%, charging: " + BatteryState.charging)
}
}