aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/deckit/DeckItDashboardPage.qml
blob: 060df7e7ebc2d19c9e0f9ba3fdb0ac73ad25eb91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 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"
import "Modules.js" as Modules

// 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: "Dashboard parts" }
    Small { text: "What the Dashboard shows. The OBS and K1C tabs, on the Server page, also feed its running row." }
    Repeater {
        model: Modules.parts(Object.keys(col.def("modules") ?? {}))
        BoolSetting {
            required property string modelData
            store: col.st; section: "modules"; key: modelData; label: Modules.name(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." }
}