diff options
| author | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
|---|---|---|
| committer | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
| commit | 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch) | |
| tree | ab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/DiskUsage.qml | |
| parent | 5d94c0a7d44a2255b81815a52a7056a94a39842d (diff) | |
| download | RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip | |
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/DiskUsage.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/DiskUsage.qml | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/DiskUsage.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/DiskUsage.qml new file mode 100644 index 0000000..d6e6d1b --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankBar/Widgets/DiskUsage.qml @@ -0,0 +1,255 @@ +import QtQuick +import qs.Common +import qs.Modules.Plugins +import qs.Services +import qs.Widgets + +BasePill { + id: root + + property var widgetData: null + property string mountPath: (widgetData && widgetData.mountPath !== undefined) ? widgetData.mountPath : "/" + property int diskUsageMode: (widgetData && widgetData.diskUsageMode !== undefined) ? widgetData.diskUsageMode : 0 + property bool isHovered: mouseArea.containsMouse + property bool isAutoHideBar: false + + property var selectedMount: { + if (!DgopService.diskMounts || DgopService.diskMounts.length === 0) { + return null; + } + + const currentMountPath = root.mountPath || "/"; + + for (let i = 0; i < DgopService.diskMounts.length; i++) { + if (DgopService.diskMounts[i].mount === currentMountPath) { + return DgopService.diskMounts[i]; + } + } + + for (let i = 0; i < DgopService.diskMounts.length; i++) { + if (DgopService.diskMounts[i].mount === "/") { + return DgopService.diskMounts[i]; + } + } + + return DgopService.diskMounts[0] || null; + } + + property real diskUsagePercent: { + if (!selectedMount || !selectedMount.percent) { + return 0; + } + const percentStr = selectedMount.percent.replace("%", ""); + return parseFloat(percentStr) || 0; + } + + Component.onCompleted: { + DgopService.addRef(["diskmounts"]); + } + Component.onDestruction: { + DgopService.removeRef(["diskmounts"]); + } + + readonly property real minTooltipY: { + if (!parentScreen || !isVerticalOrientation) { + return 0; + } + + if (isAutoHideBar) { + return 0; + } + + if (parentScreen.y > 0) { + const spacing = barConfig?.spacing ?? 4; + const offset = barThickness + spacing; + return offset; + } + + return 0; + } + + Connections { + function onWidgetDataChanged() { + root.mountPath = Qt.binding(() => { + return (root.widgetData && root.widgetData.mountPath !== undefined) ? root.widgetData.mountPath : "/"; + }); + + root.selectedMount = Qt.binding(() => { + if (!DgopService.diskMounts || DgopService.diskMounts.length === 0) { + return null; + } + + const currentMountPath = root.mountPath || "/"; + + for (let i = 0; i < DgopService.diskMounts.length; i++) { + if (DgopService.diskMounts[i].mount === currentMountPath) { + return DgopService.diskMounts[i]; + } + } + + for (let i = 0; i < DgopService.diskMounts.length; i++) { + if (DgopService.diskMounts[i].mount === "/") { + return DgopService.diskMounts[i]; + } + } + + return DgopService.diskMounts[0] || null; + }); + } + + target: SettingsData + } + + content: Component { + Item { + implicitWidth: root.isVerticalOrientation ? (root.widgetThickness - root.horizontalPadding * 2) : diskContent.implicitWidth + implicitHeight: root.isVerticalOrientation ? diskColumn.implicitHeight : (root.widgetThickness - root.horizontalPadding * 2) + + Column { + id: diskColumn + visible: root.isVerticalOrientation + anchors.centerIn: parent + spacing: 1 + + DankIcon { + name: "storage" + size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) + color: { + if (root.diskUsagePercent > 90) { + return Theme.tempDanger; + } + if (root.diskUsagePercent > 75) { + return Theme.tempWarning; + } + return Theme.surfaceText; + } + anchors.horizontalCenter: parent.horizontalCenter + } + + StyledText { + text: { + if (root.diskUsagePercent === undefined || root.diskUsagePercent === null || root.diskUsagePercent === 0) { + return "--"; + } + if (!root.selectedMount) return "--"; + switch (root.diskUsageMode) { + case 1: return root.selectedMount.size || "--"; + case 2: return root.selectedMount.avail || "--"; + case 3: return (root.selectedMount.avail || "--") + " / " + (root.selectedMount.size || "--"); + default: return root.diskUsagePercent.toFixed(0); + } + } + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + anchors.horizontalCenter: parent.horizontalCenter + } + } + + Row { + id: diskContent + visible: !root.isVerticalOrientation + anchors.centerIn: parent + spacing: 3 + + DankIcon { + name: "storage" + size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) + color: { + if (root.diskUsagePercent > 90) { + return Theme.tempDanger; + } + if (root.diskUsagePercent > 75) { + return Theme.tempWarning; + } + return Theme.surfaceText; + } + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: { + if (!root.selectedMount) { + return "--"; + } + return root.selectedMount.mount; + } + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + anchors.verticalCenter: parent.verticalCenter + horizontalAlignment: Text.AlignLeft + elide: Text.ElideNone + } + + StyledText { + text: { + if (root.diskUsagePercent === undefined || root.diskUsagePercent === null || root.diskUsagePercent === 0) { + return "--%"; + } + if (!root.selectedMount) return "--%"; + switch (root.diskUsageMode) { + case 1: return root.selectedMount.size || "--"; + case 2: return root.selectedMount.avail || "--"; + case 3: return (root.selectedMount.avail || "--") + " / " + (root.selectedMount.size || "--"); + default: return root.diskUsagePercent.toFixed(0) + "%"; + } + } + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + anchors.verticalCenter: parent.verticalCenter + horizontalAlignment: Text.AlignLeft + elide: Text.ElideNone + + StyledTextMetrics { + id: diskBaseline + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + text: { + switch (root.diskUsageMode) { + case 3: return "888.8G / 888.8G"; + case 1: + case 2: return "888.8G"; + default: return "100%"; + } + } + } + + width: Math.max(diskBaseline.width, paintedWidth) + } + } + } + } + + Loader { + id: tooltipLoader + active: false + sourceComponent: DankTooltip {} + } + + MouseArea { + id: mouseArea + z: 1 + anchors.fill: parent + hoverEnabled: root.isVerticalOrientation + onEntered: { + if (root.isVerticalOrientation && root.selectedMount) { + tooltipLoader.active = true; + if (tooltipLoader.item) { + const globalPos = mapToGlobal(width / 2, height / 2); + const currentScreen = root.parentScreen || Screen; + const screenX = currentScreen ? currentScreen.x : 0; + const screenY = currentScreen ? currentScreen.y : 0; + const relativeY = globalPos.y - screenY; + const adjustedY = relativeY + root.minTooltipY; + const tooltipX = root.axis?.edge === "left" ? (root.barThickness + root.barSpacing + Theme.spacingXS) : (currentScreen.width - root.barThickness - root.barSpacing - Theme.spacingXS); + const isLeft = root.axis?.edge === "left"; + tooltipLoader.item.show(root.selectedMount.mount, screenX + tooltipX, adjustedY, currentScreen, isLeft, !isLeft); + } + } + } + onExited: { + if (tooltipLoader.item) { + tooltipLoader.item.hide(); + } + tooltipLoader.active = false; + } + } +} |