diff options
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Modules/DankBar/Widgets/RamMonitor.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/dms/Modules/DankBar/Widgets/RamMonitor.qml | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Modules/DankBar/Widgets/RamMonitor.qml b/raveos-hyprland-theme/theme-data/dms/Modules/DankBar/Widgets/RamMonitor.qml new file mode 100644 index 0000000..f5d6de5 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/dms/Modules/DankBar/Widgets/RamMonitor.qml @@ -0,0 +1,175 @@ +import QtQuick +import qs.Common +import qs.Modules.Plugins +import qs.Services +import qs.Widgets + +BasePill { + id: root + + property bool showPercentage: true + property bool showIcon: true + property var toggleProcessList + property var popoutTarget: null + property var widgetData: null + property bool minimumWidth: (widgetData && widgetData.minimumWidth !== undefined) ? widgetData.minimumWidth : true + property bool showSwap: (widgetData && widgetData.showSwap !== undefined) ? widgetData.showSwap : false + property bool showInGb: (widgetData && widgetData.showInGb !== undefined) ? widgetData.showInGb : false + readonly property real swapUsage: DgopService.totalSwapKB > 0 ? (DgopService.usedSwapKB / DgopService.totalSwapKB) * 100 : 0 + + signal ramClicked + + Component.onCompleted: { + DgopService.addRef(["memory"]); + } + Component.onDestruction: { + DgopService.removeRef(["memory"]); + } + + content: Component { + Item { + implicitWidth: root.isVerticalOrientation ? (root.widgetThickness - root.horizontalPadding * 2) : ramContent.implicitWidth + implicitHeight: root.isVerticalOrientation ? ramColumn.implicitHeight : ramContent.implicitHeight + + Column { + id: ramColumn + visible: root.isVerticalOrientation + anchors.centerIn: parent + spacing: 1 + + DankIcon { + name: "developer_board" + size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) + color: { + if (DgopService.memoryUsage > 90) { + return Theme.tempDanger; + } + + if (DgopService.memoryUsage > 75) { + return Theme.tempWarning; + } + + return Theme.widgetIconColor; + } + anchors.horizontalCenter: parent.horizontalCenter + } + + StyledText { + text: { + if (DgopService.memoryUsage === undefined || DgopService.memoryUsage === null || DgopService.memoryUsage === 0) { + return "--"; + } + + if (root.showInGb) { + return (DgopService.usedMemoryMB / 1024).toFixed(1); + } + + return DgopService.memoryUsage.toFixed(0); + } + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + anchors.horizontalCenter: parent.horizontalCenter + } + + StyledText { + visible: root.showSwap && DgopService.totalSwapKB > 0 + text: root.swapUsage.toFixed(0) + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + color: Theme.surfaceVariantText + anchors.horizontalCenter: parent.horizontalCenter + } + } + + Row { + id: ramContent + visible: !root.isVerticalOrientation + anchors.centerIn: parent + spacing: Theme.spacingXS + + DankIcon { + id: ramIcon + name: "developer_board" + size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) + color: { + if (DgopService.memoryUsage > 90) { + return Theme.tempDanger; + } + + if (DgopService.memoryUsage > 75) { + return Theme.tempWarning; + } + + return Theme.widgetIconColor; + } + anchors.verticalCenter: parent.verticalCenter + } + + Item { + id: textBox + anchors.verticalCenter: parent.verticalCenter + + implicitWidth: root.minimumWidth ? Math.max(ramBaseline.width, ramText.paintedWidth) : ramText.paintedWidth + implicitHeight: ramText.implicitHeight + + width: implicitWidth + height: implicitHeight + + StyledTextMetrics { + id: ramBaseline + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + text: { + let baseText = root.showInGb ? "88.8 GB" : "88%"; + if (!root.showSwap) { + return baseText; + } + if (root.swapUsage < 10) { + return baseText + " · 0%"; + } + return baseText + " · 88%"; + } + } + + StyledText { + id: ramText + text: { + if (DgopService.memoryUsage === undefined || DgopService.memoryUsage === null || DgopService.memoryUsage === 0) { + return root.showInGb ? "-- GB" : "--%"; + } + + let ramText = ""; + if (root.showInGb) { + ramText = (DgopService.usedMemoryMB / 1024).toFixed(1) + " GB"; + } else { + ramText = DgopService.memoryUsage.toFixed(0) + "%"; + } + + if (root.showSwap && DgopService.totalSwapKB > 0) { + return ramText + " · " + root.swapUsage.toFixed(0) + "%"; + } + return ramText; + } + font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText) + color: Theme.widgetTextColor + + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideNone + wrapMode: Text.NoWrap + } + } + } + } + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + acceptedButtons: Qt.LeftButton + onPressed: mouse => { + root.triggerRipple(this, mouse.x, mouse.y); + DgopService.setSortBy("memory"); + ramClicked(); + } + } +} |