aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/qtmaildir/ChoiceSetting.qml
blob: 01de9dade2aeb3347296f0c1ddffd4b1e4f0c28f (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
// 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 "../.."

// A key with a few allowed values, as chips. The first chip, "Default",
// unsets the key; the default it stands for is in its label.
Column {
    id: s
    property string section
    property string key
    property string label
    // [{value, label}]
    property var options: []
    property string fallbackLabel: "Default"
    objectName: section + "/" + key
    width: parent ? parent.width : 0

    readonly property string value: Qtm.get(s.section, s.key) ?? ""

    Item {
        width: s.width
        height: Math.max(34, chips.height + 6)
        Text {
            id: lbl
            anchors { left: parent.left; verticalCenter: parent.verticalCenter }
            width: 160
            elide: Text.ElideRight
            text: s.label
            color: Theme.subtext
            font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
        }
        Flow {
            id: chips
            anchors { left: lbl.right; leftMargin: 8; right: parent.right; verticalCenter: parent.verticalCenter }
            spacing: 6
            Repeater {
                model: [{ value: "", label: s.fallbackLabel }].concat(s.options)
                Rectangle {
                    id: chip
                    required property var modelData
                    readonly property bool on: s.value === modelData.value
                    implicitWidth: chipText.implicitWidth + 20
                    implicitHeight: 26
                    radius: 13
                    color: on ? Qt.alpha(Theme.accent, 0.85)
                         : chipArea.containsMouse ? Qt.alpha(Theme.accent, 0.22) : Qt.alpha(Theme.surface, 0.8)
                    Text {
                        id: chipText
                        anchors.centerIn: parent
                        text: chip.modelData.label
                        color: chip.on ? Theme.base : Theme.text
                        font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 4 }
                    }
                    MouseArea {
                        id: chipArea
                        anchors.fill: parent
                        hoverEnabled: true
                        cursorShape: Qt.PointingHandCursor
                        onClicked: Qtm.set(s.section, s.key, chip.modelData.value === "" ? null : chip.modelData.value)
                    }
                }
            }
        }
    }
}