forked from Shinonome/dots-hyprland
148 lines
4.2 KiB
QML
148 lines
4.2 KiB
QML
import qs
|
|
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import qs.services
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
|
|
StyledPopup {
|
|
id: root
|
|
|
|
// Helper function to format KB to GB
|
|
function formatKB(kb) {
|
|
return (kb / (1024 * 1024)).toFixed(1) + " GB";
|
|
}
|
|
|
|
component ResourceItem: RowLayout {
|
|
id: resourceItem
|
|
required property string icon
|
|
required property string label
|
|
required property string value
|
|
spacing: 4
|
|
|
|
MaterialSymbol {
|
|
text: resourceItem.icon
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
iconSize: Appearance.font.pixelSize.large
|
|
}
|
|
StyledText {
|
|
text: resourceItem.label
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
}
|
|
StyledText {
|
|
Layout.fillWidth: true
|
|
horizontalAlignment: Text.AlignRight
|
|
visible: resourceItem.value !== ""
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
text: resourceItem.value
|
|
}
|
|
}
|
|
|
|
component ResourceHeaderItem: Row {
|
|
id: headerItem
|
|
required property var icon
|
|
required property var label
|
|
spacing: 5
|
|
|
|
MaterialSymbol {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
fill: 0
|
|
font.weight: Font.Medium
|
|
text: headerItem.icon
|
|
iconSize: Appearance.font.pixelSize.large
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
}
|
|
|
|
StyledText {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: headerItem.label
|
|
font {
|
|
weight: Font.Medium
|
|
pixelSize: Appearance.font.pixelSize.normal
|
|
}
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
}
|
|
}
|
|
|
|
Row {
|
|
anchors.centerIn: parent
|
|
spacing: 12
|
|
|
|
Column {
|
|
anchors.top: parent.top
|
|
spacing: 8
|
|
|
|
ResourceHeaderItem {
|
|
icon: "memory"
|
|
label: "RAM"
|
|
}
|
|
Column {
|
|
spacing: 4
|
|
ResourceItem {
|
|
icon: "clock_loader_60"
|
|
label: Translation.tr("Used:")
|
|
value: formatKB(ResourceUsage.memoryUsed)
|
|
}
|
|
ResourceItem {
|
|
icon: "check_circle"
|
|
label: Translation.tr("Free:")
|
|
value: formatKB(ResourceUsage.memoryFree)
|
|
}
|
|
ResourceItem {
|
|
icon: "empty_dashboard"
|
|
label: Translation.tr("Total:")
|
|
value: formatKB(ResourceUsage.memoryTotal)
|
|
}
|
|
}
|
|
}
|
|
|
|
Column {
|
|
visible: ResourceUsage.swapTotal > 0
|
|
anchors.top: parent.top
|
|
spacing: 8
|
|
|
|
ResourceHeaderItem {
|
|
icon: "swap_horiz"
|
|
label: "Swap"
|
|
}
|
|
Column {
|
|
spacing: 4
|
|
ResourceItem {
|
|
icon: "clock_loader_60"
|
|
label: Translation.tr("Used:")
|
|
value: formatKB(ResourceUsage.swapUsed)
|
|
}
|
|
ResourceItem {
|
|
icon: "check_circle"
|
|
label: Translation.tr("Free:")
|
|
value: formatKB(ResourceUsage.swapFree)
|
|
}
|
|
ResourceItem {
|
|
icon: "empty_dashboard"
|
|
label: Translation.tr("Total:")
|
|
value: formatKB(ResourceUsage.swapTotal)
|
|
}
|
|
}
|
|
}
|
|
|
|
Column {
|
|
anchors.top: parent.top
|
|
spacing: 8
|
|
|
|
ResourceHeaderItem {
|
|
icon: "planner_review"
|
|
label: "CPU"
|
|
}
|
|
Column {
|
|
spacing: 4
|
|
ResourceItem {
|
|
icon: "bolt"
|
|
label: Translation.tr("Load:")
|
|
value: (ResourceUsage.cpuUsage > 0.8 ? Translation.tr("High") : ResourceUsage.cpuUsage > 0.4 ? Translation.tr("Medium") : Translation.tr("Low")) + ` (${Math.round(ResourceUsage.cpuUsage * 100)}%)`
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|