mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
Example with Variants Plugin
This plugin demonstrates the dynamic variant system for DankMaterialShell plugins.
What are Variants?
Variants allow a single plugin to create multiple widget instances with different configurations. Each variant appears as a separate widget option in the Bar Settings "Add Widget" menu.
How It Works
Plugin Architecture
- Single Component: The plugin defines one widget component (
VariantWidget.qml) - Variant Data: Each variant stores its configuration in plugin settings
- Dynamic Creation: Variants are created through the plugin's settings UI
- Widget ID Format: Variants use the format
pluginId:variantId(e.g.,exampleVariants:variant_1234567890)
Widget Properties
Each variant widget receives:
pluginService: Reference to PluginServicepluginId: The base plugin ID (e.g., "exampleVariants")variantId: The specific variant ID (e.g., "variant_1234567890")variantData: The variant's configuration object
Variant Configuration
This example stores:
{
id: "variant_1234567890",
name: "My Variant",
text: "Display Text",
icon: "star",
color: "#FF5722"
}
Creating Your Own Variant Plugin
1. Widget Component
Create a widget that accepts variant data:
Rectangle {
property var pluginService: null
property string pluginId: ""
property string variantId: ""
property var variantData: null
// Use variantData for configuration
property string displayText: variantData?.text || "Default"
}
2. Settings Component
Provide UI to manage variants:
FocusScope {
property var pluginService: null
// Create variant
pluginService.createPluginVariant(pluginId, variantName, variantConfig)
// Remove variant
pluginService.removePluginVariant(pluginId, variantId)
// Update variant
pluginService.updatePluginVariant(pluginId, variantId, variantConfig)
// Get all variants
var variants = pluginService.getPluginVariants(pluginId)
}
3. Plugin Manifest
Standard plugin manifest - no special configuration needed:
{
"id": "yourPlugin",
"name": "Your Plugin",
"component": "./Widget.qml",
"settings": "./Settings.qml"
}
Use Cases
- Script Runner: Multiple variants running different scripts
- System Monitors: Different monitoring targets (CPU, GPU, Network)
- Quick Launchers: Different apps or commands per variant
- Custom Indicators: Different data sources or APIs
- Time Zones: Multiple clocks for different time zones
API Reference
PluginService Functions
getPluginVariants(pluginId): Get all variants for a plugingetAllPluginVariants(): Get all variants across all pluginscreatePluginVariant(pluginId, name, config): Create new variantremovePluginVariant(pluginId, variantId): Delete variantupdatePluginVariant(pluginId, variantId, config): Update variantgetPluginVariantData(pluginId, variantId): Get specific variant data
Widget Properties
pluginId: Base plugin identifiervariantId: Variant identifier (null if no variant)variantData: Variant configuration objectpluginService: PluginService reference