From 6a7efbbf967edc47d647afb16fa1f4a51a184834 Mon Sep 17 00:00:00 2001 From: enricoturri1966 <enricoturri@seznam.cz> Date: Mon, 29 Jun 2020 15:23:24 +0200 Subject: [PATCH] ENABLE_LAYOUT_NO_RESTART -> Added an extra sizer to Mainframe to avoid hiding the entire application when switching the layout type --- src/slic3r/GUI/GUI_App.cpp | 4 ++-- src/slic3r/GUI/MainFrame.cpp | 21 ++++++++++----------- src/slic3r/GUI/MainFrame.hpp | 1 + 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 6268bc27f..d67eb5ded 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1080,10 +1080,10 @@ void GUI_App::add_config_menu(wxMenuBar *menu) } #if ENABLE_LAYOUT_NO_RESTART if (app_layout_changed) { - mainframe->Hide(); + mainframe->GetSizer()->Hide((size_t)0); mainframe->update_layout(); mainframe->select_tab(0); - mainframe->Show(); + mainframe->GetSizer()->Show((size_t)0); } #else if (recreate_app) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index b47398905..0f6d08124 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -141,7 +141,9 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S #endif // !ENABLE_LAYOUT_NO_RESTART // initialize layout - auto sizer = new wxBoxSizer(wxVERTICAL); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + wxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(m_main_sizer, 1, wxEXPAND); #if ENABLE_LAYOUT_NO_RESTART SetSizer(sizer); // initialize layout from config @@ -293,7 +295,7 @@ void MainFrame::update_layout() if (m_layout == ESettingsLayout::Dlg) rescale_dialog_after_dpi_change(*this, m_settings_dialog, ERescaleTarget::Mainframe); - clean_sizer(GetSizer()); + clean_sizer(m_main_sizer); clean_sizer(m_settings_dialog.GetSizer()); if (m_settings_dialog.IsShown()) @@ -332,16 +334,16 @@ void MainFrame::update_layout() { m_plater->Reparent(m_tabpanel); m_tabpanel->InsertPage(0, m_plater, _L("Plater")); - GetSizer()->Add(m_tabpanel, 1, wxEXPAND); + m_main_sizer->Add(m_tabpanel, 1, wxEXPAND); m_plater->Show(); m_tabpanel->Show(); break; } case ESettingsLayout::New: { - GetSizer()->Add(m_plater, 1, wxEXPAND); + m_main_sizer->Add(m_plater, 1, wxEXPAND); m_tabpanel->Hide(); - GetSizer()->Add(m_tabpanel, 1, wxEXPAND); + m_main_sizer->Add(m_tabpanel, 1, wxEXPAND); m_plater_page = new wxPanel(m_tabpanel); m_tabpanel->InsertPage(0, m_plater_page, _L("Plater")); // empty panel just for Plater tab */ m_plater->Show(); @@ -349,7 +351,7 @@ void MainFrame::update_layout() } case ESettingsLayout::Dlg: { - GetSizer()->Add(m_plater, 1, wxEXPAND); + m_main_sizer->Add(m_plater, 1, wxEXPAND); m_tabpanel->Reparent(&m_settings_dialog); m_settings_dialog.GetSizer()->Add(m_tabpanel, 1, wxEXPAND); @@ -1573,13 +1575,10 @@ void MainFrame::select_tab(size_t tab/* = size_t(-1)*/) } #if ENABLE_LAYOUT_NO_RESTART else if (m_layout == ESettingsLayout::New) { + m_main_sizer->Show(m_plater, tab == 0); + m_main_sizer->Show(m_tabpanel, tab != 0); #else else if (m_layout == slNew) { -#endif // ENABLE_LAYOUT_NO_RESTART -#if ENABLE_LAYOUT_NO_RESTART - GetSizer()->Show(m_plater, tab == 0); - GetSizer()->Show(m_tabpanel, tab != 0); -#else m_plater->Show(tab == 0); m_tabpanel->Show(tab != 0); #endif // ENABLE_LAYOUT_NO_RESTART diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 4d651f04e..4514b8f50 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -76,6 +76,7 @@ class MainFrame : public DPIFrame wxMenuItem* m_menu_item_repeat { nullptr }; // doesn't used now #endif wxMenuItem* m_menu_item_reslice_now { nullptr }; + wxSizer* m_main_sizer{ nullptr }; PrintHostQueueDialog *m_printhost_queue_dlg;