// Copyright (C) 2026 Danilo M. // // 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) } } } } } }