FIX: fix can't enter ',' in multiplicator

github: #3805

Change-Id: I6dd70822d1c2e79d66c70514d6dd580ab029c7ea
This commit is contained in:
Kunlong Ma 2024-04-10 20:52:52 +08:00 committed by Lane.Wei
parent 01fb301f6c
commit 1957f3ed1e
2 changed files with 31 additions and 39 deletions

View File

@ -430,7 +430,9 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector<float>& matrix, con
auto on_apply_text_modify = [this](wxEvent& e) { auto on_apply_text_modify = [this](wxEvent& e) {
wxString str = m_flush_multiplier_ebox->GetValue(); wxString str = m_flush_multiplier_ebox->GetValue();
float multiplier = wxAtof(str); str.Replace(",", ".");
double multiplier = 1.f;
if (str.ToDouble(&multiplier)) {
if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) {
str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier);
m_flush_multiplier_ebox->SetValue(str); m_flush_multiplier_ebox->SetValue(str);
@ -444,6 +446,7 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector<float>& matrix, con
edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier))); edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier)));
} }
} }
}
this->update_warning_texts(); this->update_warning_texts();
e.Skip(); e.Skip();
@ -459,6 +462,7 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector<float>& matrix, con
char flush_multi_str[32] = { 0 }; char flush_multi_str[32] = { 0 };
snprintf(flush_multi_str, sizeof(flush_multi_str), "%.2f", flush_multiplier); snprintf(flush_multi_str, sizeof(flush_multi_str), "%.2f", flush_multiplier);
m_flush_multiplier_ebox->SetValue(flush_multi_str); m_flush_multiplier_ebox->SetValue(flush_multi_str);
m_flush_multiplier_ebox->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
param_sizer->Add(m_flush_multiplier_ebox, 0, wxALIGN_CENTER | wxALL, 0); param_sizer->Add(m_flush_multiplier_ebox, 0, wxALIGN_CENTER | wxALL, 0);
param_sizer->AddStretchSpacer(1); param_sizer->AddStretchSpacer(1);
m_sizer_advanced->Add(param_sizer, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING); m_sizer_advanced->Add(param_sizer, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING);
@ -472,32 +476,15 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector<float>& matrix, con
m_flush_multiplier_ebox->Bind(wxEVT_KILL_FOCUS, on_apply_text_modify); m_flush_multiplier_ebox->Bind(wxEVT_KILL_FOCUS, on_apply_text_modify);
m_flush_multiplier_ebox->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this](wxCommandEvent&) { m_flush_multiplier_ebox->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this](wxCommandEvent&) {
wxString str = m_flush_multiplier_ebox->GetValue(); wxString str = m_flush_multiplier_ebox->GetValue();
float multiplier = wxAtof(str); str.Replace(",", ".");
double multiplier = 1.f;
if (str.ToDouble(&multiplier)) {
if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) {
str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier);
m_flush_multiplier_ebox->SetValue(str); m_flush_multiplier_ebox->SetValue(str);
}
}
m_flush_multiplier_ebox->SetInsertionPointEnd(); m_flush_multiplier_ebox->SetInsertionPointEnd();
}
});
m_flush_multiplier_ebox->Bind(wxEVT_CHAR, [this](wxKeyEvent& e) {
int keycode = e.GetKeyCode();
if (keycode == WXK_NONE)
return;
if (keycode == WXK_BACK || keycode == WXK_DELETE || keycode == WXK_RETURN ||
keycode == WXK_LEFT || keycode == WXK_RIGHT ||
keycode == WXK_HOME || keycode == WXK_END) {
e.Skip();
return;
}
wxString input_char = wxString::Format("%c", keycode);
long value;
if (!input_char.ToLong(&value) && input_char != ".")
return;
e.Skip();
}); });
} }
this->update_warning_texts(); this->update_warning_texts();

View File

@ -30,7 +30,12 @@ public:
if (m_flush_multiplier_ebox == nullptr) if (m_flush_multiplier_ebox == nullptr)
return 1.f; return 1.f;
return std::atof(m_flush_multiplier_ebox->GetValue().c_str()); wxString str = m_flush_multiplier_ebox->GetValue();
str.Replace(",", ".");
double multiplier = 1.f;
str.ToDouble(&multiplier);
return multiplier;
} }
private: private: