Auto-correction of the input values according to the admissible range

This commit is contained in:
YuSanka 2018-05-10 11:10:44 +02:00
parent 8eb9ddc2eb
commit 754bfd926b
3 changed files with 20 additions and 9 deletions

View File

@ -111,7 +111,8 @@ PrintConfigDef::PrintConfigDef()
"with cooling (use a fan) before tweaking this."); "with cooling (use a fan) before tweaking this.");
def->cli = "bridge-flow-ratio=f"; def->cli = "bridge-flow-ratio=f";
def->min = 0; def->min = 0;
def->default_value = new ConfigOptionFloat(1); def->max = 2;
def->default_value = new ConfigOptionFloat(1);
def = this->add("bridge_speed", coFloat); def = this->add("bridge_speed", coFloat);
def->label = L("Bridges"); def->label = L("Bridges");

View File

@ -82,10 +82,8 @@ namespace Slic3r { namespace GUI {
return std::regex_match(string, regex_pattern); return std::regex_match(string, regex_pattern);
} }
// boost::any Field::get_value_by_opt_type(wxString& str)
void Field::get_value_by_opt_type(wxString& str) void Field::get_value_by_opt_type(wxString& str)
{ {
// boost::any m_value;
switch (m_opt.type){ switch (m_opt.type){
case coInt: case coInt:
m_value = wxAtoi(str); m_value = wxAtoi(str);
@ -96,9 +94,24 @@ namespace Slic3r { namespace GUI {
case coFloat:{ case coFloat:{
if (m_opt.type == coPercent && str.Last() == '%') if (m_opt.type == coPercent && str.Last() == '%')
str.RemoveLast(); str.RemoveLast();
else if (str.Last() == '%') {
show_error(m_parent, _(L("Current option doesn't support percentage")));
set_value(double_to_string(m_opt.min), true);
m_value = double(m_opt.min);
break;
}
double val; double val;
str.ToCDouble(&val); str.ToCDouble(&val);
m_value = val; if (m_opt.min <= val && val <= m_opt.max)
m_value = val;
else
{
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;
set_value(double_to_string(val), true);
m_value = val;
}
break; } break; }
case coString: case coString:
case coStrings: case coStrings:
@ -108,8 +121,6 @@ namespace Slic3r { namespace GUI {
default: default:
break; break;
} }
// return m_value;
} }
void TextCtrl::BUILD() { void TextCtrl::BUILD() {
@ -188,9 +199,9 @@ namespace Slic3r { namespace GUI {
boost::any& TextCtrl::get_value() boost::any& TextCtrl::get_value()
{ {
wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue(); wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue();
/*boost::any ret_val*/get_value_by_opt_type(ret_str); get_value_by_opt_type(ret_str);
return m_value;//ret_val; return m_value;
} }
void TextCtrl::enable() { dynamic_cast<wxTextCtrl*>(window)->Enable(); dynamic_cast<wxTextCtrl*>(window)->SetEditable(true); } void TextCtrl::enable() { dynamic_cast<wxTextCtrl*>(window)->Enable(); dynamic_cast<wxTextCtrl*>(window)->SetEditable(true); }

View File

@ -124,7 +124,6 @@ public:
virtual wxWindow* getWindow() { return nullptr; } virtual wxWindow* getWindow() { return nullptr; }
bool is_matched(const std::string& string, const std::string& pattern); bool is_matched(const std::string& string, const std::string& pattern);
// boost::any get_value_by_opt_type(wxString& str);
void get_value_by_opt_type(wxString& str); void get_value_by_opt_type(wxString& str);
/// Factory method for generating new derived classes. /// Factory method for generating new derived classes.