mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 21:42:51 -05:00
launcher: Dank Launcher V2 (beta)
- Aggregate plugins/extensions in new "all" tab - Quick tab actions - New tile mode for results - Plugins can enforce/require view mode, or set preferred default - Danksearch under "files" category
This commit is contained in:
113
quickshell/PLUGINS/LauncherImageExample/LauncherImageExample.qml
Normal file
113
quickshell/PLUGINS/LauncherImageExample/LauncherImageExample.qml
Normal file
@@ -0,0 +1,113 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.Services
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
property var pluginService: null
|
||||
property string trigger: "img"
|
||||
|
||||
signal itemsChanged
|
||||
|
||||
readonly property var images: [
|
||||
{
|
||||
name: "DankDash",
|
||||
imageUrl: "https://danklinux.com/img/dankdash.png",
|
||||
comment: "DankMaterialShell Dashboard"
|
||||
},
|
||||
{
|
||||
name: "Control Center",
|
||||
imageUrl: "https://danklinux.com/img/cc.png",
|
||||
comment: "System Control Center"
|
||||
},
|
||||
{
|
||||
name: "Desktop",
|
||||
imageUrl: "https://danklinux.com/img/desktop.png",
|
||||
comment: "Desktop Environment"
|
||||
},
|
||||
{
|
||||
name: "Search",
|
||||
imageUrl: "https://danklinux.com/img/dsearch.png",
|
||||
comment: "Application Search"
|
||||
},
|
||||
{
|
||||
name: "Theme Registry",
|
||||
imageUrl: "https://danklinux.com/img/blog/v1.2/themeregistry.png",
|
||||
comment: "Theme Registry Browser"
|
||||
},
|
||||
{
|
||||
name: "Monitor Settings",
|
||||
imageUrl: "https://danklinux.com/img/blog/v1.2/monitordark.png",
|
||||
comment: "Display Configuration"
|
||||
}
|
||||
]
|
||||
|
||||
function getItems(query) {
|
||||
const lowerQuery = query ? query.toLowerCase().trim() : "";
|
||||
|
||||
if (lowerQuery.length === 0) {
|
||||
return images.map(img => ({
|
||||
name: img.name,
|
||||
icon: "material:image",
|
||||
comment: img.comment,
|
||||
action: "view:" + img.imageUrl,
|
||||
categories: ["Image Gallery"],
|
||||
imageUrl: img.imageUrl
|
||||
}));
|
||||
}
|
||||
|
||||
return images.filter(img => img.name.toLowerCase().includes(lowerQuery) || img.comment.toLowerCase().includes(lowerQuery)).map(img => ({
|
||||
name: img.name,
|
||||
icon: "material:image",
|
||||
comment: img.comment,
|
||||
action: "view:" + img.imageUrl,
|
||||
categories: ["Image Gallery"],
|
||||
imageUrl: img.imageUrl
|
||||
}));
|
||||
}
|
||||
|
||||
function executeItem(item) {
|
||||
if (!item?.action)
|
||||
return;
|
||||
const actionParts = item.action.split(":");
|
||||
const actionType = actionParts[0];
|
||||
const actionData = actionParts.slice(1).join(":");
|
||||
|
||||
if (actionType === "view") {
|
||||
if (typeof ToastService !== "undefined") {
|
||||
ToastService.showInfo("Image Gallery", "Viewing: " + item.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getContextMenuActions(item) {
|
||||
if (!item)
|
||||
return [];
|
||||
return [
|
||||
{
|
||||
icon: "open_in_new",
|
||||
text: "Open in Browser",
|
||||
action: () => {
|
||||
const url = item.imageUrl || "";
|
||||
if (url) {
|
||||
Qt.openUrlExternally(url);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "content_copy",
|
||||
text: "Copy URL",
|
||||
action: () => {
|
||||
const url = item.imageUrl || "";
|
||||
if (url) {
|
||||
Quickshell.execDetached(["dms", "cl", "copy", url]);
|
||||
if (typeof ToastService !== "undefined") {
|
||||
ToastService.showInfo("Copied", url);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
43
quickshell/PLUGINS/LauncherImageExample/README.md
Normal file
43
quickshell/PLUGINS/LauncherImageExample/README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# LauncherImageExample
|
||||
|
||||
Example launcher plugin demonstrating tile mode with URL-based images.
|
||||
|
||||
## Features
|
||||
|
||||
- **Tile Mode**: Uses `viewMode: "tile"` in plugin.json to display results as image tiles
|
||||
- **Enforced View Mode**: Uses `viewModeEnforced: true` to lock the view to tile mode (users cannot change it)
|
||||
- **URL Images**: Demonstrates using `imageUrl` property for remote images
|
||||
|
||||
## Usage
|
||||
|
||||
1. Open the launcher (DankLauncherV2)
|
||||
2. Type `img` to activate the plugin
|
||||
3. Browse DankMaterialShell screenshots in tile view
|
||||
|
||||
## Plugin Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"viewMode": "tile",
|
||||
"viewModeEnforced": true
|
||||
}
|
||||
```
|
||||
|
||||
- `viewMode`: Sets the default view mode ("list", "grid", or "tile")
|
||||
- `viewModeEnforced`: When true, users cannot switch view modes for this plugin
|
||||
|
||||
## Item Data Structure
|
||||
|
||||
To display images in tile mode, set `imageUrl` directly on the item:
|
||||
|
||||
```javascript
|
||||
{
|
||||
name: "Image Title",
|
||||
icon: "material:image",
|
||||
comment: "Image description",
|
||||
categories: ["Category"],
|
||||
imageUrl: "https://example.com/image.png"
|
||||
}
|
||||
```
|
||||
|
||||
The `imageUrl` property supports remote URLs or local files, use `file://` prefix for local files.
|
||||
14
quickshell/PLUGINS/LauncherImageExample/plugin.json
Normal file
14
quickshell/PLUGINS/LauncherImageExample/plugin.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"id": "launcherImageExample",
|
||||
"name": "Image Gallery Example",
|
||||
"description": "Example launcher plugin demonstrating tile mode with images",
|
||||
"version": "1.0.0",
|
||||
"author": "DMS Team",
|
||||
"icon": "photo_library",
|
||||
"type": "launcher",
|
||||
"trigger": "img",
|
||||
"viewMode": "tile",
|
||||
"viewModeEnforced": true,
|
||||
"component": "./LauncherImageExample.qml",
|
||||
"permissions": []
|
||||
}
|
||||
Reference in New Issue
Block a user