mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-25 14:02:53 -05:00
138 lines
4.2 KiB
QML
138 lines
4.2 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import qs.Common
|
|
import qs.Services
|
|
import qs.Widgets
|
|
import qs.Modules.Settings.Widgets
|
|
|
|
Column {
|
|
id: root
|
|
|
|
property string instanceId: ""
|
|
property var instanceData: null
|
|
property string widgetType: ""
|
|
property var widgetDef: null
|
|
|
|
readonly property var cfg: instanceData?.config ?? {}
|
|
readonly property string settingsPath: widgetDef?.settingsComponent ?? ""
|
|
|
|
function updateConfig(key, value) {
|
|
if (!instanceId)
|
|
return;
|
|
var updates = {};
|
|
updates[key] = value;
|
|
SettingsData.updateDesktopWidgetInstanceConfig(instanceId, updates);
|
|
}
|
|
|
|
QtObject {
|
|
id: instanceScopedPluginService
|
|
|
|
readonly property var availablePlugins: PluginService.availablePlugins
|
|
readonly property var loadedPlugins: PluginService.loadedPlugins
|
|
readonly property var pluginDesktopComponents: PluginService.pluginDesktopComponents
|
|
|
|
signal pluginDataChanged(string pluginId)
|
|
signal pluginLoaded(string pluginId)
|
|
signal pluginUnloaded(string pluginId)
|
|
|
|
function loadPluginData(pluginId, key, defaultValue) {
|
|
const cfg = root.instanceData?.config;
|
|
if (cfg && key in cfg)
|
|
return cfg[key];
|
|
return SettingsData.getPluginSetting(root.widgetType, key, defaultValue);
|
|
}
|
|
|
|
function savePluginData(pluginId, key, value) {
|
|
root.updateConfig(key, value);
|
|
Qt.callLater(() => pluginDataChanged(root.widgetType));
|
|
return true;
|
|
}
|
|
|
|
function getPluginVariants(pluginId) {
|
|
return PluginService.getPluginVariants(pluginId);
|
|
}
|
|
|
|
function isPluginLoaded(pluginId) {
|
|
return PluginService.isPluginLoaded(pluginId);
|
|
}
|
|
}
|
|
|
|
width: parent?.width ?? 400
|
|
spacing: 0
|
|
|
|
Loader {
|
|
id: pluginSettingsLoader
|
|
width: parent.width
|
|
active: root.settingsPath !== ""
|
|
|
|
source: root.settingsPath
|
|
|
|
onLoaded: {
|
|
if (!item)
|
|
return;
|
|
if (item.instanceId !== undefined)
|
|
item.instanceId = root.instanceId;
|
|
if (item.instanceData !== undefined)
|
|
item.instanceData = Qt.binding(() => root.instanceData);
|
|
if (item.pluginService !== undefined)
|
|
item.pluginService = instanceScopedPluginService;
|
|
if (item.reloadChildValues)
|
|
Qt.callLater(item.reloadChildValues);
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: 0
|
|
visible: root.settingsPath === ""
|
|
|
|
SettingsDisplayPicker {
|
|
displayPreferences: cfg.displayPreferences ?? ["all"]
|
|
onPreferencesChanged: prefs => root.updateConfig("displayPreferences", prefs)
|
|
}
|
|
|
|
SettingsDivider {}
|
|
|
|
Item {
|
|
width: parent.width
|
|
height: resetRow.height + Theme.spacingM * 2
|
|
|
|
Row {
|
|
id: resetRow
|
|
x: Theme.spacingM
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
spacing: Theme.spacingM
|
|
|
|
DankButton {
|
|
text: I18n.tr("Reset Position")
|
|
backgroundColor: Theme.surfaceHover
|
|
textColor: Theme.surfaceText
|
|
buttonHeight: 36
|
|
onClicked: {
|
|
if (!root.instanceId)
|
|
return;
|
|
SettingsData.updateDesktopWidgetInstance(root.instanceId, {
|
|
positions: {}
|
|
});
|
|
}
|
|
}
|
|
|
|
DankButton {
|
|
text: I18n.tr("Reset Size")
|
|
backgroundColor: Theme.surfaceHover
|
|
textColor: Theme.surfaceText
|
|
buttonHeight: 36
|
|
onClicked: {
|
|
if (!root.instanceId)
|
|
return;
|
|
SettingsData.updateDesktopWidgetInstance(root.instanceId, {
|
|
positions: {}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|