From d5bd76776f1960c3d69797ceb956228c7bee7b63 Mon Sep 17 00:00:00 2001 From: YuSanka <yusanka@gmail.com> Date: Thu, 24 Sep 2020 18:54:54 +0200 Subject: [PATCH] Page class is used as a container of option groups and doesn't inherited from wxScrolledWindow now --- src/slic3r/GUI/GUI_ObjectLayers.cpp | 1 + src/slic3r/GUI/GUI_ObjectManipulation.cpp | 1 + src/slic3r/GUI/GUI_ObjectSettings.cpp | 1 + src/slic3r/GUI/OptionsGroup.cpp | 37 ++++++++---- src/slic3r/GUI/OptionsGroup.hpp | 2 +- src/slic3r/GUI/Tab.cpp | 71 +++++++++++++++-------- src/slic3r/GUI/Tab.hpp | 5 +- 7 files changed, 80 insertions(+), 38 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 90a725fbf..09b4f36ab 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -34,6 +34,7 @@ ObjectLayers::ObjectLayers(wxWindow* parent) : m_grid_sizer->Add(temp); } + m_og->activate(); m_og->sizer->Clear(true); m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 7243e8c73..4b1197a75 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -431,6 +431,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : m_main_grid_sizer->Add(m_check_inch, 1, wxEXPAND); + m_og->activate(); m_og->sizer->Clear(true); m_og->sizer->Add(m_main_grid_sizer, 1, wxEXPAND | wxALL, border); } diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index e157cb385..1fbf32e11 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -58,6 +58,7 @@ wxSizer* OG_Settings::get_sizer() ObjectSettings::ObjectSettings(wxWindow* parent) : OG_Settings(parent, true) { + m_og->activate(); m_og->set_name(_(L("Additional Settings"))); m_settings_list_sizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 13c577662..310dc9544 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -110,13 +110,13 @@ OptionsGroup::OptionsGroup( wxWindow* _parent, const wxString& title, m_show_modified_btns(is_tab_opt), staticbox(title!=""), extra_column(extra_clmn) { - if (staticbox) { + /*if (staticbox) { stb = new wxStaticBox(_parent, wxID_ANY, _(title)); if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); stb->SetFont(wxOSX ? wxGetApp().normal_font() : wxGetApp().bold_font()); } else stb = nullptr; - sizer = (staticbox ? new wxStaticBoxSizer(stb, wxVERTICAL) : new wxBoxSizer(wxVERTICAL)); + sizer = (staticbox ? new wxStaticBoxSizer(stb, wxVERTICAL) : new wxBoxSizer(wxVERTICAL));*/ } void OptionsGroup::add_undo_buttons_to_sizer(wxSizer* sizer, const t_field& field) @@ -362,10 +362,19 @@ void OptionsGroup::activate_line(Line& line) } // create all controls for the option group from the m_lines -void OptionsGroup::activate() +bool OptionsGroup::activate() { - if (!sizer->IsEmpty()) - return; + if (sizer)//(!sizer->IsEmpty()) + return false; + + if (staticbox) { + stb = new wxStaticBox(m_parent, wxID_ANY, _(title)); + if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); + stb->SetFont(wxOSX ? wxGetApp().normal_font() : wxGetApp().bold_font()); + } + else + stb = nullptr; + sizer = (staticbox ? new wxStaticBoxSizer(stb, wxVERTICAL) : new wxBoxSizer(wxVERTICAL)); auto num_columns = 1U; size_t grow_col = 1; @@ -389,24 +398,30 @@ void OptionsGroup::activate() // activate lines for (Line& line: m_lines) activate_line(line); + + return true; } // delete all controls from the option group void OptionsGroup::clear() { - if (sizer->IsEmpty()) + if (!sizer)//(sizer->IsEmpty()) return; - m_grid_sizer->Clear(true); - sizer->Clear(true); +// m_grid_sizer->Clear(true); + m_grid_sizer = nullptr; + +// sizer->Clear(true); + //if (stb) { + // stb->SetContainingSizer(NULL); + // stb->Destroy(); + //} + sizer = nullptr; for (Line& line : m_lines) if(line.full_Label) *line.full_Label = nullptr; - //for (auto extra_col_win : m_extra_column_item_ptrs) - // destroy(extra_col_win); m_extra_column_item_ptrs.clear(); - m_near_label_widget_ptrs.clear(); m_fields.clear(); } diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp index b3198137b..4d70347aa 100644 --- a/src/slic3r/GUI/OptionsGroup.hpp +++ b/src/slic3r/GUI/OptionsGroup.hpp @@ -124,7 +124,7 @@ public: void activate_line(Line& line); // create all controls for the option group from the m_lines - void activate(); + bool activate(); // delete all controls from the option group void clear(); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 8d1560448..b0dfe44bc 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -296,6 +296,19 @@ void Tab::create_preset_tab() m_treectrl->Bind(wxEVT_TREE_SEL_CHANGED, &Tab::OnTreeSelChange, this); m_treectrl->Bind(wxEVT_KEY_DOWN, &Tab::OnKeyDown, this); + // Initialize the page. +#ifdef __WXOSX__ + auto page_parent = m_tmp_panel; +#else + auto page_parent = this; +#endif + + m_page_view = new wxScrolledWindow(page_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_page_sizer = new wxBoxSizer(wxVERTICAL); + m_page_view->SetSizer(m_page_sizer); + m_page_view->SetScrollbars(1, 20, 1, 2); + m_hsizer->Add(m_page_view, 1, wxEXPAND | wxLEFT, 5); + m_btn_save_preset->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { save_preset(); })); m_btn_delete_preset->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { delete_preset(); })); m_btn_hide_incompatible_presets->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { @@ -368,15 +381,16 @@ Slic3r::GUI::PageShp Tab::add_options_page(const wxString& title, const std::str #else auto panel = this; #endif - PageShp page(new Page(panel, title, icon_idx, m_mode_bitmap_cache)); + PageShp page(new Page(/*panel*/m_page_view, title, icon_idx, m_mode_bitmap_cache)); // page->SetBackgroundStyle(wxBG_STYLE_SYSTEM); #ifdef __WINDOWS__ // page->SetDoubleBuffered(true); #endif //__WINDOWS__ - page->SetScrollbars(1, 20, 1, 2); - page->Hide(); - m_hsizer->Add(page.get(), 1, wxEXPAND | wxLEFT, 5); + //page->SetScrollbars(1, 20, 1, 2); + //page->Hide(); + //m_hsizer->Add(page.get(), 1, wxEXPAND | wxLEFT, 5); +// m_hsizer->Add(page->vsizer(), 1, wxEXPAND | wxLEFT, 5); if (!is_extruder_pages) m_pages.push_back(page); @@ -398,7 +412,7 @@ void Tab::OnActivate() // create controls on active page active_selected_page(); - m_active_page->Show(); +// m_active_page->Show(); m_hsizer->Layout(); Refresh(); } @@ -2562,12 +2576,12 @@ void TabPrinter::build_unregular_pages() /* Workaround for correct layout of controls inside the created page: * In some _strange_ way we should we should imitate page resizing. */ - auto layout_page = [this](PageShp page) +/* auto layout_page = [this](PageShp page) { const wxSize& sz = page->GetSize(); page->SetSize(sz.x + 1, sz.y + 1); page->SetSize(sz); - }; + };*/ #endif //__WXMSW__ // Add/delete Kinematics page according to is_marlin_flavor @@ -2584,7 +2598,7 @@ void TabPrinter::build_unregular_pages() if (existed_page < n_before_extruders && is_marlin_flavor) { auto page = build_kinematics_page(); #ifdef __WXMSW__ - layout_page(page); +// layout_page(page); #endif m_pages.insert(m_pages.begin() + n_before_extruders, page); } @@ -2722,7 +2736,7 @@ void TabPrinter::build_unregular_pages() optgroup->append_line(line); #ifdef __WXMSW__ - layout_page(page); +// layout_page(page); #endif } @@ -2762,8 +2776,8 @@ void TabPrinter::update_pages() return; // hide all old pages - for (auto& el : m_pages) - el.get()->Hide(); + //for (auto& el : m_pages) + // el.get()->Hide(); // set m_pages to m_pages_(technology before changing) m_printer_technology == ptFFF ? m_pages.swap(m_pages_fff) : m_pages.swap(m_pages_sla); @@ -3320,9 +3334,11 @@ void Tab::clear_pages() { // invalidated highlighter, if any exists m_highlighter.invalidate(); + m_page_sizer->Clear(true); // clear pages from the controlls for (auto p : m_pages) - p->clear(); + p->clear(); + int i = m_page_sizer->GetItemCount(); // nulling pointers m_parent_preset_description_line = nullptr; @@ -3369,7 +3385,7 @@ void Tab::OnTreeSelChange(wxTreeEvent& event) * so on Window is no needed to call a Freeze/Thaw functions. * But under OSX (builds compiled with MacOSX10.14.sdk) wxStaticBitmap rendering is broken without Freeze/Thaw call. */ -//#ifdef __WXOSX__ // Use Freeze/Thaw to avoid flickering during cleare/activate new page +//#ifdef __WXOSX__ // Use Freeze/Thaw to avoid flickering during clear/activate new page wxWindowUpdateLocker noUpdates(this); //#endif #endif @@ -3394,12 +3410,12 @@ void Tab::OnTreeSelChange(wxTreeEvent& event) m_active_page = page; clear_pages(); - for (auto& el : m_pages) - el.get()->Hide(); + //for (auto& el : m_pages) + // el.get()->Hide(); if (wxGetApp().mainframe->is_active_and_shown_tab(this)) { active_selected_page(); - m_active_page->Show(); +// m_active_page->Show(); } #ifdef __linux__ @@ -3843,10 +3859,11 @@ Page::Page(wxWindow* parent, const wxString& title, const int iconID, const std: m_iconID(iconID), m_mode_bitmap_cache(mode_bmp_cache) { - Create(m_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - m_vsizer = new wxBoxSizer(wxVERTICAL); +// Create(m_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); +// m_vsizer = new wxBoxSizer(wxVERTICAL); + m_vsizer = (wxBoxSizer*)parent->GetSizer(); m_item_color = &wxGetApp().get_label_clr_default(); - SetSizer(m_vsizer); +// SetSizer(m_vsizer); } void Page::reload_config() @@ -3870,8 +3887,12 @@ void Page::update_visibility(ConfigOptionMode mode, bool update_contolls_visibil void Page::activate(ConfigOptionMode mode) { + //if (m_parent) + //m_parent->SetSizer(m_vsizer); for (auto group : m_optgroups) { - group->activate(); + if (!group->activate()) + continue; + m_vsizer->Add(group->sizer, 0, wxEXPAND | wxALL, 10); group->update_visibility(mode); group->reload_config(); } @@ -3910,7 +3931,7 @@ bool Page::set_value(const t_config_option_key& opt_key, const boost::any& value bool changed = false; for(auto optgroup: m_optgroups) { if (optgroup->set_value(opt_key, value)) - changed = 1 ; + changed = true ; } return changed; } @@ -3933,15 +3954,15 @@ ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_la }; //! config_ have to be "right" - ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(this, title, m_config, true, extra_column); + ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(/*this*/m_parent, title, m_config, true, extra_column); optgroup->config_category = m_title.ToStdString(); if (noncommon_label_width >= 0) optgroup->label_width = noncommon_label_width; #ifdef __WXOSX__ - auto tab = GetParent()->GetParent(); + auto tab = parent()->GetParent()->GetParent();// GetParent()->GetParent(); #else - auto tab = GetParent(); + auto tab = parent()->GetParent();// GetParent(); #endif optgroup->m_on_change = [this, tab](t_config_option_key opt_key, boost::any value) { //! This function will be called from OptionGroup. @@ -3975,7 +3996,7 @@ ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_la ctrl->SetBitmap(reinterpret_cast<ScalableBitmap*>(ctrl->GetClientData())->bmp()); }; - vsizer()->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 10); +// vsizer()->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 10); m_optgroups.push_back(optgroup); return optgroup; diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 0a9d17c0e..9df68592b 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -44,7 +44,7 @@ class TabPresetComboBox; // Single Tab page containing a{ vsizer } of{ optgroups } // package Slic3r::GUI::Tab::Page; using ConfigOptionsGroupShp = std::shared_ptr<ConfigOptionsGroup>; -class Page : public wxScrolledWindow +class Page// : public wxScrolledWindow { wxWindow* m_parent; wxString m_title; @@ -127,6 +127,9 @@ protected: wxTreeCtrl* m_treectrl; wxImageList* m_icons; + wxScrolledWindow* m_page_view {nullptr}; + wxBoxSizer* m_page_sizer {nullptr}; + ModeSizer* m_mode_sizer; struct PresetDependencies {