86 lines
2.5 KiB
QML
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
|
|
}
|
|
}
|
|
}
|