mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 04:42:05 -04:00
plugins: add plugin state helpers
This commit is contained in:
263
quickshell/PLUGINS/QuickNotesExample/QuickNotesSettings.qml
Normal file
263
quickshell/PLUGINS/QuickNotesExample/QuickNotesSettings.qml
Normal file
@@ -0,0 +1,263 @@
|
||||
import QtQuick
|
||||
import qs.Widgets
|
||||
|
||||
FocusScope {
|
||||
id: root
|
||||
|
||||
property var pluginService: null
|
||||
|
||||
implicitHeight: settingsColumn.implicitHeight
|
||||
height: implicitHeight
|
||||
|
||||
Column {
|
||||
id: settingsColumn
|
||||
anchors.fill: parent
|
||||
anchors.margins: 16
|
||||
spacing: 16
|
||||
|
||||
Text {
|
||||
text: "Quick Notes Settings"
|
||||
font.pixelSize: 18
|
||||
font.weight: Font.Bold
|
||||
color: "#FFFFFF"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "Demonstrates the plugin state API — notes are stored in a separate state file (quickNotesExample_state.json) rather than plugin_settings.json."
|
||||
font.pixelSize: 14
|
||||
color: "#CCFFFFFF"
|
||||
wrapMode: Text.WordWrap
|
||||
width: parent.width - 32
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width - 32
|
||||
height: 1
|
||||
color: "#30FFFFFF"
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 12
|
||||
width: parent.width - 32
|
||||
|
||||
Text {
|
||||
text: "Trigger Configuration"
|
||||
font.pixelSize: 16
|
||||
font.weight: Font.Medium
|
||||
color: "#FFFFFF"
|
||||
}
|
||||
|
||||
Row {
|
||||
spacing: 12
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
Text {
|
||||
text: "Trigger:"
|
||||
font.pixelSize: 14
|
||||
color: "#FFFFFF"
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
DankTextField {
|
||||
id: triggerField
|
||||
width: 100
|
||||
height: 40
|
||||
text: loadSettings("trigger", "n")
|
||||
placeholderText: "n"
|
||||
backgroundColor: "#30FFFFFF"
|
||||
textColor: "#FFFFFF"
|
||||
|
||||
onTextEdited: {
|
||||
saveSettings("trigger", text.trim() || "n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width - 32
|
||||
height: 1
|
||||
color: "#30FFFFFF"
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 12
|
||||
width: parent.width - 32
|
||||
|
||||
Text {
|
||||
text: "Storage"
|
||||
font.pixelSize: 16
|
||||
font.weight: Font.Medium
|
||||
color: "#FFFFFF"
|
||||
}
|
||||
|
||||
Row {
|
||||
spacing: 12
|
||||
|
||||
Text {
|
||||
text: "Max notes:"
|
||||
font.pixelSize: 14
|
||||
color: "#FFFFFF"
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
DankTextField {
|
||||
id: maxNotesField
|
||||
width: 80
|
||||
height: 40
|
||||
text: loadSettings("maxNotes", 50).toString()
|
||||
placeholderText: "50"
|
||||
backgroundColor: "#30FFFFFF"
|
||||
textColor: "#FFFFFF"
|
||||
|
||||
onTextEdited: {
|
||||
const val = parseInt(text);
|
||||
if (!isNaN(val) && val > 0)
|
||||
saveSettings("maxNotes", val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
text: {
|
||||
const count = loadState("notes", []).length;
|
||||
return "Currently storing " + count + " note(s)";
|
||||
}
|
||||
font.pixelSize: 12
|
||||
color: "#AAFFFFFF"
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: clearRow.implicitWidth + 24
|
||||
height: clearRow.implicitHeight + 16
|
||||
radius: 8
|
||||
color: clearMouseArea.containsMouse ? "#40FF5252" : "#30FF5252"
|
||||
|
||||
Row {
|
||||
id: clearRow
|
||||
anchors.centerIn: parent
|
||||
spacing: 8
|
||||
|
||||
Text {
|
||||
text: "🗑"
|
||||
font.pixelSize: 14
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "Clear all notes"
|
||||
font.pixelSize: 14
|
||||
color: "#FF5252"
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: clearMouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: {
|
||||
if (pluginService) {
|
||||
pluginService.clearPluginState("quickNotesExample");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width - 32
|
||||
height: 1
|
||||
color: "#30FFFFFF"
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 8
|
||||
width: parent.width - 32
|
||||
|
||||
Text {
|
||||
text: "API Usage (for plugin developers):"
|
||||
font.pixelSize: 14
|
||||
font.weight: Font.Medium
|
||||
color: "#FFFFFF"
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 4
|
||||
leftPadding: 16
|
||||
bottomPadding: 24
|
||||
|
||||
Text {
|
||||
text: "• pluginService.savePluginState(id, key, value)"
|
||||
font.pixelSize: 12
|
||||
color: "#CCFFFFFF"
|
||||
font.family: "monospace"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " Writes to ~/.local/state/.../id_state.json"
|
||||
font.pixelSize: 11
|
||||
color: "#AAFFFFFF"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "• pluginService.loadPluginState(id, key, default)"
|
||||
font.pixelSize: 12
|
||||
color: "#CCFFFFFF"
|
||||
font.family: "monospace"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " Reads from the per-plugin state file"
|
||||
font.pixelSize: 11
|
||||
color: "#AAFFFFFF"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "• pluginService.clearPluginState(id)"
|
||||
font.pixelSize: 12
|
||||
color: "#CCFFFFFF"
|
||||
font.family: "monospace"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " Clears all state for a plugin"
|
||||
font.pixelSize: 11
|
||||
color: "#AAFFFFFF"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "• pluginService.removePluginStateKey(id, key)"
|
||||
font.pixelSize: 12
|
||||
color: "#CCFFFFFF"
|
||||
font.family: "monospace"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " Removes a single key from plugin state"
|
||||
font.pixelSize: 11
|
||||
color: "#AAFFFFFF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveSettings(key, value) {
|
||||
if (pluginService)
|
||||
pluginService.savePluginData("quickNotesExample", key, value);
|
||||
}
|
||||
|
||||
function loadSettings(key, defaultValue) {
|
||||
if (pluginService)
|
||||
return pluginService.loadPluginData("quickNotesExample", key, defaultValue);
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
function loadState(key, defaultValue) {
|
||||
if (pluginService)
|
||||
return pluginService.loadPluginState("quickNotesExample", key, defaultValue);
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user