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
path: root/src
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2019-10-29 15:07:57 +0300
committerYuSanka <yusanka@gmail.com>2019-10-29 15:07:57 +0300
commitffcf25e5cb0fab7b527c9bbffe34fc65d9a6d38b (patch)
tree388c5ba419a2b53c169588f7695f56dcb62d167a /src
parent9e8ce66f70ce29a4badd54a6e3d8688ed36f903f (diff)
Fix for #3108
Diffstat (limited to 'src')
-rw-r--r--src/slic3r/GUI/Field.cpp40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 07d75c947..42e3448fc 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -150,7 +150,13 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
case coFloat:{
if (m_opt.type == coPercent && !str.IsEmpty() && str.Last() == '%')
str.RemoveLast();
- else if (check_value && !str.IsEmpty() && str.Last() == '%') {
+ else if (!str.IsEmpty() && str.Last() == '%')
+ {
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
+
wxString label = m_Label->GetLabel();
if (label.Last() == '\n') label.RemoveLast();
while (label.Last() == ' ') label.RemoveLast();
@@ -169,13 +175,21 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
{
if (m_opt.nullable && str == na_value())
val = ConfigOptionFloatsNullable::nil_value();
- else if (check_value && !str.ToCDouble(&val))
+ else if (!str.ToCDouble(&val))
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
show_error(m_parent, _(L("Invalid numeric input.")));
set_value(double_to_string(val), true);
}
- if (check_value && (m_opt.min > val || val > m_opt.max))
+ if (m_opt.min > val || val > m_opt.max)
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
show_error(m_parent, _(L("Input value is out of range")));
if (m_opt.min > val) val = m_opt.min;
if (val > m_opt.max) val = m_opt.max;
@@ -192,15 +206,24 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
double val = 0.;
// Replace the first occurence of comma in decimal number.
str.Replace(",", ".", false);
- if (check_value && !str.ToCDouble(&val))
+ if (!str.ToCDouble(&val))
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
show_error(m_parent, _(L("Invalid numeric input.")));
set_value(double_to_string(val), true);
}
- else if (check_value && ((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
+ else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
(m_opt.sidetext.rfind("mm ") != std::string::npos && val > 1)) &&
(m_value.empty() || std::string(str.ToUTF8().data()) != boost::any_cast<std::string>(m_value)))
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
+
const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm";
const wxString stVal = double_to_string(val, 2);
const wxString msg_text = wxString::Format(_(L("Do you mean %s%% instead of %s %s?\n"
@@ -351,6 +374,7 @@ bool TextCtrl::value_was_changed()
boost::any val = m_value;
wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue();
// update m_value!
+ // ret_str might be changed inside get_value_by_opt_type
get_value_by_opt_type(ret_str);
switch (m_opt.type) {
@@ -396,8 +420,10 @@ void TextCtrl::set_value(const boost::any& value, bool change_event/* = false*/)
if (!change_event) {
wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue();
- // update m_value to correct work of next value_was_changed(),
- // but don't check/change inputed value and don't show a warning message
+ /* Update m_value to correct work of next value_was_changed().
+ * But after checking of entered value, don't fix the "incorrect" value and don't show a warning message,
+ * just clear m_value in this case.
+ */
get_value_by_opt_type(ret_str, false);
}
}