From f07aba73cb4a18259a4fe5f4e4599c71b1fabc58 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 24 Jan 2019 10:24:10 +0100 Subject: [PATCH 1/4] Set uniformly scaling by default --- src/slic3r/GUI/GUI_ObjectManipulation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.hpp b/src/slic3r/GUI/GUI_ObjectManipulation.hpp index d0afa528e..b30d3ef55 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.hpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.hpp @@ -75,7 +75,7 @@ class ObjectManipulation : public OG_Settings Vec3d m_new_scale; Vec3d m_new_size; bool m_new_enabled; - bool m_uniform_scale {false}; + bool m_uniform_scale {true}; PrusaLockButton* m_lock_bnt{ nullptr }; public: From 6044be77934d22ac350d1f0119c1ed5ae51b0398 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 24 Jan 2019 12:11:01 +0100 Subject: [PATCH 2/4] Fixed sidebar layouting after a creation of the App --- src/slic3r/GUI/GUI_App.cpp | 39 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 462f3c328..1470c279e 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -147,28 +147,27 @@ bool GUI_App::OnInit() wxImage::AddHandler(new wxPNGHandler()); mainframe = new MainFrame(); sidebar().obj_list()->init_objects(); // propagate model objects to object list -// update_mode(); // do that later +// update_mode(); // !!! do that later SetTopWindow(mainframe); m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg())); - CallAfter([this]() { - // temporary workaround for the correct behavior of the Scrolled sidebar panel - auto& panel = sidebar(); - if (panel.obj_list()->GetMinHeight() > 200) { - wxWindowUpdateLocker noUpdates_sidebar(&panel); - panel.obj_list()->SetMinSize(wxSize(-1, 200)); -// panel.Layout(); - } - update_mode(); // update view mode after fix of the object_list size - // to correct later layouts - }); - Bind(wxEVT_IDLE, [this](wxIdleEvent& event) { if (app_config->dirty()) app_config->save(); + // ! Temporary workaround for the correct behavior of the Scrolled sidebar panel + // Do this "manipulations" only once ( after (re)create of the application ) + if (sidebar().obj_list()->GetMinHeight() > 200) + { + wxWindowUpdateLocker noUpdates_sidebar(&sidebar()); + sidebar().obj_list()->SetMinSize(wxSize(-1, 200)); + + // !!! to correct later layouts + update_mode(); // update view mode after fix of the object_list size + } + #if !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION if (this->plater() != nullptr) this->obj_manipul()->update_if_dirty(); @@ -278,7 +277,7 @@ void GUI_App::recreate_GUI() MainFrame* topwindow = dynamic_cast(GetTopWindow()); mainframe = new MainFrame(); sidebar().obj_list()->init_objects(); // propagate model objects to object list -// update_mode(); // do that later + if (topwindow) { SetTopWindow(mainframe); topwindow->Destroy(); @@ -286,18 +285,6 @@ void GUI_App::recreate_GUI() m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg())); - CallAfter([this]() { - // temporary workaround for the correct behavior of the Scrolled sidebar panel - auto& panel = sidebar(); - if (panel.obj_list()->GetMinHeight() > 200) { - wxWindowUpdateLocker noUpdates_sidebar(&panel); - panel.obj_list()->SetMinSize(wxSize(-1, 200)); -// panel.Layout(); - } - update_mode(); // update view mode after fix of the object_list size - // to correct later layouts - }); - mainframe->Show(true); // On OSX the UI was not initialized correctly if the wizard was called From 10641f7e9c67e3199c1be3ceb465636ca6d5f676 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 24 Jan 2019 15:32:50 +0100 Subject: [PATCH 3/4] Improved application recreation after language change --- src/slic3r/GUI/GUI_App.cpp | 20 +++++++++++++------- src/slic3r/GUI/GUI_App.hpp | 2 +- src/slic3r/GUI/MainFrame.cpp | 5 +++++ src/slic3r/GUI/Tab.hpp | 4 +--- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 1470c279e..75b6d6834 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -274,6 +274,8 @@ void GUI_App::recreate_GUI() { std::cerr << "recreate_GUI" << std::endl; + clear_tabs_list(); + MainFrame* topwindow = dynamic_cast(GetTopWindow()); mainframe = new MainFrame(); sidebar().obj_list()->init_objects(); // propagate model objects to object list @@ -285,6 +287,8 @@ void GUI_App::recreate_GUI() m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg())); + load_current_presets(); + mainframe->Show(true); // On OSX the UI was not initialized correctly if the wizard was called @@ -669,13 +673,6 @@ bool GUI_App::checked_tab(Tab* tab) return ret; } -void GUI_App::delete_tab_from_list(Tab* tab) -{ - std::vector::iterator itr = find(tabs_list.begin(), tabs_list.end(), tab); - if (itr != tabs_list.end()) - tabs_list.erase(itr); -} - // Update UI / Tabs to reflect changes in the currently loaded presets void GUI_App::load_current_presets() { @@ -689,6 +686,15 @@ void GUI_App::load_current_presets() } } +void GUI_App::clear_tabs_list() +{ + for (auto tab : tabs_list) { + tab->Destroy(); + tab = nullptr; + } + tabs_list.clear(); +} + #ifdef __APPLE__ // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index c398c449e..a5b96598f 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -133,8 +133,8 @@ public: void add_config_menu(wxMenuBar *menu); bool check_unsaved_changes(); bool checked_tab(Tab* tab); - void delete_tab_from_list(Tab* tab); void load_current_presets(); + void clear_tabs_list(); #ifdef __APPLE__ // wxWidgets override to get an event on open files. diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 46a46e950..f234ca1a4 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -121,6 +121,11 @@ void MainFrame::init_tabpanel() } }); + if (wxGetApp().plater_) { + // before creating a new plater let's delete old one + wxGetApp().plater_->Destroy(); + wxGetApp().plater_ = nullptr; + } m_plater = new Slic3r::GUI::Plater(m_tabpanel, this); wxGetApp().plater_ = m_plater; m_tabpanel->AddPage(m_plater, _(L("Plater"))); diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 9ec54e6eb..e00e87b62 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -213,9 +213,7 @@ public: public: Tab(wxNotebook* parent, const wxString& title, const char* name); - ~Tab() { - wxGetApp().delete_tab_from_list(this); - } + ~Tab() {} wxWindow* parent() const { return m_parent; } wxString title() const { return m_title; } From 43beaf46d8a88c9ffc5ee52fe1d3d262b5d404ce Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 24 Jan 2019 15:50:06 +0100 Subject: [PATCH 4/4] Deactivate layers editing tool if user selects more than one object --- src/slic3r/GUI/Plater.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 24471e254..800d3dc1f 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1593,7 +1593,14 @@ void Plater::priv::selection_changed() view3D->enable_toolbar_item("fewer", can_decrease_instances()); view3D->enable_toolbar_item("splitobjects", can_split/*_to_objects*/()); view3D->enable_toolbar_item("splitvolumes", can_split/*_to_volumes*/()); - view3D->enable_toolbar_item("layersediting", layers_height_allowed()); + + // if the selection is not valid to allow for layer editing, we need to turn off the tool if it is running + bool enable_layer_editing = layers_height_allowed(); + if (!enable_layer_editing && view3D->is_layers_editing_enabled()) + on_action_layersediting(SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); + + view3D->enable_toolbar_item("layersediting", enable_layer_editing); + // forces a frame render to update the view (to avoid a missed update if, for example, the context menu appears) view3D->render(); } @@ -2275,6 +2282,9 @@ void Plater::priv::on_action_split_volumes(SimpleEvent&) void Plater::priv::on_action_layersediting(SimpleEvent&) { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "on_action_layersediting" << std::endl; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool enable = !view3D->is_layers_editing_enabled(); view3D->enable_layers_editing(enable); if (enable && !view3D->is_layers_editing_enabled())