Files
2026-06-22 13:21:47 +02:00

188 lines
6.9 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import "../../../config"
import "../states/Battery"
MouseArea {
id: batteryButton
width: expanded ? Math.max(expandedRow.width + Config.spacing_fun(height)*3, 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 >= 90 ? "" :
BatteryState.percentage >= 60 ? "" :
BatteryState.percentage >= 30 ? "" :
BatteryState.percentage >= 10 ? "" :
""
)
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)
}
BarPopup {
id: batteryPopup
anchorItem: batteryButton
anchorHovered: batteryButton.containsMouse
spacingValue: Config.spacing_fun(batteryButton.height)
radiusValue: Config.radius_fun(batteryButton.height)
Column {
spacing: parent.spacing
Text {
text: "percentage: " + BatteryState.percentage + "%"
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
Text {
text: "charging: " + BatteryState.charging
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
Text {
text: "energy: " + BatteryState.energy
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
Text {
text: "voltage: " + BatteryState.voltage
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
Text {
text: "charge_cycle: " + BatteryState.charge_cycle
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
Text {
text: "time_to_empty: " + BatteryState.time_to_empty + "h"
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
Text {
text: "energy_rate: " + BatteryState.energy_rate + "W"
wrapMode: Text.WordWrap
color: Colors.primary
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: Config.font_size_tiny(bar.height)
font.family: Config.font
}
}
}
}