From 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 Mon Sep 17 00:00:00 2001 From: AlexanderCurl Date: Sat, 18 Apr 2026 17:46:06 +0100 Subject: Replaced file structures for themes in the correct format --- .../quickshell/Modules/DankBar/Widgets/Battery.qml | 165 +++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/Battery.qml (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/Battery.qml') diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/Battery.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/Battery.qml new file mode 100644 index 0000000..51d4b54 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/Battery.qml @@ -0,0 +1,165 @@ +import QtQuick +import Quickshell.Services.UPower +import qs.Common +import qs.Modules.Plugins +import qs.Services +import qs.Widgets + +BasePill { + id: battery + + property bool batteryPopupVisible: false + property var popoutTarget: null + + property real touchpadAccumulator: 0 + + readonly property int barPosition: { + switch (axis?.edge) { + case "top": + return 0; + case "bottom": + return 1; + case "left": + return 2; + case "right": + return 3; + default: + return 0; + } + } + + signal toggleBatteryPopup + + visible: true + + content: Component { + Item { + implicitWidth: battery.isVerticalOrientation ? (battery.widgetThickness - battery.horizontalPadding * 2) : batteryContent.implicitWidth + implicitHeight: battery.isVerticalOrientation ? batteryColumn.implicitHeight : (battery.widgetThickness - battery.horizontalPadding * 2) + + Column { + id: batteryColumn + visible: battery.isVerticalOrientation + anchors.centerIn: parent + spacing: 1 + + DankIcon { + name: BatteryService.getBatteryIcon() + size: Theme.barIconSize(battery.barThickness, undefined, battery.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) + color: { + if (!BatteryService.batteryAvailable) { + return Theme.widgetIconColor; + } + + if (BatteryService.isLowBattery && !BatteryService.isCharging) { + return Theme.error; + } + + if (BatteryService.isCharging || BatteryService.isPluggedIn) { + return Theme.primary; + } + + return Theme.widgetIconColor; + } + anchors.horizontalCenter: parent.horizontalCenter + } + + StyledText { + text: BatteryService.batteryLevel.toString() + font.pixelSize: Theme.barTextSize(battery.barThickness, battery.barConfig?.fontScale, battery.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + anchors.horizontalCenter: parent.horizontalCenter + visible: BatteryService.batteryAvailable + } + } + + Row { + id: batteryContent + visible: !battery.isVerticalOrientation + anchors.centerIn: parent + spacing: (barConfig?.noBackground ?? false) ? 1 : 2 + + DankIcon { + name: BatteryService.getBatteryIcon() + size: Theme.barIconSize(battery.barThickness, -4, battery.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) + color: { + if (!BatteryService.batteryAvailable) { + return Theme.widgetIconColor; + } + + if (BatteryService.isLowBattery && !BatteryService.isCharging) { + return Theme.error; + } + + if (BatteryService.isCharging || BatteryService.isPluggedIn) { + return Theme.primary; + } + + return Theme.widgetIconColor; + } + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: `${BatteryService.batteryLevel}%` + font.pixelSize: Theme.barTextSize(battery.barThickness, battery.barConfig?.fontScale, battery.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + anchors.verticalCenter: parent.verticalCenter + visible: BatteryService.batteryAvailable + } + } + } + } + + MouseArea { + x: -battery.leftMargin + y: -battery.topMargin + width: battery.width + battery.leftMargin + battery.rightMargin + height: battery.height + battery.topMargin + battery.bottomMargin + cursorShape: Qt.PointingHandCursor + acceptedButtons: Qt.LeftButton + onPressed: mouse => { + battery.triggerRipple(this, mouse.x, mouse.y); + toggleBatteryPopup(); + } + onWheel: wheel => { + var delta = wheel.angleDelta.y; + if (delta === 0) + return; + + // Check if this is a touchpad + if (delta !== 120 && delta !== -120) { + touchpadAccumulator += delta; + console.info("Acc: "+touchpadAccumulator); + if (Math.abs(touchpadAccumulator) < 500) + return; + delta = touchpadAccumulator; + touchpadAccumulator = 0; + } + console.info("Trigger! Delta: "+delta) + + // This is after the other delta checks so it only shows on valid Y scroll + if (typeof PowerProfiles === "undefined") { + ToastService.showError("power-profiles-daemon not available"); + return; + } + + // Get list of profiles, and current index + const profiles = [PowerProfile.PowerSaver, PowerProfile.Balanced].concat(PowerProfiles.hasPerformanceProfile ? [PowerProfile.Performance] : []); + var index = profiles.findIndex(profile => PowerProfiles.profile === profile); + + // Step once based on mouse wheel direction + if (delta > 0) index += 1; + else index -= 1; + + // Already at end of list, can't go further + if (index < 0 || index >= profiles.length) return; + + // Set new profile + PowerProfiles.profile = profiles[index]; + if (PowerProfiles.profile !== profiles[index]) { + ToastService.showError("Failed to set power profile"); + } + } + } +} -- cgit v1.3