diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 71a48297a48..a5ba4f079d7 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -524,6 +524,7 @@ struct Sidebar::priv wxStaticLine * m_staticline1; StaticBox* m_panel_filament_title; wxStaticText* m_staticText_filament_settings; + wxStaticText* m_staticText_filament_count; ScalableButton * m_bpButton_add_filament; ScalableButton * m_bpButton_del_filament; ScalableButton * m_bpButton_ams_filament; @@ -2073,6 +2074,8 @@ Sidebar::Sidebar(Plater *parent) return; p->m_panel_filament_content->Show(!p->m_panel_filament_content->IsShown()); m_scrolled_sizer->Layout(); + + CallAfter([this]{update_filaments_counter(true);}); // call after all UI processing done }); wxBoxSizer* bSizer39; @@ -2080,11 +2083,13 @@ Sidebar::Sidebar(Plater *parent) p->m_filament_icon = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "filament"); p->m_staticText_filament_settings = new Label(p->m_panel_filament_title, _L("Project Filaments"), LB_PROPAGATE_MOUSE_EVENT); bSizer39->Add(p->m_filament_icon, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::TitlebarMargin())); - bSizer39->AddSpacer(FromDIP(SidebarProps::ElementSpacing())); - bSizer39->Add( p->m_staticText_filament_settings, 0, wxALIGN_CENTER ); - bSizer39->Add(FromDIP(10), 0, 0, 0, 0); + bSizer39->Add(p->m_staticText_filament_settings, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ElementSpacing())); bSizer39->SetMinSize(-1, FromDIP(30)); + p->m_staticText_filament_count = new Label(p->m_panel_filament_title, "(0)", LB_PROPAGATE_MOUSE_EVENT); + bSizer39->Add(p->m_staticText_filament_count, 0, wxALIGN_CENTER ); + bSizer39->Add(FromDIP(10), 0, 0, 0, 0); + p->m_panel_filament_title->SetSizer( bSizer39 ); p->m_panel_filament_title->Layout(); auto spliter_1 = new ::StaticLine(p->scrolled); @@ -2119,6 +2124,7 @@ Sidebar::Sidebar(Plater *parent) add_btn->SetToolTip(_L("Add one filament")); add_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e){ add_filament(); + update_filaments_counter(); }); p->m_bpButton_add_filament = add_btn; @@ -2128,6 +2134,7 @@ Sidebar::Sidebar(Plater *parent) del_btn->SetToolTip(_L("Remove last filament")); del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { delete_filament(); + update_filaments_counter(); }); p->m_bpButton_del_filament = del_btn; @@ -2854,6 +2861,26 @@ void Sidebar::update_filaments_area_height() if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) min_size.y = p->m_panel_filament_content->GetMaxHeight(); p->m_panel_filament_content->SetMinSize({-1, min_size.y}); + + update_filaments_counter(); +} + +void Sidebar::update_filaments_counter(bool force_layout) +// ORCA +{ + int current_count = p->combos_filament.size(); + int preferred_count = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); + bool isShown = p->m_panel_filament_content->IsShown(); + auto counter = p->m_staticText_filament_count; + + counter->SetLabel("(" + std::to_string(current_count) + ")"); // update counter on every change + if(current_count > preferred_count || !isShown) + counter->Show(); + else if (isShown) // hide when list is visible and short enough + counter->Hide(); + + if(force_layout) + m_scrolled_sizer->Layout(); } void Sidebar::msw_rescale() @@ -3161,6 +3188,13 @@ void Sidebar::add_filament() { if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) return; wxColour new_col = Plater::get_next_color_for_filament(); add_custom_filament(new_col); + + auto filament_list = p->m_panel_filament_content; + if(!filament_list->IsShown()){ + filament_list->Show(); // ORCA show list if its folded + m_scrolled_sizer->Layout(); + } + filament_list->Scroll(-1, INT_MAX); // ORCA scroll to end of list on changes to inform user about filament count } void Sidebar::delete_filament(size_t filament_id, int replace_filament_id) { @@ -3193,6 +3227,14 @@ void Sidebar::delete_filament(size_t filament_id, int replace_filament_id) { wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); wxGetApp().plater()->update(); + + auto filament_list = p->m_panel_filament_content; + if(!filament_list->IsShown()){ + filament_list->Show(); // ORCA show list if its folded + m_scrolled_sizer->Layout(); + } + + filament_list->Scroll(-1, INT_MAX); // ORCA scroll to end of list on changes to inform user about filament count } void Sidebar::change_filament(size_t from_id, size_t to_id) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index f2089c1c4fa..18254383cdb 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -173,6 +173,7 @@ public: bool reset_bed_type_combox_choices(bool is_sidebar_init = false); void change_top_border_for_mode_sizer(bool increase_border); void update_filaments_area_height(); + void update_filaments_counter(bool force_layout = false); void msw_rescale(); void sys_color_changed(); void search();