summaryrefslogtreecommitdiffstats
path: root/ControlsOptions.qml
blob: c63455f6db79b46492fc6f615bcee9634fa0e7c7 (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
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Qt.labs.qmlmodels

GroupBox {
    implicitWidth: parent.width
    implicitHeight: 180
    title: "Controls to generate"

    ScrollView {
        anchors.fill: parent
        TableView {
            id: tableView
            clip: true
            model: TableModel {
                id: tableModel
                TableModelColumn { display: "selected" }
                TableModelColumn { display: "control" }
                Component.onCompleted: {
                    let availableControls = bridge.availableControls()
                    let selectedControls = bridge.selectedControls()
                    let allSelected = selectedControls.length === availableControls.length
                    appendRow({ control: "All", selected: allSelected })
                    for (let i in availableControls) {
                        let name = availableControls[i]
                        let selected = selectedControls.includes(name)
                        appendRow({ control: name, selected: selected })
                    }

                }
            }
            delegate: DelegateChooser {
                DelegateChoice {
                    column: 0
                    delegate: CheckBox {
                        checked: model.display
                        onToggled: {
                            model.display = checked
                            if (model.row === 0) {
                                // "All" toggled
                                for (let r = 1; r < tableView.rows; ++r) {
                                    let name = tableModel.getRow(r).control
                                    let index = tableModel.index(r, 0)
                                    tableModel.setData(index, "display", checked)
                                    bridge.selectControl(name, checked)
                                }
                            } else {
                                let name = tableModel.getRow(model.row).control
                                let index = tableModel.index(model.row, 0)
                                tableModel.setData(index, "display", checked)
                                bridge.selectControl(name, checked)
                            }

                            let availableControls = bridge.availableControls()
                            let selectedControls = bridge.selectedControls()
                            let allSelected = selectedControls.length === availableControls.length
                            let allIndex = tableModel.index(0, 0)
                            tableModel.setData(allIndex, "display", allSelected)
                        }
                    }
                }
                DelegateChoice {
                    column: 1
                    delegate: Label {
                        text: model.display
                    }
                }
            }
        }
    }
}