Fix for #6692 - Slice button not appearing after infill change

This commit is contained in:
Oleksandra Yushchenko 2021-08-10 12:32:00 +02:00 committed by GitHub
parent c0a00f4e70
commit ed25d5c53d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 60 additions and 32 deletions

View File

@ -935,7 +935,7 @@ void Choice::BUILD() {
choice_ctrl* temp; choice_ctrl* temp;
if (m_opt.gui_type != ConfigOptionDef::GUIType::undefined && m_opt.gui_type != ConfigOptionDef::GUIType::select_open) { if (m_opt.gui_type != ConfigOptionDef::GUIType::undefined && m_opt.gui_type != ConfigOptionDef::GUIType::select_open) {
m_is_editable = true; m_is_editable = true;
temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size); temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxTE_PROCESS_ENTER);
} }
else { else {
#ifdef __WXOSX__ #ifdef __WXOSX__
@ -988,46 +988,70 @@ void Choice::BUILD() {
temp->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { on_change_field(); }, temp->GetId()); temp->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { on_change_field(); }, temp->GetId());
if (m_is_editable) { if (m_is_editable) {
temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { temp->Bind(wxEVT_KILL_FOCUS, [this](wxEvent& e) {
e.Skip(); e.Skip();
if (m_opt.type == coStrings) { if (bKilledFocus)
on_change_field();
return; return;
}
if (is_defined_input_value<choice_ctrl>(window, m_opt.type)) { bKilledFocus = true;
switch (m_opt.type) {
case coFloatOrPercent: if (bEnterPressed)
{ bEnterPressed = false;
std::string old_val = !m_value.empty() ? boost::any_cast<std::string>(m_value) : "";
if (old_val == boost::any_cast<std::string>(get_value()))
return;
break;
}
case coInt:
{
int old_val = !m_value.empty() ? boost::any_cast<int>(m_value) : 0;
if (old_val == boost::any_cast<int>(get_value()))
return;
break;
}
default:
{
double old_val = !m_value.empty() ? boost::any_cast<double>(m_value) : -99999;
if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
return;
}
}
on_change_field();
}
else else
on_kill_focus(); propagate_value();
}), temp->GetId()); // After processing of KILL_FOCUS event we should to invalidate a bKilledFocus flag
bKilledFocus = false;
} );
temp->Bind(wxEVT_TEXT_ENTER, [this, temp](wxEvent& e) {
#ifdef _WIN32
temp->SetFocus();
#else
bEnterPressed = true;
propagate_value();
#endif //_WIN32
} );
} }
temp->SetToolTip(get_tooltip_text(temp->GetValue())); temp->SetToolTip(get_tooltip_text(temp->GetValue()));
} }
void Choice::propagate_value()
{
if (m_opt.type == coStrings) {
on_change_field();
return;
}
if (is_defined_input_value<choice_ctrl>(window, m_opt.type)) {
switch (m_opt.type) {
case coFloatOrPercent:
{
std::string old_val = !m_value.empty() ? boost::any_cast<std::string>(m_value) : "";
if (old_val == boost::any_cast<std::string>(get_value()))
return;
break;
}
case coInt:
{
int old_val = !m_value.empty() ? boost::any_cast<int>(m_value) : 0;
if (old_val == boost::any_cast<int>(get_value()))
return;
break;
}
default:
{
double old_val = !m_value.empty() ? boost::any_cast<double>(m_value) : -99999;
if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
return;
}
}
on_change_field();
}
else
on_kill_focus();
}
void Choice::suppress_scroll() void Choice::suppress_scroll()
{ {
m_suppress_scroll = true; m_suppress_scroll = true;

View File

@ -342,6 +342,8 @@ public:
class Choice : public Field { class Choice : public Field {
using Field::Field; using Field::Field;
bool bKilledFocus = false;
public: public:
Choice(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {} Choice(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {}
Choice(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {} Choice(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {}
@ -349,6 +351,8 @@ public:
wxWindow* window{ nullptr }; wxWindow* window{ nullptr };
void BUILD() override; void BUILD() override;
// Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER
void propagate_value();
/* Under OSX: wxBitmapComboBox->GetWindowStyle() returns some weard value, /* Under OSX: wxBitmapComboBox->GetWindowStyle() returns some weard value,
* so let use a flag, which has TRUE value for a control without wxCB_READONLY style * so let use a flag, which has TRUE value for a control without wxCB_READONLY style