Files
Dotfiles/noctalia/plugins/catwalk/DesktopWidget.qml
T
2026-04-19 17:07:18 +02:00

86 lines
2.5 KiB
QML

import QtQuick
import QtQuick.Layouts
import QtQuick.Effects
import Quickshell
import qs.Commons
import qs.Modules.DesktopWidgets
import qs.Widgets
import qs.Services.System
DraggableDesktopWidget {
id: root
property var pluginApi: null
implicitWidth: 200
implicitHeight: 80
showBackground: !(root.pluginApi?.mainInstance?.hideBackground ?? false)
property int frameIndex: 0
readonly property var icons: root.pluginApi?.mainInstance?.icons || []
property int idleFrameIndex: 0
readonly property var idleIcons: root.pluginApi?.mainInstance?.idleIcons || []
readonly property bool isRunning: root.pluginApi?.mainInstance?.isRunning ?? false
readonly property real cpuUsage: root.pluginApi?.mainInstance?.cpuUsage ?? 0
Timer {
interval: Math.max(30, 200 - root.cpuUsage * 1.7)
running: root.isRunning
repeat: true
onTriggered: {
root.frameIndex = (root.frameIndex + 1) % root.icons.length
}
}
Timer {
interval: 400
running: !root.isRunning
repeat: true
onTriggered: {
root.idleFrameIndex = (root.idleFrameIndex + 1) % root.idleIcons.length
}
}
property url currentIconSource: (root.icons && root.icons.length > 0 && root.idleIcons && root.idleIcons.length > 0)
? (root.isRunning
? Qt.resolvedUrl(root.icons[root.frameIndex % root.icons.length])
: Qt.resolvedUrl(root.idleIcons[root.idleFrameIndex % root.idleIcons.length]))
: ""
RowLayout {
anchors.fill: parent
spacing: 5
Image {
id: iconImage
source: root.currentIconSource
Layout.fillHeight: true
Layout.preferredWidth: height
sourceSize.height: height
sourceSize.width: width
fillMode: Image.PreserveAspectFit
smooth: true
mipmap: false
layer.enabled: true
layer.effect: MultiEffect {
colorization: 1.0
colorizationColor: Settings.data.colorSchemes.darkMode ? "white" : "black"
}
}
Text {
text: Math.round(root.cpuUsage) + "%"
color: Settings.data.colorSchemes.darkMode ? "white" : "black"
font.bold: true
font.pixelSize: 40
Layout.alignment: Qt.AlignVCenter
}
}
}