104 lines
3.8 KiB
QML
104 lines
3.8 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Hyprland
|
|
import Quickshell.Io
|
|
import "../../../colors"
|
|
import "../states/Battery"
|
|
|
|
MouseArea {
|
|
id: batteryButton
|
|
width: clicked ? Math.max(batteryPercentageText.width + parent.spacing*2, bar.height) : Math.max(batteryText.width + parent.spacing*2, bar.height)
|
|
height: bar.height
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
visible: false
|
|
|
|
property bool clicked: false
|
|
|
|
Component.onCompleted: {
|
|
batteryAvailibleScript.running = true
|
|
}
|
|
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
color: batteryButton.containsMouse ? Colors.tertiary : Qt.alpha(Colors.tertiaryContainer, 0.25)
|
|
radius: 6
|
|
border.width: 2
|
|
border.color: batteryButton.containsMouse ? Colors.tertiaryContainer_fg
|
|
: Colors.secondaryContainer_fg
|
|
|
|
Text {
|
|
id: batteryText
|
|
visible : !clicked
|
|
anchors.centerIn: parent
|
|
text:(
|
|
BatteryState.percentage >= 95 ? "" :
|
|
BatteryState.percentage >= 75 ? "" :
|
|
BatteryState.percentage >= 50 ? "" :
|
|
BatteryState.percentage >= 25 ? "" :
|
|
""
|
|
)
|
|
font.pixelSize: 26
|
|
font.family: "Nerd Font"
|
|
color: (
|
|
BatteryState.charging ? BatteryState.percentage == 100 ? "white" : "green" :
|
|
BatteryState.percentage < 5 ? "red" :
|
|
BatteryState.percentage < 10 ? "yellow" :
|
|
batteryButton.containsMouse ? Colors.tertiary_fg :
|
|
Colors.primary
|
|
)
|
|
}
|
|
|
|
Text {
|
|
id: batteryPercentageText
|
|
visible : clicked
|
|
anchors.centerIn: parent
|
|
text: (
|
|
BatteryState.charging ? "" :
|
|
BatteryState.percentage >= 90 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 80 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 70 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 60 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 50 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 40 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 30 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 20 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 10 ? " " + BatteryState.percentage + "%" :
|
|
BatteryState.percentage >= 5 ? " " + BatteryState.percentage + "%" :
|
|
" " + BatteryState.percentage + "%"
|
|
)
|
|
font.pixelSize: BatteryState.charging ? "" : batteryText.font.pixelSize*0.75
|
|
font.family: "Nerd Font"
|
|
color: (
|
|
BatteryState.percentage < 5 ? "red" :
|
|
BatteryState.charging ? "green" :
|
|
BatteryState.percentage < 10 ? "yellow" :
|
|
batteryButton.containsMouse ? Colors.tertiary_fg :
|
|
Colors.primary
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
Process {
|
|
id: batteryAvailibleScript
|
|
command: ["sh", "-c", "upower -e | grep -q '^/org/freedesktop/UPower/devices/battery' && echo '1' || echo '0'"]
|
|
stdout: StdioCollector {
|
|
onStreamFinished: {
|
|
const hasBattery = this.text.trim() === "1"
|
|
|
|
batteryButton.visible = hasBattery
|
|
if (hasBattery) {
|
|
BatteryState.start()
|
|
}
|
|
|
|
console.log("battery available:", hasBattery)
|
|
}
|
|
}
|
|
}
|
|
|
|
onClicked: {
|
|
batteryButton.clicked = !batteryButton.clicked
|
|
}
|
|
|
|
} |