aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/deckit/DeckItDashboardPage.qml
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/deckit/DeckItDashboardPage.qml')
-rw-r--r--desktop/modules/deckit/DeckItDashboardPage.qml82
1 files changed, 82 insertions, 0 deletions
diff --git a/desktop/modules/deckit/DeckItDashboardPage.qml b/desktop/modules/deckit/DeckItDashboardPage.qml
new file mode 100644
index 0000000..658f07b
--- /dev/null
+++ b/desktop/modules/deckit/DeckItDashboardPage.qml
@@ -0,0 +1,82 @@
+// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+import QtQuick
+import "../.."
+import "../qtmaildir"
+
+// deck-it's Dashboard page: its panels, its action icons, the hardware it reads.
+Column {
+ id: col
+ spacing: 6
+ readonly property var st: DeckIt.store
+ function def(section, key) { return col.st.fallback(section, key); }
+
+ // The dashboard's action icons: every id deck-it knows is in the
+ // defaults' list; the file keeps the ones switched on, in that order.
+ readonly property var allActions: col.def("dashboard", "actions") ?? []
+ readonly property var actions: col.st.value("dashboard", "actions") ?? col.allActions
+ function setAction(id, on) {
+ col.st.put("dashboard", "actions",
+ col.allActions.filter(a => a === id ? on : col.actions.includes(a)));
+ }
+
+ Small { visible: DeckIt.defaultsError !== ""; color: Theme.red; text: DeckIt.defaultsError }
+
+ Heading { objectName: "modules/"; text: "Modules" }
+ Small { text: "The dashboard's panels and tabs." }
+ Repeater {
+ model: Object.keys(col.def("modules") ?? {})
+ BoolSetting {
+ required property string modelData
+ store: col.st; section: "modules"; key: modelData; label: modelData
+ fallback: col.def("modules", modelData) ?? true
+ }
+ }
+
+ Heading { objectName: "dashboard/actions"; text: "Dashboard actions" }
+ Small { text: "Icon buttons at the bottom of the tablet's dashboard." }
+ Repeater {
+ model: col.allActions
+ Item {
+ id: act
+ required property string modelData
+ width: col.width
+ height: 34
+ Text {
+ id: actLabel
+ anchors { left: parent.left; verticalCenter: parent.verticalCenter }
+ width: 160
+ text: act.modelData
+ color: Theme.subtext
+ font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
+ }
+ Switch {
+ anchors { left: actLabel.right; leftMargin: 8; verticalCenter: parent.verticalCenter }
+ checked: col.actions.includes(act.modelData)
+ onToggled: on => col.setAction(act.modelData, on)
+ }
+ }
+ }
+
+ Heading { text: "Hardware" }
+ Small { text: "Each is auto, or a fixed value such as wlan0, BAT1 or coretemp." }
+ Setting { store: col.st; section: "hardware"; key: "net"; label: "Network interface"
+ placeholder: col.st.placeholder("hardware", "net") }
+ Setting { store: col.st; section: "hardware"; key: "battery"; label: "Battery"
+ placeholder: col.st.placeholder("hardware", "battery") }
+ Setting { store: col.st; section: "hardware"; key: "cpu_sensor"; label: "CPU sensor"
+ placeholder: col.st.placeholder("hardware", "cpu_sensor") }
+ Setting { store: col.st; section: "hardware"; key: "gpu"; label: "GPU"
+ placeholder: col.st.placeholder("hardware", "gpu"); hint: "auto (Intel xe) or none." }
+ Setting { store: col.st; section: "hardware"; key: "gpu_mem_total"; label: "GPU memory"
+ placeholder: col.st.placeholder("hardware", "gpu_mem_total"); hint: "The xe driver reports no VRAM size: the card's total, like 12G." }
+}