mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-27 23:12:49 -05:00
desktop widgets: centralize config in desktop widgets tab, variants
always available
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
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: {}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user