ENABLE_LAYOUT_NO_RESTART -> Another refactoring of MainFrame::update_layout()

This commit is contained in:
enricoturri1966 2020-06-16 15:16:28 +02:00
parent 9d6448480e
commit cfb552d496

View file

@ -235,6 +235,41 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
#if ENABLE_LAYOUT_NO_RESTART #if ENABLE_LAYOUT_NO_RESTART
void MainFrame::update_layout() void MainFrame::update_layout()
{ {
auto restore_to_creation = [this]() {
auto clean_sizer = [](wxSizer* sizer) {
while (!sizer->GetChildren().IsEmpty()) {
sizer->Detach(0);
}
};
if (m_plater->GetParent() != this)
m_plater->Reparent(this);
if (m_tabpanel->GetParent() != this)
m_tabpanel->Reparent(this);
int plater_page_id = m_tabpanel->FindPage(m_plater);
if (plater_page_id != wxNOT_FOUND)
m_tabpanel->RemovePage(plater_page_id);
plater_page_id = (m_plater_page != nullptr) ? m_tabpanel->FindPage(m_plater_page) : wxNOT_FOUND;
if (plater_page_id != wxNOT_FOUND) {
m_tabpanel->DeletePage(plater_page_id);
m_plater_page = nullptr;
}
clean_sizer(GetSizer());
clean_sizer(m_settings_dialog.GetSizer());
if (m_settings_dialog.IsShown())
m_settings_dialog.Close();
m_tabpanel->Hide();
m_plater->Hide();
Layout();
};
ESettingsLayout layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : ESettingsLayout layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old :
wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New :
wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old; wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old;
@ -246,31 +281,9 @@ void MainFrame::update_layout()
Freeze(); Freeze();
if (m_layout != ESettingsLayout::Unknown) { // Remove old settings
// Restore from previous settings if (m_layout != ESettingsLayout::Unknown)
if (m_layout == ESettingsLayout::Old) { restore_to_creation();
m_plater->Reparent(this);
m_tabpanel->RemovePage(m_tabpanel->FindPage(m_plater));
GetSizer()->Hide(m_tabpanel);
GetSizer()->Detach(m_tabpanel);
} else {
GetSizer()->Hide(m_plater);
GetSizer()->Detach(m_plater);
if (m_layout == ESettingsLayout::New) {
GetSizer()->Hide(m_tabpanel);
GetSizer()->Detach(m_tabpanel);
m_tabpanel->DeletePage(m_tabpanel->FindPage(m_plater_page));
m_plater_page = nullptr;
} else {
if (m_settings_dialog.IsShown())
m_settings_dialog.Close();
m_settings_dialog.GetSizer()->Hide(m_tabpanel);
m_settings_dialog.GetSizer()->Detach(m_tabpanel);
m_tabpanel->Reparent(this);
}
}
}
m_layout = layout; m_layout = layout;
@ -278,24 +291,36 @@ void MainFrame::update_layout()
m_last_selected_tab = m_layout == ESettingsLayout::Dlg ? 0 : 1; m_last_selected_tab = m_layout == ESettingsLayout::Dlg ? 0 : 1;
// Set new settings // Set new settings
if (m_layout == ESettingsLayout::Old) { switch (m_layout)
{
case ESettingsLayout::Old:
{
m_plater->Reparent(m_tabpanel); m_plater->Reparent(m_tabpanel);
m_tabpanel->InsertPage(0, m_plater, _L("Plater")); m_tabpanel->InsertPage(0, m_plater, _L("Plater"));
GetSizer()->Add(m_tabpanel, 1, wxEXPAND); GetSizer()->Add(m_tabpanel, 1, wxEXPAND);
GetSizer()->Show(m_tabpanel); m_plater->Show();
} else { m_tabpanel->Show();
break;
}
case ESettingsLayout::New:
{
GetSizer()->Add(m_plater, 1, wxEXPAND); GetSizer()->Add(m_plater, 1, wxEXPAND);
GetSizer()->Show(m_plater); m_tabpanel->Hide();
if (m_layout == ESettingsLayout::New) { GetSizer()->Add(m_tabpanel, 1, wxEXPAND);
GetSizer()->Add(m_tabpanel, 1, wxEXPAND); m_plater_page = new wxPanel(m_tabpanel);
GetSizer()->Hide(m_tabpanel); m_tabpanel->InsertPage(0, m_plater_page, _L("Plater")); // empty panel just for Plater tab */
m_plater_page = new wxPanel(m_tabpanel); m_plater->Show();
m_tabpanel->InsertPage(0, m_plater_page, _L("Plater")); // empty panel just for Plater tab */ break;
} else { }
m_tabpanel->Reparent(&m_settings_dialog); case ESettingsLayout::Dlg:
m_settings_dialog.GetSizer()->Add(m_tabpanel, 1, wxEXPAND); {
m_settings_dialog.GetSizer()->Show(m_tabpanel); GetSizer()->Add(m_plater, 1, wxEXPAND);
} m_tabpanel->Reparent(&m_settings_dialog);
m_settings_dialog.GetSizer()->Add(m_tabpanel, 1, wxEXPAND);
m_tabpanel->Show();
m_plater->Show();
break;
}
} }
//#ifdef __APPLE__ //#ifdef __APPLE__
@ -428,6 +453,7 @@ void MainFrame::init_tabpanel()
#ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList #ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList
m_tabpanel->SetFont(Slic3r::GUI::wxGetApp().normal_font()); m_tabpanel->SetFont(Slic3r::GUI::wxGetApp().normal_font());
#endif #endif
m_tabpanel->Hide();
m_settings_dialog.set_tabpanel(m_tabpanel); m_settings_dialog.set_tabpanel(m_tabpanel);
#else #else
m_layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? slOld : m_layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? slOld :
@ -472,6 +498,7 @@ void MainFrame::init_tabpanel()
#if ENABLE_LAYOUT_NO_RESTART #if ENABLE_LAYOUT_NO_RESTART
m_plater = new Plater(this, this); m_plater = new Plater(this, this);
m_plater->Hide();
#else #else
if (m_layout == slOld) { if (m_layout == slOld) {
m_plater = new Plater(m_tabpanel, this); m_plater = new Plater(m_tabpanel, this);