From 0b67a912175c272b82c2fd5a897d174eef39b8d0 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Mon, 18 Apr 2022 10:00:36 +0100 Subject: [PATCH] Fix the option GncOptionRangeValue The GncOptionRangeValue can be used with integers or doubles, the default being doubles. When used for setting the plot width/height, integers are used so all ValueTypes need to be integers other wise the when create_range_spinner is used you end up with the upper_bound value being G_MAXDOUBLE, a 309 character wide spin button. To differentiate the two, use 'set_alternate(true)' for integers. --- gnucash/gnome-utils/dialog-options.cpp | 27 ++++++++++++++++++++---- libgnucash/app-utils/gnc-option-impl.hpp | 10 ++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/gnucash/gnome-utils/dialog-options.cpp b/gnucash/gnome-utils/dialog-options.cpp index 4365ec2e23..29b156b69d 100644 --- a/gnucash/gnome-utils/dialog-options.cpp +++ b/gnucash/gnome-utils/dialog-options.cpp @@ -2021,12 +2021,19 @@ public: GncOptionGtkUIItem{widget, GncOptionUIType::NUMBER_RANGE} {} void set_ui_item_from_option(GncOption& option) noexcept override { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(get_widget()), - option.get_value()); + if (option.is_alternate()) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(get_widget()), + option.get_value()); + else + gtk_spin_button_set_value(GTK_SPIN_BUTTON(get_widget()), + option.get_value()); } void set_option_from_ui_item(GncOption& option) noexcept override { - option.set_value(gtk_spin_button_get_value(GTK_SPIN_BUTTON(get_widget()))); + if (option.is_alternate()) + option.set_value(gtk_spin_button_get_value(GTK_SPIN_BUTTON(get_widget()))); + else + option.set_value(gtk_spin_button_get_value(GTK_SPIN_BUTTON(get_widget()))); } }; @@ -2042,7 +2049,19 @@ create_range_spinner(GncOption& option) gdouble upper_bound = G_MAXDOUBLE; gdouble step_size = 1.0; - option.get_limits(upper_bound, lower_bound, step_size); + if (option.is_alternate()) + { + int tmp_lower_bound = G_MININT; + int tmp_upper_bound = G_MAXINT; + int tmp_step_size = 1.0; + option.get_limits(tmp_upper_bound, tmp_lower_bound, tmp_step_size); + lower_bound =(double)tmp_lower_bound; + upper_bound = (double)tmp_upper_bound; + step_size = (double)tmp_step_size; + } + else + option.get_limits(upper_bound, lower_bound, step_size); + auto adj = GTK_ADJUSTMENT(gtk_adjustment_new(lower_bound, lower_bound, upper_bound, step_size, step_size * 5.0, diff --git a/libgnucash/app-utils/gnc-option-impl.hpp b/libgnucash/app-utils/gnc-option-impl.hpp index d126e3ea7a..75dd9d41ff 100644 --- a/libgnucash/app-utils/gnc-option-impl.hpp +++ b/libgnucash/app-utils/gnc-option-impl.hpp @@ -335,8 +335,9 @@ public: OptionClassifier{section, name, key, doc_string}, m_value{value >= min && value <= max ? value : min}, m_default_value{value >= min && value <= max ? value : min}, - m_min{min}, m_max{max}, m_step{step} {} - + m_min{min}, m_max{max}, m_step{step} { + if constexpr(is_same_decayed_v) + set_alternate(true);} GncOptionRangeValue(const GncOptionRangeValue&) = default; GncOptionRangeValue(GncOptionRangeValue&&) = default; GncOptionRangeValue& operator=(const GncOptionRangeValue&) = default; @@ -369,10 +370,7 @@ public: GncOptionUIType get_ui_type() const noexcept { return m_ui_type; } void make_internal() { m_ui_type = GncOptionUIType::INTERNAL; } bool is_alternate() const noexcept { return m_alternate; } - void set_alternate(bool value) noexcept { - if (m_ui_type == GncOptionUIType::PLOT_SIZE) - m_alternate = value; - } + void set_alternate(bool value) noexcept { m_alternate = value; } std::string serialize() const noexcept; bool deserialize(const std::string& str) noexcept; private: