diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 585d514f10..4cfe06c30d 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -42,14 +42,14 @@ void ConfigManipulation::toggle_field(const std::string &opt_key, const bool tog cb_toggle_field(opt_key, toggle, opt_index); } -void ConfigManipulation::toggle_line(const std::string& opt_key, const bool toggle) +void ConfigManipulation::toggle_line(const std::string& opt_key, const bool toggle, int opt_index) { if (local_config) { if (local_config->option(opt_key) == nullptr) return; } if (cb_toggle_line) - cb_toggle_line(opt_key, toggle); + cb_toggle_line(opt_key, toggle, opt_index); } void ConfigManipulation::check_nozzle_recommended_temperature_range(DynamicPrintConfig *config) { diff --git a/src/slic3r/GUI/ConfigManipulation.hpp b/src/slic3r/GUI/ConfigManipulation.hpp index fec8d08f4d..f056a79682 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -3,7 +3,7 @@ /* Class for validation config options * and update (enable/disable) IU components - * + * * Used for config validation for global config (Print Settings Tab) * and local config (overrides options on sidebar) * */ @@ -25,11 +25,11 @@ class ConfigManipulation bool m_support_material_overhangs_queried{ false }; bool is_BBL_Printer{false}; - // function to loading of changed configuration + // function to loading of changed configuration std::function load_config = nullptr; std::function cb_toggle_field = nullptr; - std::function cb_toggle_line = nullptr; - // callback to propagation of changed value, if needed + std::function cb_toggle_line = nullptr; + // callback to propagation of changed value, if needed std::function cb_value_change = nullptr; //BBS: change local config to const DynamicPrintConfig const DynamicPrintConfig* local_config = nullptr; @@ -41,7 +41,7 @@ class ConfigManipulation public: ConfigManipulation(std::function load_config, std::function cb_toggle_field, - std::function cb_toggle_line, + std::function cb_toggle_line, std::function cb_value_change, //BBS: change local config to DynamicPrintConfig const DynamicPrintConfig* local_config = nullptr, @@ -66,7 +66,7 @@ public: void apply(DynamicPrintConfig* config, DynamicPrintConfig* new_config); t_config_option_keys const &applying_keys() const; void toggle_field(const std::string& field_key, const bool toggle, int opt_index = -1); - void toggle_line(const std::string& field_key, const bool toggle); + void toggle_line(const std::string& field_key, const bool toggle, int opt_index = -1); // FFF print void update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config = false, const bool is_plate_config = false); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 10578be691..e2085cbd46 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -290,7 +290,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ if (field) field->toggle(toggle); }; - auto toggle_line = [this, optgroup](const t_config_option_key & opt_key, bool toggle) + auto toggle_line = [this, optgroup](const t_config_option_key &opt_key, bool toggle, int opt_index) { Line* line = optgroup->get_line(opt_key); if (line) line->toggle_visible = toggle; @@ -392,7 +392,7 @@ void ObjectTableSettings::update_config_values(bool is_object, ModelObject* obje if (field) field->toggle(toggle); }; - auto toggle_line = [this](const t_config_option_key &opt_key, bool toggle) { + auto toggle_line = [this](const t_config_option_key &opt_key, bool toggle, int opt_index) { for (auto og : m_og_settings) { Line *line = og->get_line(opt_key); if (line) { line->toggle_visible = toggle; break; } diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index fba9802fea..6fa4702af8 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -1243,17 +1243,11 @@ boost::any ConfigOptionsGroup::get_config_value2(const DynamicPrintConfig& confi Field* ConfigOptionsGroup::get_fieldc(const t_config_option_key& opt_key, int opt_index) { - Field* field = get_field(opt_key); + Field *field = get_field(opt_key); if (field != nullptr) return field; - std::string opt_id = ""; - for (t_opt_map::iterator it = m_opt_map.begin(); it != m_opt_map.end(); ++it) { - if (opt_key == m_opt_map.at(it->first).first && opt_index == m_opt_map.at(it->first).second) { - opt_id = it->first; - break; - } - } - return opt_id.empty() ? nullptr : get_field(opt_id); + std::string opt_id = opt_key + '#' + std::to_string(opt_index); + return get_field(opt_id); } std::pair ConfigOptionsGroup::get_custom_ctrl_with_blinking_ptr(const t_config_option_key& opt_key, int opt_index/* = -1*/) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 00627e0e6c..5218ad2b5f 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1398,10 +1398,10 @@ void Tab::toggle_option(const std::string& opt_key, bool toggle, int opt_index/* field->toggle(toggle); } -void Tab::toggle_line(const std::string &opt_key, bool toggle) +void Tab::toggle_line(const std::string &opt_key, bool toggle, int opt_index) { if (!m_active_page) return; - Line *line = m_active_page->get_line(opt_key); + Line *line = m_active_page->get_line(opt_key, opt_index); if (line) line->toggle_visible = toggle; }; @@ -6577,7 +6577,8 @@ void Tab::update_extruder_variants(int extruder_id) } m_extruder_switch->SetLabels(wxString::Format(_L("Left: %s"), left), wxString::Format(_L("Right: %s"), right)); m_extruder_switch->SetValue(extruder_id == 1); - m_extruder_switch->Enable(); + m_extruder_switch->Enable(true); + assert(m_extruder_switch->IsEnabled()); } else { m_extruder_switch->Enable(false); m_main_sizer->Show(m_extruder_switch, false); @@ -6810,19 +6811,33 @@ void Page::refresh() Field *Page::get_field(const t_config_option_key &opt_key, int opt_index /*= -1*/) const { Field *field = nullptr; + auto opt_key2 = opt_key; + if (opt_index >= 256) { + auto iter = m_opt_id_map.find(opt_key + '#' + std::to_string(opt_index - 256)); + if (iter != m_opt_id_map.end()) + opt_key2 = iter->second; + } for (auto opt : m_optgroups) { - field = opt->get_fieldc(opt_key, opt_index); + field = opt->get_fieldc(opt_key2, opt_index); if (field != nullptr) return field; } return field; } -Line *Page::get_line(const t_config_option_key &opt_key) +Line *Page::get_line(const t_config_option_key &opt_key, int opt_index) { - for (auto opt : m_optgroups) - if (Line* line = opt->get_line(opt_key)) - return line; - return nullptr; + Line *line = nullptr; + auto opt_key2 = opt_key; + if (opt_index >= 256) { + auto iter = m_opt_id_map.find(opt_key + '#' + std::to_string(opt_index - 256)); + if (iter != m_opt_id_map.end()) + opt_key2 = iter->second; + } + for (auto opt : m_optgroups) { + line = opt->get_line(opt_key2); + if (line != nullptr) return line; + } + return line; } bool Page::set_value(const t_config_option_key &opt_key, const boost::any &value) @@ -7206,11 +7221,11 @@ ConfigManipulation Tab::get_config_manipulation() }; auto cb_toggle_field = [this](const t_config_option_key& opt_key, bool toggle, int opt_index) { - return toggle_option(opt_key, toggle, opt_index); + return toggle_option(opt_key, toggle, opt_index >= 0 ? opt_index + 256 : opt_index); }; - auto cb_toggle_line = [this](const t_config_option_key& opt_key, bool toggle) { - return toggle_line(opt_key, toggle); + auto cb_toggle_line = [this](const t_config_option_key &opt_key, bool toggle, int opt_index) { + return toggle_line(opt_key, toggle, opt_index >= 0 ? opt_index + 256 : opt_index); }; auto cb_value_change = [this](const std::string& opt_key, const boost::any& value) { diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 40b0f23783..6b8cc60bc8 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -96,7 +96,7 @@ public: void sys_color_changed(); void refresh(); Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const; - Line * get_line(const t_config_option_key &opt_key); + Line * get_line(const t_config_option_key &opt_key, int opt_index = -1); bool set_value(const t_config_option_key& opt_key, const boost::any& value); // BBS. Add is_extruder_og parameter. ConfigOptionsGroupShp new_optgroup(const wxString& title, const wxString& icon = wxEmptyString, int noncommon_label_width = -1, bool is_extruder_og = false); @@ -388,7 +388,7 @@ public: Field* get_field(const t_config_option_key &opt_key, Page** selected_page, int opt_index = -1); void toggle_option(const std::string &opt_key, bool toggle, int opt_index = -1); - void toggle_line(const std::string &opt_key, bool toggle); // BBS: hide some line + void toggle_line(const std::string &opt_key, bool toggle, int opt_index = -1); // BBS: hide some line wxSizer* description_line_widget(wxWindow* parent, ogStaticText** StaticText, wxString text = wxEmptyString); bool current_preset_is_dirty() const; bool saved_preset_is_dirty() const;