Rebuild Displays around the canvas, and let the transaction keep color

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-24 10:44:11 -04:00
parent 1f694b00b6
commit 9bc68ba358
29 changed files with 3065 additions and 388 deletions
@@ -0,0 +1,49 @@
// A choice with more options, or wider labels, than a segmented control can
// carry: collapsed to its current value, expanding to the list.
//
// ChoiceRow puts every option on one line, which works for two or three short
// ones and falls apart at four with sentences under them -- and on this page
// two cards sit side by side, so a row has half the width it used to.
//
// Not schema-bound. Some of these choices are Panama settings and some are
// display state that has to go through a keep-or-revert transaction, so the
// caller says what to do with the value rather than this writing it.
import QtQuick
import qs.config
PickerRow {
id: root
// [{ value, label, detail }]
property var options: []
property var current: null
signal picked(var value)
readonly property var currentOption:
root.options.find(option => option.value === root.current) ?? null
value: root.currentOption ? String(root.currentOption.label ?? "") : ""
Repeater {
model: root.options
TextRow {
required property var modelData
required property int index
width: parent.width
label: String(modelData.label ?? "")
detail: String(modelData.detail ?? "")
value: modelData.value === root.current ? "Current" : ""
controlWidth: 90
divider: index < root.options.length - 1
activatable: modelData.value !== root.current
onActivated: {
root.picked(modelData.value);
root.collapse();
}
}
}
}