1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-07 22:15:38 -05:00

dankbar: add swap option to dankbar

fixes #556
This commit is contained in:
bbedward
2025-11-04 22:59:47 -05:00
parent 315509f7a4
commit 8d7db49cb0
4 changed files with 131 additions and 3 deletions

View File

@@ -16,7 +16,8 @@ Singleton {
selectedGpuIndex: 0,
pciId: "",
mountPath: "/",
minimumWidth: true
minimumWidth: true,
showSwap: false
}
leftModel.append(dummy)
centerModel.append(dummy)
@@ -37,6 +38,7 @@ Singleton {
var pciId = typeof order[i] === "string" ? undefined : order[i].pciId
var mountPath = typeof order[i] === "string" ? undefined : order[i].mountPath
var minimumWidth = typeof order[i] === "string" ? undefined : order[i].minimumWidth
var showSwap = typeof order[i] === "string" ? undefined : order[i].showSwap
var item = {
widgetId: widgetId,
enabled: enabled
@@ -46,6 +48,7 @@ Singleton {
if (pciId !== undefined) item.pciId = pciId
if (mountPath !== undefined) item.mountPath = mountPath
if (minimumWidth !== undefined) item.minimumWidth = minimumWidth
if (showSwap !== undefined) item.showSwap = showSwap
model.append(item)
}

View File

@@ -14,6 +14,8 @@ BasePill {
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
readonly property real swapUsage: DgopService.totalSwapKB > 0 ? (DgopService.usedSwapKB / DgopService.totalSwapKB) * 100 : 0
Component.onCompleted: {
DgopService.addRef(["memory"]);
@@ -62,6 +64,14 @@ BasePill {
color: Theme.surfaceText
anchors.horizontalCenter: parent.horizontalCenter
}
StyledText {
visible: root.showSwap && DgopService.totalSwapKB > 0
text: root.swapUsage.toFixed(0)
font.pixelSize: Theme.barTextSize(root.barThickness)
color: Theme.surfaceVariantText
anchors.horizontalCenter: parent.horizontalCenter
}
}
Row {
@@ -93,18 +103,31 @@ BasePill {
return "--%";
}
return DgopService.memoryUsage.toFixed(0) + "%";
let 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)
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignLeft
elide: Text.ElideNone
wrapMode: Text.NoWrap
StyledTextMetrics {
id: ramBaseline
font.pixelSize: Theme.barTextSize(root.barThickness)
text: "100%"
text: {
if (!root.showSwap) {
return "100%";
}
if (root.swapUsage < 10) {
return "100% · 0%";
}
return "100% · 100%";
}
}
width: root.minimumWidth ? Math.max(ramBaseline.width, paintedWidth) : paintedWidth

View File

@@ -541,6 +541,58 @@ Item {
newWidget.pciId = widget.pciId
if (widget.mountPath !== undefined)
newWidget.mountPath = widget.mountPath
if (widget.showSwap !== undefined)
newWidget.showSwap = widget.showSwap
if (widget.id === "controlCenterButton") {
newWidget.showNetworkIcon = widget.showNetworkIcon !== undefined ? widget.showNetworkIcon : true
newWidget.showBluetoothIcon = widget.showBluetoothIcon !== undefined ? widget.showBluetoothIcon : true
newWidget.showAudioIcon = widget.showAudioIcon !== undefined ? widget.showAudioIcon : true
}
widgets[widgetIndex] = newWidget
}
}
if (sectionId === "left")
SettingsData.setDankBarLeftWidgets(widgets)
else if (sectionId === "center")
SettingsData.setDankBarCenterWidgets(widgets)
else if (sectionId === "right")
SettingsData.setDankBarRightWidgets(widgets)
}
function handleShowSwapChanged(sectionId, widgetIndex, enabled) {
var widgets = []
if (sectionId === "left")
widgets = SettingsData.dankBarLeftWidgets.slice()
else if (sectionId === "center")
widgets = SettingsData.dankBarCenterWidgets.slice()
else if (sectionId === "right")
widgets = SettingsData.dankBarRightWidgets.slice()
if (widgetIndex >= 0 && widgetIndex < widgets.length) {
var widget = widgets[widgetIndex]
if (typeof widget === "string") {
widgets[widgetIndex] = {
"id": widget,
"enabled": true,
"showSwap": enabled
}
} else {
var newWidget = {
"id": widget.id,
"enabled": widget.enabled,
"showSwap": enabled
}
if (widget.size !== undefined)
newWidget.size = widget.size
if (widget.selectedGpuIndex !== undefined)
newWidget.selectedGpuIndex = widget.selectedGpuIndex
if (widget.pciId !== undefined)
newWidget.pciId = widget.pciId
if (widget.mountPath !== undefined)
newWidget.mountPath = widget.mountPath
if (widget.minimumWidth !== undefined)
newWidget.minimumWidth = widget.minimumWidth
if (widget.id === "controlCenterButton") {
newWidget.showNetworkIcon = widget.showNetworkIcon !== undefined ? widget.showNetworkIcon : true
newWidget.showBluetoothIcon = widget.showBluetoothIcon !== undefined ? widget.showBluetoothIcon : true
@@ -582,6 +634,7 @@ Item {
var widgetShowBluetoothIcon = typeof widget === "string" ? undefined : widget.showBluetoothIcon
var widgetShowAudioIcon = typeof widget === "string" ? undefined : widget.showAudioIcon
var widgetMinimumWidth = typeof widget === "string" ? undefined : widget.minimumWidth
var widgetShowSwap = typeof widget === "string" ? undefined : widget.showSwap
var widgetDef = baseWidgetDefinitions.find(w => {
return w.id === widgetId
})
@@ -604,6 +657,8 @@ Item {
item.showAudioIcon = widgetShowAudioIcon
if (widgetMinimumWidth !== undefined)
item.minimumWidth = widgetMinimumWidth
if (widgetShowSwap !== undefined)
item.showSwap = widgetShowSwap
widgets.push(item)
}
@@ -1802,6 +1857,10 @@ Item {
dankBarTab.handleMinimumWidthChanged(
sectionId, widgetIndex, enabled)
}
onShowSwapChanged: (sectionId, widgetIndex, enabled) => {
dankBarTab.handleShowSwapChanged(
sectionId, widgetIndex, enabled)
}
}
}
@@ -1881,6 +1940,10 @@ Item {
dankBarTab.handleMinimumWidthChanged(
sectionId, widgetIndex, enabled)
}
onShowSwapChanged: (sectionId, widgetIndex, enabled) => {
dankBarTab.handleShowSwapChanged(
sectionId, widgetIndex, enabled)
}
}
}
@@ -1960,6 +2023,10 @@ Item {
dankBarTab.handleMinimumWidthChanged(
sectionId, widgetIndex, enabled)
}
onShowSwapChanged: (sectionId, widgetIndex, enabled) => {
dankBarTab.handleShowSwapChanged(
sectionId, widgetIndex, enabled)
}
}
}
}

View File

@@ -23,6 +23,7 @@ Column {
signal diskMountSelectionChanged(string sectionId, int widgetIndex, string mountPath)
signal controlCenterSettingChanged(string sectionId, int widgetIndex, string settingName, bool value)
signal minimumWidthChanged(string sectionId, int widgetIndex, bool enabled)
signal showSwapChanged(string sectionId, int widgetIndex, bool enabled)
width: parent.width
height: implicitHeight
@@ -315,6 +316,34 @@ Column {
}
}
DankActionButton {
id: showSwapButton
buttonSize: 28
visible: modelData.id === "memUsage"
iconName: "swap_horiz"
iconSize: 16
iconColor: (modelData.showSwap !== undefined ? modelData.showSwap : false) ? Theme.primary : Theme.outline
onClicked: {
var currentEnabled = modelData.showSwap !== undefined ? modelData.showSwap : false
root.showSwapChanged(root.sectionId, index, !currentEnabled)
}
onEntered: {
showSwapTooltipLoader.active = true
if (showSwapTooltipLoader.item) {
var currentEnabled = modelData.showSwap !== undefined ? modelData.showSwap : false
const tooltipText = currentEnabled ? "Hide Swap" : "Show Swap"
const p = showSwapButton.mapToItem(null, showSwapButton.width / 2, 0)
showSwapTooltipLoader.item.show(tooltipText, p.x, p.y - 40, null)
}
}
onExited: {
if (showSwapTooltipLoader.item) {
showSwapTooltipLoader.item.hide()
}
showSwapTooltipLoader.active = false
}
}
Row {
spacing: Theme.spacingXS
visible: modelData.id === "clock"
@@ -974,4 +1003,10 @@ Column {
active: false
sourceComponent: DankTooltip {}
}
Loader {
id: showSwapTooltipLoader
active: false
sourceComponent: DankTooltip {}
}
}