Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/slic3r/GUI/Field.cpp33
-rw-r--r--src/slic3r/GUI/Field.hpp1
2 files changed, 33 insertions, 1 deletions
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 14386f381..ca1c57bc5 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -342,9 +342,40 @@ void TextCtrl::BUILD() {
window = dynamic_cast<wxWindow*>(temp);
}
+bool TextCtrl::value_was_changed()
+{
+ if (m_value.empty())
+ return true;
+
+ boost::any val = m_value;
+ wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue();
+ // update m_value!
+ get_value_by_opt_type(ret_str);
+
+ switch (m_opt.type) {
+ case coInt:
+ return boost::any_cast<int>(m_value) != boost::any_cast<int>(val);
+ case coPercent:
+ case coPercents:
+ case coFloats:
+ case coFloat: {
+ if (m_opt.nullable && std::isnan(boost::any_cast<double>(m_value)) &&
+ std::isnan(boost::any_cast<double>(val)))
+ return false;
+ return boost::any_cast<double>(m_value) != boost::any_cast<double>(val);
+ }
+ case coString:
+ case coStrings:
+ case coFloatOrPercent:
+ return boost::any_cast<std::string>(m_value) != boost::any_cast<std::string>(val);
+ default:
+ return true;
+ }
+}
+
void TextCtrl::propagate_value()
{
- if (is_defined_input_value<wxTextCtrl>(window, m_opt.type))
+ if (is_defined_input_value<wxTextCtrl>(window, m_opt.type) && value_was_changed())
on_change_field();
else
on_kill_focus();
diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp
index 49ff55d03..6c16f90f2 100644
--- a/src/slic3r/GUI/Field.hpp
+++ b/src/slic3r/GUI/Field.hpp
@@ -281,6 +281,7 @@ public:
~TextCtrl() {}
void BUILD();
+ bool value_was_changed();
// Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER
void propagate_value();
wxWindow* window {nullptr};