summaryrefslogtreecommitdiff
path: root/Fields/Enum.qml
diff options
context:
space:
mode:
Diffstat (limited to 'Fields/Enum.qml')
-rw-r--r--Fields/Enum.qml69
1 files changed, 35 insertions, 34 deletions
diff --git a/Fields/Enum.qml b/Fields/Enum.qml
index cb49b3b..b594b88 100644
--- a/Fields/Enum.qml
+++ b/Fields/Enum.qml
@@ -5,54 +5,55 @@ import QtQuick.Controls 2.13
import '../util.js' as Util
-Column {
+Flow {
id: control
property var model
- property int index: -1
- readonly property string value: index >= 0 ? model.values[index].name : ''
+ readonly property string value:
+ choices.checkedButton && choices.checkState !== Qt.Unchecked ?
+ choices.checkedButton.name : ''
function set(val) {
- for (var i = 0; i < model.values.length; i++) {
- if (model.values[i].name === val) {
- index = i
- return true
- }
- }
- index = -1
- }
-
- Keys.onPressed: {
- for (var i = 0; i < model.values.length; i++) {
- if (model.values[i].key === event.text) {
- index = (index === i ? -1 : i)
- event.accepted = true
+ 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
}
- Flow {
- spacing: 5
- width: parent.width
+ 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
- ButtonGroup { id: buttons }
+ text: Util.addShortcut(name, modelData.key)
- Repeater {
- model: control.model.values
- delegate: Button {
- ButtonGroup.group: buttons
- checkable: true
- checked: control.index === index
- focusPolicy: Qt.NoFocus
+ ButtonGroup.group: choices
+ checkable: true
+ focusPolicy: Qt.NoFocus
- implicitWidth: implicitContentWidth + leftPadding + rightPadding
- padding: 0
- leftPadding: 5
- rightPadding: leftPadding
+ implicitWidth: implicitContentWidth + leftPadding + rightPadding
+ padding: 0
+ leftPadding: 5
+ rightPadding: leftPadding
- onClicked: control.index = (control.index === index ? -1 : index)
- text: Util.addShortcut(modelData.name, modelData.key)
+ Keys.onPressed: {
+ if (modelData.key === event.text) {
+ checked = !checked
+ event.accepted = true
+ }
}
}
}