mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 13:32:50 -05:00
111 lines
3.7 KiB
QML
111 lines
3.7 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import qs.Common
|
|
import qs.Services
|
|
import qs.Modules.Plugins
|
|
import qs.Modules.BuiltinDesktopPlugins
|
|
|
|
Variants {
|
|
id: root
|
|
model: Quickshell.screens
|
|
|
|
Component.onCompleted: Qt.callLater(autoEnablePluginsForInstances)
|
|
|
|
function autoEnablePluginsForInstances() {
|
|
const instances = SettingsData.desktopWidgetInstances || [];
|
|
const pluginTypes = new Set();
|
|
|
|
for (const inst of instances) {
|
|
if (!inst.enabled)
|
|
continue;
|
|
if (inst.widgetType === "desktopClock" || inst.widgetType === "systemMonitor")
|
|
continue;
|
|
pluginTypes.add(inst.widgetType);
|
|
}
|
|
|
|
for (const pluginId of pluginTypes) {
|
|
if (PluginService.isPluginLoaded(pluginId))
|
|
continue;
|
|
if (!PluginService.availablePlugins[pluginId])
|
|
continue;
|
|
PluginService.enablePlugin(pluginId);
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: PluginService
|
|
function onPluginListUpdated() {
|
|
Qt.callLater(root.autoEnablePluginsForInstances);
|
|
}
|
|
}
|
|
|
|
QtObject {
|
|
id: screenDelegate
|
|
|
|
required property var modelData
|
|
|
|
readonly property var screen: modelData
|
|
readonly property string screenKey: SettingsData.getScreenDisplayName(screen)
|
|
|
|
function shouldShowOnScreen(prefs) {
|
|
if (!Array.isArray(prefs) || prefs.length === 0 || prefs.includes("all"))
|
|
return true;
|
|
return prefs.some(p => {
|
|
if (typeof p === "string")
|
|
return p === screenKey || p === modelData.name;
|
|
return p?.name === modelData.name || p === screenKey;
|
|
});
|
|
}
|
|
|
|
property Component clockComponent: Component {
|
|
DesktopClockWidget {}
|
|
}
|
|
|
|
property Component systemMonitorComponent: Component {
|
|
SystemMonitorWidget {}
|
|
}
|
|
|
|
property Instantiator widgetInstantiator: Instantiator {
|
|
model: ScriptModel {
|
|
objectProp: "id"
|
|
values: SettingsData.desktopWidgetInstances
|
|
}
|
|
|
|
DesktopPluginWrapper {
|
|
required property var modelData
|
|
required property int index
|
|
|
|
readonly property string instanceIdRef: modelData.id
|
|
readonly property var liveInstanceData: {
|
|
const instances = SettingsData.desktopWidgetInstances || [];
|
|
return instances.find(inst => inst.id === instanceIdRef) ?? modelData;
|
|
}
|
|
|
|
readonly property bool shouldBeVisible: {
|
|
if (!liveInstanceData.enabled)
|
|
return false;
|
|
const prefs = liveInstanceData.config?.displayPreferences ?? ["all"];
|
|
return screenDelegate.shouldShowOnScreen(prefs);
|
|
}
|
|
|
|
pluginId: liveInstanceData.widgetType
|
|
instanceId: instanceIdRef
|
|
instanceData: liveInstanceData
|
|
builtinComponent: {
|
|
switch (liveInstanceData.widgetType) {
|
|
case "desktopClock":
|
|
return screenDelegate.clockComponent;
|
|
case "systemMonitor":
|
|
return screenDelegate.systemMonitorComponent;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
pluginService: (liveInstanceData.widgetType !== "desktopClock" && liveInstanceData.widgetType !== "systemMonitor") ? PluginService : null
|
|
screen: screenDelegate.screen
|
|
widgetEnabled: shouldBeVisible
|
|
}
|
|
}
|
|
}
|
|
}
|