1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-24 21:42:51 -05:00

plugins: support for multiple widgets per-plugin (variants)

This commit is contained in:
bbedward
2025-10-06 12:33:58 -04:00
parent 11a1af89f4
commit 89793d2d62
10 changed files with 676 additions and 14 deletions

View File

@@ -87,8 +87,18 @@ Loader {
}
if (item.pluginService !== undefined) {
var parts = widgetId.split(":")
var pluginId = parts[0]
var variantId = parts.length > 1 ? parts[1] : null
if (item.pluginId !== undefined) {
item.pluginId = widgetId
item.pluginId = pluginId
}
if (item.variantId !== undefined) {
item.variantId = variantId
}
if (item.variantData !== undefined && variantId) {
item.variantData = PluginService.getPluginVariantData(pluginId, variantId)
}
item.pluginService = PluginService
}
@@ -134,8 +144,11 @@ Loader {
return componentMap[widgetId]
}
var parts = widgetId.split(":")
var pluginId = parts[0]
let pluginMap = PluginService.getWidgetComponents()
return pluginMap[widgetId] || null
return pluginMap[pluginId] || null
}
function getWidgetVisible(widgetId, dgopAvailable) {

View File

@@ -34,6 +34,7 @@ Item {
signal ccWidgetExpanded()
property var pluginData: ({})
property var variants: []
readonly property bool isVertical: axis?.isVertical ?? false
readonly property bool hasHorizontalPill: horizontalBarPill !== null
@@ -64,9 +65,32 @@ Item {
function loadPluginData() {
if (!pluginService || !pluginId) {
pluginData = {}
variants = []
return
}
pluginData = SettingsData.getPluginSettingsForPlugin(pluginId)
variants = pluginService.getPluginVariants(pluginId)
}
function createVariant(variantName, variantConfig) {
if (!pluginService || !pluginId) {
return null
}
return pluginService.createPluginVariant(pluginId, variantName, variantConfig)
}
function removeVariant(variantId) {
if (!pluginService || !pluginId) {
return
}
pluginService.removePluginVariant(pluginId, variantId)
}
function updateVariant(variantId, variantConfig) {
if (!pluginService || !pluginId) {
return
}
pluginService.updatePluginVariant(pluginId, variantId, variantConfig)
}
width: isVertical ? (hasVerticalPill ? verticalPill.width : 0) : (hasHorizontalPill ? horizontalPill.width : 0)

View File

@@ -12,13 +12,20 @@ Item {
signal settingChanged()
property var variants: []
implicitHeight: hasPermission ? settingsColumn.implicitHeight : errorText.implicitHeight
height: implicitHeight
readonly property bool hasPermission: pluginService && pluginService.hasPermission ? pluginService.hasPermission(pluginId, "settings_write") : true
Component.onCompleted: {
loadVariants()
}
onPluginServiceChanged: {
if (pluginService) {
loadVariants()
for (let i = 0; i < settingsColumn.children.length; i++) {
const child = settingsColumn.children[i]
if (child.loadValue) {
@@ -28,6 +35,44 @@ Item {
}
}
Connections {
target: pluginService
function onPluginDataChanged(changedPluginId) {
if (changedPluginId === pluginId) {
loadVariants()
}
}
}
function loadVariants() {
if (!pluginService || !pluginId) {
variants = []
return
}
variants = pluginService.getPluginVariants(pluginId)
}
function createVariant(variantName, variantConfig) {
if (!pluginService || !pluginId) {
return null
}
return pluginService.createPluginVariant(pluginId, variantName, variantConfig)
}
function removeVariant(variantId) {
if (!pluginService || !pluginId) {
return
}
pluginService.removePluginVariant(pluginId, variantId)
}
function updateVariant(variantId, variantConfig) {
if (!pluginService || !pluginId) {
return
}
pluginService.updatePluginVariant(pluginId, variantId, variantConfig)
}
function saveValue(key, value) {
if (!pluginService) {
return

View File

@@ -190,18 +190,16 @@ Item {
"enabled": SystemUpdateService.distributionSupported
}]
// Add all available plugins (loaded and unloaded)
var allPlugins = PluginService.getAvailablePlugins()
for (var i = 0; i < allPlugins.length; i++) {
var plugin = allPlugins[i]
var isLoaded = PluginService.isPluginLoaded(plugin.id)
var allPluginVariants = PluginService.getAllPluginVariants()
for (var i = 0; i < allPluginVariants.length; i++) {
var variant = allPluginVariants[i]
coreWidgets.push({
"id": plugin.id,
"text": plugin.name,
"description": plugin.description || "Plugin widget",
"icon": plugin.icon || "extension",
"enabled": isLoaded,
"warning": !isLoaded ? "Plugin is disabled - enable in Plugins settings to use" : undefined
"id": variant.fullId,
"text": variant.name,
"description": variant.description,
"icon": variant.icon,
"enabled": variant.loaded,
"warning": !variant.loaded ? "Plugin is disabled - enable in Plugins settings to use" : undefined
})
}

View File

@@ -378,6 +378,7 @@ Item {
anchors.margins: Theme.spacingL
active: pluginDelegate.isExpanded && pluginDelegate.hasSettings && PluginService.isPluginLoaded(pluginDelegate.pluginId)
asynchronous: false
focus: true
source: {
if (active && pluginDelegate.pluginSettingsPath) {
@@ -394,9 +395,13 @@ Item {
if (item && typeof PluginService !== "undefined") {
item.pluginService = PluginService
}
if (item && typeof PopoutService !== "undefined") {
if (item && typeof PopoutService !== "undefined" && "popoutService" in item) {
item.popoutService = PopoutService
}
if (item) {
item.focus = true
item.forceActiveFocus()
}
}
}