fix(properties): preserve literal text

Separate numeric fields from names and content so only numeric property values are evaluated as expressions.

Refs #809
This commit is contained in:
Hakan Seven 2026-08-20 14:58:12 +03:00
commit 5e62da464e
15 changed files with 107 additions and 31 deletions

View file

@ -86,7 +86,7 @@ pub fn general_section(entity: &EntityType) -> PropSection {
Property {
label: t!("Hyperlink").into_owned(),
field: "hyperlink",
value: PropValue::EditText(hyperlink),
value: PropValue::PlainText(hyperlink),
},
],
};

View file

@ -8,8 +8,10 @@ use glam::DVec3;
pub enum PropValue {
/// Read-only display text.
ReadOnly(String),
/// Editable numeric/text field.
/// Editable numeric field.
EditText(String),
/// Editable text that must not be expression-evaluated.
PlainText(String),
/// Layer name — rendered as a combo_box.
LayerChoice(String),
/// Generic string choice rendered as a combo_box.

View file

@ -417,6 +417,7 @@ impl Scene {
])
} else {
match prop.value {
PropValue::PlainText(_) => QSelectValueEditor::Text,
PropValue::ReadOnly(ref value)
| PropValue::EditText(ref value) => {
let field = prop.field.to_ascii_lowercase();
@ -614,7 +615,9 @@ impl Scene {
.flat_map(|s| s.props)
.find(|p| p.field == field)?;
Some(match prop.value {
PropValue::ReadOnly(s) | PropValue::EditText(s) => s,
PropValue::ReadOnly(s)
| PropValue::EditText(s)
| PropValue::PlainText(s) => s,
PropValue::LayerChoice(s) => s,
PropValue::Choice { selected, .. } => selected,
PropValue::EditChoice { value, .. } => value,