diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 1bf8d9106f..384c2837e8 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -41,19 +41,20 @@ namespace GUI ObjectLayers::ObjectLayers(wxWindow* parent) : OG_Settings(parent, true) { - m_grid_sizer = new wxFlexGridSizer(5, 0, wxGetApp().em_unit()); // Title, Min Z, "to", Max Z, unit & buttons sizer + m_grid_sizer = new wxFlexGridSizer(5, parent ? parent->FromDIP(2) : 2, wxGetApp().em_unit()); // Title, Min Z, "to", Max Z, buttons sizer m_grid_sizer->SetFlexibleDirection(wxHORIZONTAL); m_grid_sizer->AddGrowableCol(1); m_grid_sizer->AddGrowableCol(3); m_og->activate(); m_og->sizer->Clear(true); - m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, 5); + m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, parent ? parent->FromDIP(2) : 2); if (auto stb = dynamic_cast(m_og->stb)) stb->SetCornerRadius(0); m_bmp_delete = ScalableBitmap(parent, "delete"); m_bmp_add = ScalableBitmap(parent, "add"); + m_bmp_layer = ScalableBitmap(parent, "height_range_layer"); } void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_edited_range) @@ -95,10 +96,14 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus }; // Add text - auto head_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("Height Range"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + auto title_sizer = new wxBoxSizer(wxHORIZONTAL); + auto head_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("Range")); head_text->SetBackgroundStyle(wxBG_STYLE_PAINT); head_text->SetFont(wxGetApp().normal_font()); - m_grid_sizer->Add(head_text, 0, wxALIGN_CENTER_VERTICAL); + auto icon = new wxStaticBitmap(m_og->ctrl_parent(), wxID_ANY, m_bmp_layer.bmp()); + title_sizer->Add(icon, 0, wxALIGN_CENTER_VERTICAL); + title_sizer->Add(head_text, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, m_og->ctrl_parent()->FromDIP(5)); + m_grid_sizer->Add(title_sizer, 0, wxALIGN_CENTER_VERTICAL); // Add control for the "Min Z" @@ -126,7 +131,7 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus m_grid_sizer->Add(editor, 1, wxEXPAND); - auto middle_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("to"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + auto middle_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, "-"); middle_text->SetBackgroundStyle(wxBG_STYLE_PAINT); middle_text->SetFont(wxGetApp().normal_font()); m_grid_sizer->Add(middle_text, 0, wxALIGN_CENTER_VERTICAL); @@ -156,11 +161,6 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus m_grid_sizer->Add(editor, 1, wxEXPAND); auto sizer2 = new wxBoxSizer(wxHORIZONTAL); - auto unit_text = new wxStaticText(m_og->ctrl_parent(), wxID_ANY, _L("mm"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - unit_text->SetBackgroundStyle(wxBG_STYLE_PAINT); - unit_text->SetFont(wxGetApp().normal_font()); - sizer2->Add(unit_text, 0, wxALIGN_CENTER_VERTICAL); - m_grid_sizer->Add(sizer2, 0, wxALIGN_CENTER_VERTICAL); // BBS @@ -205,8 +205,9 @@ void ObjectLayers::create_layers_list() auto sizer = create_layer(range, del_btn, add_btn); auto b_sizer = new wxBoxSizer(wxHORIZONTAL); - b_sizer->Add(del_btn, 0, wxRIGHT | wxLEFT, em_unit(m_parent)); - b_sizer->Add(add_btn); + b_sizer->Add(del_btn, 0, wxLEFT, m_og->ctrl_parent()->FromDIP(5)); + b_sizer->AddSpacer(m_og->ctrl_parent()->FromDIP(15)); + b_sizer->Add(add_btn, 0, wxRIGHT, m_og->ctrl_parent()->FromDIP(5)); sizer->Add(b_sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, m_parent->FromDIP(1)); // aligns +/- buttons vertically since we got 1px gap on bottom of icons del_btn->Bind(wxEVT_BUTTON, [del_btn](wxEvent &) { @@ -277,6 +278,7 @@ void ObjectLayers::msw_rescale() { m_bmp_delete.msw_rescale(); m_bmp_add.msw_rescale(); + m_bmp_layer.msw_rescale(); m_grid_sizer->SetHGap(wxGetApp().em_unit()); @@ -367,20 +369,17 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, m_valid_value(value), m_type(type), m_set_focus_data(set_focus_data_fn), - wxTextCtrl(parent->m_og->ctrl_parent(), wxID_ANY, value, wxDefaultPosition, - wxSize(em_unit(parent->m_parent), wxDefaultCoord), wxTE_PROCESS_ENTER -#ifdef _WIN32 - | wxBORDER_SIMPLE -#endif - ) + TextInput(parent->m_og->ctrl_parent(), value, _L("mm"), "", wxDefaultPosition, wxSize(em_unit(parent->m_parent), wxDefaultCoord), wxTE_PROCESS_ENTER) { this->SetFont(wxGetApp().normal_font()); wxGetApp().UpdateDarkUI(this); + wxTextCtrl* ctrl = GetTextCtrl(); + // Reset m_enter_pressed flag to _false_, when value is editing - this->Bind(wxEVT_TEXT, [this](wxEvent&) { m_enter_pressed = false; }, this->GetId()); + ctrl->Bind(wxEVT_TEXT, [this](wxEvent&) { m_enter_pressed = false; }, ctrl->GetId()); - this->Bind(wxEVT_TEXT_ENTER, [this, edit_fn](wxEvent&) + ctrl->Bind(wxEVT_TEXT_ENTER, [this, edit_fn](wxCommandEvent& e) { m_enter_pressed = true; // If LayersList wasn't updated/recreated, we can call wxEVT_KILL_FOCUS.Skip() @@ -395,9 +394,9 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, SetValue(m_valid_value); m_call_kill_focus = true; } - }, this->GetId()); + }, ctrl->GetId()); - this->Bind(wxEVT_KILL_FOCUS, [this, edit_fn](wxFocusEvent& e) + ctrl->Bind(wxEVT_KILL_FOCUS, [this, edit_fn](wxFocusEvent& e) { if (!m_enter_pressed) { #ifndef __WXGTK__ @@ -426,14 +425,14 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, m_call_kill_focus = false; e.Skip(); } - }, this->GetId()); + }, ctrl->GetId()); - this->Bind(wxEVT_SET_FOCUS, [this, parent](wxFocusEvent& e) + ctrl->Bind(wxEVT_SET_FOCUS, [this, parent](wxFocusEvent& e) { set_focus_data(); parent->update_scene_from_editor_selection(); e.Skip(); - }, this->GetId()); + }, ctrl->GetId()); #ifdef __WXGTK__ // Workaround! To take information about selectable range this->Bind(wxEVT_LEFT_DOWN, [this](wxEvent& e) @@ -447,7 +446,7 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* parent, { // select all text using Ctrl+A if (wxGetKeyState(wxKeyCode('A')) && wxGetKeyState(WXK_CONTROL)) - this->SetSelection(-1, -1); //select all + GetTextCtrl()->SetSelection(-1, -1); //select all event.Skip(); })); } @@ -477,7 +476,7 @@ coordf_t LayerRangeEditor::get_value() void LayerRangeEditor::msw_rescale() { - SetMinSize(wxSize(wxGetApp().em_unit(), wxDefaultCoord)); + Rescale(); } } //namespace GUI diff --git a/src/slic3r/GUI/GUI_ObjectLayers.hpp b/src/slic3r/GUI/GUI_ObjectLayers.hpp index d161ef1e2b..165466b4bf 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.hpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.hpp @@ -9,6 +9,8 @@ #include #include +#include + #ifdef __WXOSX__ #include "libslic3r/PrintConfig.hpp" #endif @@ -34,7 +36,7 @@ enum EditorType etLayerHeight = 4, }; -class LayerRangeEditor : public wxTextCtrl +class LayerRangeEditor : public TextInput { bool m_enter_pressed { false }; bool m_call_kill_focus { false }; @@ -55,6 +57,8 @@ public: EditorType type() const {return m_type;} void set_focus_data() const { m_set_focus_data(m_type);} + void SetValue(const wxString& value) {GetTextCtrl()->SetValue(value);} + wxString GetValue() {return GetTextCtrl()->GetValue();} void msw_rescale(); private: @@ -65,6 +69,7 @@ class ObjectLayers : public OG_Settings { ScalableBitmap m_bmp_delete; ScalableBitmap m_bmp_add; + ScalableBitmap m_bmp_layer; ModelObject* m_object {nullptr}; wxFlexGridSizer* m_grid_sizer;