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; }