Use comma as a decimal separator for SpinBox

Add support for comma ',' as a decimal separator for SpinBox. This implementation allows for expressions like `pow(2, 3)` to be used as well. If you use comma to separate decimals, use semicolon `;` to separate function parameters.
Change EditorSpinSlider behavior to match.
This commit is contained in:
aXu-AP
2023-08-16 21:18:22 +03:00
parent fe5b1c8d49
commit 4d3dc0e944
2 changed files with 30 additions and 11 deletions

View File

@@ -534,17 +534,24 @@ String EditorSpinSlider::get_suffix() const {
}
void EditorSpinSlider::_evaluate_input_text() {
// Replace comma with dot to support it as decimal separator (GH-6028).
// This prevents using functions like `pow()`, but using functions
// in EditorSpinSlider is a barely known (and barely used) feature.
// Instead, we'd rather support German/French keyboard layouts out of the box.
const String text = TS->parse_number(value_input->get_text().replace(",", "."));
Ref<Expression> expr;
expr.instantiate();
// Convert commas ',' to dots '.' for French/German etc. keyboard layouts.
String text = value_input->get_text().replace(",", ".");
text = text.replace(";", ",");
text = TS->parse_number(text);
Error err = expr->parse(text);
if (err != OK) {
return;
// If the expression failed try without converting commas to dots - they might have been for parameter separation.
text = value_input->get_text();
text = TS->parse_number(text);
err = expr->parse(text);
if (err != OK) {
return;
}
}
Variant v = expr->execute(Array(), nullptr, false, true);