summaryrefslogtreecommitdiff
path: root/Fields/Enum.qml
blob: b594b885e685327a74993c8919f2a724cf435231 (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
// SPDX-License-Identifier: Unlicense

import QtQuick 2.12
import QtQuick.Controls 2.13

import '../util.js' as Util

Flow {
    id: control

    property var model
    readonly property string value:
        choices.checkedButton && choices.checkState !== Qt.Unchecked ?
            choices.checkedButton.name : ''

    function set(val) {
        choices.checkState = Qt.Unchecked
        for (var i = 0; i < buttons.count; i++) {
            if (buttons.itemAt(i).name === val) {
                buttons.itemAt(i).checked = true
                break
            }
        }
        return value === val
    }

    spacing: 5

    Keys.forwardTo: Array.from({ length: buttons.count }, (_, i) => buttons.itemAt(i))

    ButtonGroup { id: choices }
    Repeater {
        id: buttons

        model: control.model.values
        delegate: Button {
            required property int index
            required property var modelData
            readonly property string name: modelData.name

            text: Util.addShortcut(name, modelData.key)

            ButtonGroup.group: choices
            checkable: true
            focusPolicy: Qt.NoFocus

            implicitWidth: implicitContentWidth + leftPadding + rightPadding
            padding: 0
            leftPadding: 5
            rightPadding: leftPadding

            Keys.onPressed: {
                if (modelData.key === event.text) {
                    checked = !checked
                    event.accepted = true
                }
            }
        }
    }
}