diff options
Diffstat (limited to 'src/slic3r/GUI/MainFrame.cpp')
-rw-r--r-- | src/slic3r/GUI/MainFrame.cpp | 71 |
1 files changed, 53 insertions, 18 deletions
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 389782a8f..561a03f44 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -41,6 +41,8 @@ #include "GUI_App.hpp" #include "UnsavedChangesDialog.hpp" #include "MsgDialog.hpp" +#include "Notebook.hpp" +#include "GUI_Factories.hpp" #ifdef _WIN32 #include <dbt.h> @@ -427,8 +429,13 @@ void MainFrame::update_layout() case ESettingsLayout::Old: { m_plater->Reparent(m_tabpanel); +#ifdef _MSW_DARK_MODE + if (!wxGetApp().tabs_as_menu()) + dynamic_cast<Notebook*>(m_tabpanel)->InsertPage(0, m_plater, _L("Plater"), std::string("plater")); + else +#endif m_tabpanel->InsertPage(0, m_plater, _L("Plater")); - m_main_sizer->Add(m_tabpanel, 1, wxEXPAND); + m_main_sizer->Add(m_tabpanel, 1, wxEXPAND | wxTOP, 1); m_plater->Show(); m_tabpanel->Show(); // update Tabs @@ -447,6 +454,11 @@ void MainFrame::update_layout() m_tabpanel->Hide(); m_main_sizer->Add(m_tabpanel, 1, wxEXPAND); m_plater_page = new wxPanel(m_tabpanel); +#ifdef _MSW_DARK_MODE + if (!wxGetApp().tabs_as_menu()) + dynamic_cast<Notebook*>(m_tabpanel)->InsertPage(0, m_plater_page, _L("Plater"), std::string("plater")); + else +#endif m_tabpanel->InsertPage(0, m_plater_page, _L("Plater")); // empty panel just for Plater tab */ m_plater->Show(); break; @@ -455,7 +467,7 @@ void MainFrame::update_layout() { m_main_sizer->Add(m_plater, 1, wxEXPAND); m_tabpanel->Reparent(&m_settings_dialog); - m_settings_dialog.GetSizer()->Add(m_tabpanel, 1, wxEXPAND); + m_settings_dialog.GetSizer()->Add(m_tabpanel, 1, wxEXPAND | wxTOP, 2); m_tabpanel->Show(); m_plater->Show(); @@ -476,6 +488,11 @@ void MainFrame::update_layout() } } +#ifdef _MSW_DARK_MODE + // Sizer with buttons for mode changing + m_plater->sidebar().show_mode_sizer(wxGetApp().tabs_as_menu() || m_layout != ESettingsLayout::Old); +#endif + #ifdef __WXMSW__ if (update_scaling_state != State::noUpdate) { @@ -640,7 +657,7 @@ void MainFrame::init_tabpanel() wxGetApp().UpdateDarkUI(m_tabpanel); } else - m_tabpanel = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); + m_tabpanel = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME, true); #else m_tabpanel = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); #endif @@ -652,7 +669,7 @@ void MainFrame::init_tabpanel() m_settings_dialog.set_tabpanel(m_tabpanel); #ifdef __WXMSW__ - m_tabpanel->Bind(/*wxEVT_LISTBOOK_PAGE_CHANGED*/wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) { + m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) { #else m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, [this](wxBookCtrlEvent& e) { #endif @@ -763,20 +780,25 @@ void MainFrame::register_win32_callbacks() void MainFrame::create_preset_tabs() { wxGetApp().update_label_colours_from_appconfig(); - add_created_tab(new TabPrint(m_tabpanel)); - add_created_tab(new TabFilament(m_tabpanel)); - add_created_tab(new TabSLAPrint(m_tabpanel)); - add_created_tab(new TabSLAMaterial(m_tabpanel)); - add_created_tab(new TabPrinter(m_tabpanel)); + add_created_tab(new TabPrint(m_tabpanel), "cog"); + add_created_tab(new TabFilament(m_tabpanel), "spool"); + add_created_tab(new TabSLAPrint(m_tabpanel), "cog"); + add_created_tab(new TabSLAMaterial(m_tabpanel), "resin"); + add_created_tab(new TabPrinter(m_tabpanel), wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptFFF ? "printer" : "sla_printer"); } -void MainFrame::add_created_tab(Tab* panel) +void MainFrame::add_created_tab(Tab* panel, const std::string& bmp_name /*= ""*/) { panel->create_preset_tab(); const auto printer_tech = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); if (panel->supports_printer_technology(printer_tech)) +#ifdef _MSW_DARK_MODE + if (!wxGetApp().tabs_as_menu()) + dynamic_cast<Notebook*>(m_tabpanel)->AddPage(panel, panel->title(), bmp_name); + else +#endif m_tabpanel->AddPage(panel, panel->title()); } @@ -960,6 +982,12 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) wxGetApp().update_fonts(this); this->SetFont(this->normal_font()); +#ifdef _MSW_DARK_MODE + // update common mode sizer + if (!wxGetApp().tabs_as_menu()) + dynamic_cast<Notebook*>(m_tabpanel)->Rescale(); +#endif + // update Plater wxGetApp().plater()->msw_rescale(); @@ -968,9 +996,8 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) for (auto tab : wxGetApp().tabs_list) tab->msw_rescale(); - wxMenuBar* menu_bar = this->GetMenuBar(); - for (size_t id = 0; id < menu_bar->GetMenuCount(); id++) - msw_rescale_menu(menu_bar->GetMenu(id)); + for (size_t id = 0; id < m_menubar->GetMenuCount(); id++) + msw_rescale_menu(m_menubar->GetMenu(id)); // Workarounds for correct Window rendering after rescale @@ -1003,6 +1030,11 @@ void MainFrame::on_sys_color_changed() #ifdef __WXMSW__ wxGetApp().UpdateDarkUI(m_tabpanel); m_statusbar->update_dark_ui(); +#ifdef _MSW_DARK_MODE + // update common mode sizer + if (!wxGetApp().tabs_as_menu()) + dynamic_cast<Notebook*>(m_tabpanel)->Rescale(); +#endif #endif // update Plater @@ -1012,10 +1044,7 @@ void MainFrame::on_sys_color_changed() for (auto tab : wxGetApp().tabs_list) tab->sys_color_changed(); - // msw_rescale_menu updates just icons, so use it - wxMenuBar* menu_bar = this->GetMenuBar(); - for (size_t id = 0; id < menu_bar->GetMenuCount(); id++) - msw_rescale_menu(menu_bar->GetMenu(id)); + MenuFactory::sys_color_changed(m_menubar); this->Refresh(); } @@ -2103,8 +2132,8 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) this->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); #else this->SetFont(wxGetApp().normal_font()); -#endif // __WXMSW__ this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#endif // __WXMSW__ // Load the icon either from the exe, or from the ico file. #if _WIN32 @@ -2185,6 +2214,12 @@ void SettingsDialog::on_dpi_changed(const wxRect& suggested_rect) const int& em = em_unit(); const wxSize& size = wxSize(85 * em, 50 * em); +#ifdef _MSW_DARK_MODE + // update common mode sizer + if (!wxGetApp().tabs_as_menu()) + dynamic_cast<Notebook*>(m_tabpanel)->Rescale(); +#endif + // update Tabs for (auto tab : wxGetApp().tabs_list) tab->msw_rescale(); |