feat(properties): audit editable vs read-only across all entities

Reclassify every property row to match standard palette behaviour: a row
is editable only when its value maps directly to a stored field AND its
apply_geom_prop handler is wired; computed/derived/count/handle/
cross-object values stay read-only.

Newly editable (all apply-wired): attribute tag/prompt; ellipse major
radius; hatch Double; lwpolyline closed/linetype-gen; mline style;
multileader annotative/landing/background-fill; polyline 2D+3D vertex
coords/segment widths/linetype-gen; shape style; spline control/fit
point coords, weight, fit tolerance, tangents; table break-option flags;
text alignment point, upside-down, backward; underlay display flags.

Corrections: spline Degree -> read-only (editing desynced the knot
vector); removed a duplicate leader "Arrowhead" row.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hakan Seven 2026-07-03 08:06:00 +03:00
commit 4d2471cafd
13 changed files with 464 additions and 143 deletions

View file

@ -149,7 +149,14 @@ fn properties(h: &Hatch) -> Vec<PropSection> {
if h.is_associative { "Yes" } else { "No" },
),
ro("Layer override", "layer_override", String::new()),
ro("Double", "double", if h.is_double { "Yes" } else { "No" }),
Property {
label: "Double".into(),
field: "double",
value: PropValue::BoolToggle {
field: "double",
value: h.is_double,
},
},
ro(
"Spacing",
"spacing",
@ -186,6 +193,14 @@ fn properties(h: &Hatch) -> Vec<PropSection> {
}
fn apply_geom_prop(h: &mut Hatch, field: &str, value: &str) {
if field == "double" {
h.is_double = if value == "toggle" {
!h.is_double
} else {
value == "true"
};
return;
}
let Some(v) = parse_f64(value) else {
return;
};