diff options
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleWithVariants/README.md')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleWithVariants/README.md | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleWithVariants/README.md b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleWithVariants/README.md new file mode 100644 index 0000000..833572e --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleWithVariants/README.md @@ -0,0 +1,116 @@ +# 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 + +1. **Single Component**: The plugin defines one widget component (`VariantWidget.qml`) +2. **Variant Data**: Each variant stores its configuration in plugin settings +3. **Dynamic Creation**: Variants are created through the plugin's settings UI +4. **Widget ID Format**: Variants use the format `pluginId:variantId` (e.g., `exampleVariants:variant_1234567890`) + +### Widget Properties + +Each variant widget receives: +- `pluginService`: Reference to PluginService +- `pluginId`: 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: +```javascript +{ + 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: + +```qml +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: + +```qml +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: + +```json +{ + "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 plugin +- `getAllPluginVariants()`: Get all variants across all plugins +- `createPluginVariant(pluginId, name, config)`: Create new variant +- `removePluginVariant(pluginId, variantId)`: Delete variant +- `updatePluginVariant(pluginId, variantId, config)`: Update variant +- `getPluginVariantData(pluginId, variantId)`: Get specific variant data + +### Widget Properties + +- `pluginId`: Base plugin identifier +- `variantId`: Variant identifier (null if no variant) +- `variantData`: Variant configuration object +- `pluginService`: PluginService reference |