From 6850d9d6c4d10aab733d9960b7fed3687f2b3d49 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Mon, 16 Sep 2019 10:49:51 +0200 Subject: Duplicate of https://github.com/prusa3d/PrusaSlicer/commit/284355d3786d80687a37067d1083d6f70963aa5f --- src/slic3r/GUI/GUI_ObjectSettings.cpp | 35 +++++++++++++++++++++++++++++++++-- src/slic3r/GUI/GUI_ObjectSettings.hpp | 5 +++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index c90e1e4ed..adb549617 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -116,7 +116,7 @@ bool ObjectSettings::update_settings_list() auto optgroup = std::make_shared(m_og->ctrl_parent(), _(cat.first), config, false, extra_column); optgroup->label_width = 15; - optgroup->sidetext_width = 5.5; + optgroup->sidetext_width = 5; optgroup->m_on_change = [this, config](const t_config_option_key& opt_id, const boost::any& value) { this->update_config_values(config); @@ -168,6 +168,23 @@ bool ObjectSettings::update_settings_list() return true; } +bool ObjectSettings::add_missed_options(DynamicPrintConfig* config_to, const DynamicPrintConfig& config_from) +{ + bool is_added = false; + if (wxGetApp().plater()->printer_technology() == ptFFF) + { + if (config_to->has("fill_density") && !config_to->has("fill_pattern")) + { + if (config_from.option("fill_density")->value == 100) { + config_to->set_key_value("fill_pattern", config_from.option("fill_pattern")->clone()); + is_added = true; + } + } + } + + return is_added; +} + void ObjectSettings::update_config_values(DynamicPrintConfig* config) { const auto objects_model = wxGetApp().obj_list()->GetModel(); @@ -185,6 +202,12 @@ void ObjectSettings::update_config_values(DynamicPrintConfig* config) auto load_config = [this, config, &main_config]() { + /* Additional check for overrided options. + * There is a case, when some options should to be added, + * to avoid check loop in the next configuration update + */ + bool is_added = add_missed_options(config, main_config); + // load checked values from main_config to config config->apply_only(main_config, config->keys(), true); // Initialize UI components with the config values. @@ -192,6 +215,14 @@ void ObjectSettings::update_config_values(DynamicPrintConfig* config) og->reload_config(); // next config check update_config_values(config); + + if (is_added) { + wxTheApp->CallAfter([this]() { + wxWindowUpdateLocker noUpdates(m_parent); + update_settings_list(); + m_parent->Layout(); + }); + } }; auto get_field = [this](const t_config_option_key & opt_key, int opt_index) @@ -241,4 +272,4 @@ void ObjectSettings::msw_rescale() } } //namespace GUI -} //namespace Slic3r \ No newline at end of file +} //namespace Slic3r diff --git a/src/slic3r/GUI/GUI_ObjectSettings.hpp b/src/slic3r/GUI/GUI_ObjectSettings.hpp index 61d90600b..76adc945b 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.hpp @@ -48,6 +48,11 @@ public: ~ObjectSettings() {} bool update_settings_list(); + /* Additional check for override options: Add options, if its needed. + * Example: if Infill is set to 100%, and Fill Pattern is missed in config_to, + * we should add fill_pattern to avoid endless loop in update + */ + bool add_missed_options(DynamicPrintConfig *config_to, const DynamicPrintConfig &config_from); void update_config_values(DynamicPrintConfig*config); void UpdateAndShow(const bool show) override; void msw_rescale(); -- cgit v1.2.3