mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-15 12:35:55 +08:00
Fixed ENTER for ComboBoxes and TextCtrls in Settings Tabs (related to #6692)
+ Code cleaning : Deleted unused set_focus
This commit is contained in:
parent
3a2a9d8500
commit
83ab034f9a
@ -73,8 +73,6 @@ Field::~Field()
|
|||||||
{
|
{
|
||||||
if (m_on_kill_focus)
|
if (m_on_kill_focus)
|
||||||
m_on_kill_focus = nullptr;
|
m_on_kill_focus = nullptr;
|
||||||
if (m_on_set_focus)
|
|
||||||
m_on_set_focus = nullptr;
|
|
||||||
if (m_on_change)
|
if (m_on_change)
|
||||||
m_on_change = nullptr;
|
m_on_change = nullptr;
|
||||||
if (m_back_to_initial_value)
|
if (m_back_to_initial_value)
|
||||||
@ -156,15 +154,6 @@ void Field::on_kill_focus()
|
|||||||
m_on_kill_focus(m_opt_id);
|
m_on_kill_focus(m_opt_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Field::on_set_focus(wxEvent& event)
|
|
||||||
{
|
|
||||||
// to allow the default behavior
|
|
||||||
event.Skip();
|
|
||||||
// call the registered function if it is available
|
|
||||||
if (m_on_set_focus!=nullptr)
|
|
||||||
m_on_set_focus(m_opt_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Field::on_change_field()
|
void Field::on_change_field()
|
||||||
{
|
{
|
||||||
// std::cerr << "calling Field::_on_change \n";
|
// std::cerr << "calling Field::_on_change \n";
|
||||||
@ -507,13 +496,11 @@ void TextCtrl::BUILD() {
|
|||||||
e.Skip();
|
e.Skip();
|
||||||
temp->GetToolTip()->Enable(true);
|
temp->GetToolTip()->Enable(true);
|
||||||
#endif // __WXGTK__
|
#endif // __WXGTK__
|
||||||
bEnterPressed = true;
|
EnterPressed enter(this);
|
||||||
propagate_value();
|
propagate_value();
|
||||||
}), temp->GetId());
|
}), temp->GetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
temp->Bind(wxEVT_SET_FOCUS, ([this](wxEvent& e) { on_set_focus(e); }), temp->GetId());
|
|
||||||
|
|
||||||
temp->Bind(wxEVT_LEFT_DOWN, ([temp](wxEvent& event)
|
temp->Bind(wxEVT_LEFT_DOWN, ([temp](wxEvent& event)
|
||||||
{
|
{
|
||||||
//! to allow the default handling
|
//! to allow the default handling
|
||||||
@ -530,26 +517,11 @@ void TextCtrl::BUILD() {
|
|||||||
temp->Bind(wxEVT_KILL_FOCUS, ([this, temp](wxEvent& e)
|
temp->Bind(wxEVT_KILL_FOCUS, ([this, temp](wxEvent& e)
|
||||||
{
|
{
|
||||||
e.Skip();
|
e.Skip();
|
||||||
#ifdef __WXOSX__
|
|
||||||
// OSX issue: For some unknown reason wxEVT_KILL_FOCUS is emitted twice in a row in some cases
|
|
||||||
// (like when information dialog is shown during an update of the option value)
|
|
||||||
// Thus, suppress its second call
|
|
||||||
if (bKilledFocus)
|
|
||||||
return;
|
|
||||||
bKilledFocus = true;
|
|
||||||
#endif // __WXOSX__
|
|
||||||
|
|
||||||
#if !defined(__WXGTK__)
|
#if !defined(__WXGTK__)
|
||||||
temp->GetToolTip()->Enable(true);
|
temp->GetToolTip()->Enable(true);
|
||||||
#endif // __WXGTK__
|
#endif // __WXGTK__
|
||||||
if (bEnterPressed)
|
if (!bEnterPressed)
|
||||||
bEnterPressed = false;
|
|
||||||
else
|
|
||||||
propagate_value();
|
propagate_value();
|
||||||
#ifdef __WXOSX__
|
|
||||||
// After processing of KILL_FOCUS event we should to invalidate a bKilledFocus flag
|
|
||||||
bKilledFocus = false;
|
|
||||||
#endif // __WXOSX__
|
|
||||||
}), temp->GetId());
|
}), temp->GetId());
|
||||||
/*
|
/*
|
||||||
// select all text using Ctrl+A
|
// select all text using Ctrl+A
|
||||||
@ -990,26 +962,13 @@ void Choice::BUILD() {
|
|||||||
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 (bKilledFocus)
|
if (!bEnterPressed)
|
||||||
return;
|
|
||||||
|
|
||||||
bKilledFocus = true;
|
|
||||||
|
|
||||||
if (bEnterPressed)
|
|
||||||
bEnterPressed = false;
|
|
||||||
else
|
|
||||||
propagate_value();
|
propagate_value();
|
||||||
// After processing of KILL_FOCUS event we should to invalidate a bKilledFocus flag
|
|
||||||
bKilledFocus = false;
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
temp->Bind(wxEVT_TEXT_ENTER, [this, temp](wxEvent& e) {
|
temp->Bind(wxEVT_TEXT_ENTER, [this, temp](wxEvent& e) {
|
||||||
#ifdef _WIN32
|
EnterPressed enter(this);
|
||||||
temp->SetFocus();
|
|
||||||
#else
|
|
||||||
bEnterPressed = true;
|
|
||||||
propagate_value();
|
propagate_value();
|
||||||
#endif //_WIN32
|
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1161,6 +1120,15 @@ void Choice::set_value(const boost::any& value, bool change_event)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
field->SetSelection(idx);
|
field->SetSelection(idx);
|
||||||
|
|
||||||
|
if (!m_value.empty() && m_opt.opt_key == "fill_density") {
|
||||||
|
// If m_value was changed before, then update m_value here too to avoid case
|
||||||
|
// when control's value is already changed from the ConfigManipulation::update_print_fff_config(),
|
||||||
|
// but m_value doesn't respect it.
|
||||||
|
if (double val; text_value.ToDouble(&val))
|
||||||
|
m_value = val;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case coEnum: {
|
case coEnum: {
|
||||||
|
@ -52,10 +52,17 @@ protected:
|
|||||||
//! in another case we can't unfocused control at all
|
//! in another case we can't unfocused control at all
|
||||||
void on_kill_focus();
|
void on_kill_focus();
|
||||||
/// Call the attached on_change method.
|
/// Call the attached on_change method.
|
||||||
void on_set_focus(wxEvent& event);
|
|
||||||
/// Call the attached on_change method.
|
|
||||||
void on_change_field();
|
void on_change_field();
|
||||||
|
|
||||||
|
class EnterPressed {
|
||||||
|
public:
|
||||||
|
EnterPressed(Field* field) :
|
||||||
|
m_parent(field){ m_parent->set_enter_pressed(true); }
|
||||||
|
~EnterPressed() { m_parent->set_enter_pressed(false); }
|
||||||
|
private:
|
||||||
|
Field* m_parent;
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// Call the attached m_back_to_initial_value method.
|
/// Call the attached m_back_to_initial_value method.
|
||||||
void on_back_to_initial_value();
|
void on_back_to_initial_value();
|
||||||
@ -69,9 +76,6 @@ public:
|
|||||||
/// Function object to store callback passed in from owning object.
|
/// Function object to store callback passed in from owning object.
|
||||||
t_kill_focus m_on_kill_focus {nullptr};
|
t_kill_focus m_on_kill_focus {nullptr};
|
||||||
|
|
||||||
/// Function object to store callback passed in from owning object.
|
|
||||||
t_kill_focus m_on_set_focus {nullptr};
|
|
||||||
|
|
||||||
/// Function object to store callback passed in from owning object.
|
/// Function object to store callback passed in from owning object.
|
||||||
t_change m_on_change {nullptr};
|
t_change m_on_change {nullptr};
|
||||||
|
|
||||||
@ -236,10 +240,6 @@ class TextCtrl : public Field {
|
|||||||
void change_field_value(wxEvent& event);
|
void change_field_value(wxEvent& event);
|
||||||
#endif //__WXGTK__
|
#endif //__WXGTK__
|
||||||
|
|
||||||
#ifdef __WXOSX__
|
|
||||||
bool bKilledFocus = false;
|
|
||||||
#endif // __WXOSX__
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TextCtrl(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {}
|
TextCtrl(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {}
|
||||||
TextCtrl(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {}
|
TextCtrl(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {}
|
||||||
@ -342,7 +342,6 @@ 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) {}
|
||||||
|
@ -88,11 +88,6 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co
|
|||||||
if (!m_disabled)
|
if (!m_disabled)
|
||||||
this->on_kill_focus(opt_id);
|
this->on_kill_focus(opt_id);
|
||||||
};
|
};
|
||||||
field->m_on_set_focus = [this](const std::string& opt_id) {
|
|
||||||
//! This function will be called from Field.
|
|
||||||
if (!m_disabled)
|
|
||||||
this->on_set_focus(opt_id);
|
|
||||||
};
|
|
||||||
field->m_parent = parent();
|
field->m_parent = parent();
|
||||||
|
|
||||||
field->m_back_to_initial_value = [this](std::string opt_id) {
|
field->m_back_to_initial_value = [this](std::string opt_id) {
|
||||||
@ -514,12 +509,6 @@ void OptionsGroup::clear_fields_except_of(const std::vector<std::string> left_fi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsGroup::on_set_focus(const std::string& opt_key)
|
|
||||||
{
|
|
||||||
if (m_set_focus != nullptr)
|
|
||||||
m_set_focus(opt_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OptionsGroup::on_change_OG(const t_config_option_key& opt_id, const boost::any& value) {
|
void OptionsGroup::on_change_OG(const t_config_option_key& opt_id, const boost::any& value) {
|
||||||
if (m_on_change != nullptr)
|
if (m_on_change != nullptr)
|
||||||
m_on_change(opt_id, value);
|
m_on_change(opt_id, value);
|
||||||
|
@ -100,7 +100,6 @@ public:
|
|||||||
// To be called when the field loses focus, to assign a new initial value to the field.
|
// To be called when the field loses focus, to assign a new initial value to the field.
|
||||||
// Used by the relative position / rotation / scale manipulation fields of the Object Manipulation UI.
|
// Used by the relative position / rotation / scale manipulation fields of the Object Manipulation UI.
|
||||||
t_kill_focus m_fill_empty_value { nullptr };
|
t_kill_focus m_fill_empty_value { nullptr };
|
||||||
t_kill_focus m_set_focus { nullptr };
|
|
||||||
std::function<DynamicPrintConfig()> m_get_initial_config{ nullptr };
|
std::function<DynamicPrintConfig()> m_get_initial_config{ nullptr };
|
||||||
std::function<DynamicPrintConfig()> m_get_sys_config{ nullptr };
|
std::function<DynamicPrintConfig()> m_get_sys_config{ nullptr };
|
||||||
std::function<bool()> have_sys_config{ nullptr };
|
std::function<bool()> have_sys_config{ nullptr };
|
||||||
@ -208,7 +207,6 @@ protected:
|
|||||||
const t_field& build_field(const Option& opt);
|
const t_field& build_field(const Option& opt);
|
||||||
|
|
||||||
virtual void on_kill_focus(const std::string& opt_key) {};
|
virtual void on_kill_focus(const std::string& opt_key) {};
|
||||||
virtual void on_set_focus(const std::string& opt_key);
|
|
||||||
virtual void on_change_OG(const t_config_option_key& opt_id, const boost::any& value);
|
virtual void on_change_OG(const t_config_option_key& opt_id, const boost::any& value);
|
||||||
virtual void back_to_initial_value(const std::string& opt_key) {}
|
virtual void back_to_initial_value(const std::string& opt_key) {}
|
||||||
virtual void back_to_sys_value(const std::string& opt_key) {}
|
virtual void back_to_sys_value(const std::string& opt_key) {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user