From fa300f6e4c6e366183d80884199b33cb71db9a68 Mon Sep 17 00:00:00 2001 From: GenevensiS <66968533+G-e-n-e-v-e-n-s-i-S@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:49:10 +0200 Subject: [PATCH] allow additional individual choices in slider fields --- src/data/field/slider.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/data/field/slider.cpp b/src/data/field/slider.cpp index 0fafc70e..7a03638a 100644 --- a/src/data/field/slider.cpp +++ b/src/data/field/slider.cpp @@ -25,6 +25,7 @@ IMPLEMENT_REFLECTION(SliderField) { REFLECT_BASE(Field); // NOTE: don't reflect as a ChoiceField REFLECT(script); REFLECT_N("default", default_script); + REFLECT_N("choices", choices->choices); REFLECT(initial); REFLECT(minimum); REFLECT(maximum); @@ -34,6 +35,8 @@ IMPLEMENT_REFLECTION(SliderField) { void SliderField::after_reading(Version ver) { Field::after_reading(ver); + int choice_count = choices->choices.size(); + if (maximum < minimum) { int temp = maximum; maximum = minimum; @@ -54,6 +57,21 @@ void SliderField::after_reading(Version ver) { catch (...) { initial = wxString::Format(wxT("%i"), minimum); } + + // Move individual choices that are greater than maximum to the end + for (int i = 0; i < choice_count; ++i) { + try { + int choice_int = std::stoi(choices->choices[i].get()->name.ToStdString()); + if (choice_int >= maximum) { + auto it = choices->choices.begin() + i; + std::rotate(it, it + 1, choices->choices.end()); + --i; + --choice_count; + } + } + catch (...) {} + } + choices->initIds(); } // ----------------------------------------------------------------------------- : SliderStyle