diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 3b77e0873..920db9581 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -721,6 +721,14 @@ wxMenu* ObjectList::create_settings_popupmenu(bool is_part) return menu; } +void ObjectList::update_opt_keys(t_config_option_keys& opt_keys) +{ + auto full_current_opts = get_options(false); + for (int i = opt_keys.size()-1; i >= 0; --i) + if (find(full_current_opts.begin(), full_current_opts.end(), opt_keys[i]) == full_current_opts.end()) + opt_keys.erase(opt_keys.begin() + i); +} + void ObjectList::load_subobject(int type) { auto item = GetSelection(); @@ -1549,5 +1557,17 @@ bool ObjectList::has_multi_part_objects() return false; } +void ObjectList::update_settings_items() +{ + wxDataViewItemArray items; + m_objects_model->GetChildren(wxDataViewItem(0), items); + + for (auto& item : items) { + const wxDataViewItem& settings_item = m_objects_model->GetSettingsItem(item); + select_item(settings_item ? settings_item : m_objects_model->AddSettingsChild(item)); + } + UnselectAll(); +} + } //namespace GUI } //namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 4a51a5f9f..b65860659 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -102,6 +102,8 @@ public: wxMenu* create_part_popupmenu(); wxMenu* create_settings_popupmenu(bool is_part); + void update_opt_keys(t_config_option_keys& t_optopt_keys); + void load_subobject(int type); void load_part(ModelObject* model_object, wxArrayString& part_names, int type); void load_generic_subobject(const std::string& type_name, const int type); @@ -167,6 +169,7 @@ public: void last_volume_is_deleted(const int obj_idx); bool has_multi_part_objects(); + void update_settings_items(); }; diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index 802f35514..477b0530b 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -92,6 +92,8 @@ void ObjectSettings::update_settings_list() std::map> cat_options; auto opt_keys = config->keys(); + objects_ctrl->update_opt_keys(opt_keys); // update options list according to print technology + m_og_settings.resize(0); std::vector categories; if (!(opt_keys.size() == 1 && opt_keys[0] == "extruder"))// return; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0ea0d1b16..af5c79bd3 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2006,6 +2006,8 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) // update plater with new config wxGetApp().plater()->on_config_change(wxGetApp().preset_bundle->full_config()); + if (preset_type == Preset::TYPE_PRINTER) + wxGetApp().obj_list()->update_settings_items(); } void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)