// An enum setting, bound to a schema key by name. // // ChoiceRow { setting: "vrrPolicy" } // // The options are the schema's, so a row can never offer a value the store // would reject. Rendered as a segmented control rather than a dropdown: every // choice here has two or three options, and showing them all is both faster to // use and self-documenting. import QtQuick import qs.config import qs.services SettingRow { id: root required property string setting readonly property var spec: PreferenceSchema.spec(root.setting) readonly property var options: root.spec && root.spec.options ? root.spec.options : [] readonly property var current: DesktopPreferences.get(root.setting) label: root.spec ? root.spec.label : root.setting detail: root.spec ? root.spec.detail : "" controlWidth: Math.max(120, root.options.length * 92) Rectangle { anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter implicitWidth: segments.implicitWidth + 4 implicitHeight: 30 radius: 9 color: Theme.alpha(Theme.fg, 0.07) border.width: 0 Row { id: segments anchors.centerIn: parent spacing: 0 Repeater { model: root.options Rectangle { id: segment required property var modelData readonly property bool selected: root.current === segment.modelData.value implicitWidth: Math.max(70, caption.implicitWidth + 24) implicitHeight: 26 radius: 7 border.width: 0 color: "transparent" // The selected segment is the only place the prism appears // in a row: blue leads into orchid, never orchid alone. Rectangle { anchors.fill: parent radius: parent.radius visible: segment.selected border.width: 0 gradient: Gradient { orientation: Gradient.Horizontal GradientStop { position: 0.0; color: Theme.alpha(Theme.accent, 0.30) } GradientStop { position: 1.0; color: Theme.alpha(Theme.accentSecondary, 0.30) } } } Rectangle { anchors.fill: parent radius: parent.radius border.width: 0 visible: !segment.selected && hover.hovered color: Theme.alpha(Theme.fg, 0.06) } Text { id: caption anchors.centerIn: parent text: segment.modelData.label color: segment.selected ? Theme.fg : Theme.fgDim font.family: Theme.fontFamily font.pixelSize: Theme.fontSize font.weight: segment.selected ? Font.DemiBold : Font.Normal } HoverHandler { id: hover } TapHandler { onTapped: SystemSettings.commitPreference(root.setting, segment.modelData.value) } } } } } }