diff --git a/xs/src/slic3r/GUI/Field.cpp b/xs/src/slic3r/GUI/Field.cpp index 2161e8ec6..aed7ba12f 100644 --- a/xs/src/slic3r/GUI/Field.cpp +++ b/xs/src/slic3r/GUI/Field.cpp @@ -294,8 +294,10 @@ void Choice::BUILD() { if (m_opt.enum_labels.empty() && m_opt.enum_values.empty()){ } else{ - for (auto el : m_opt.enum_labels.empty() ? m_opt.enum_values : m_opt.enum_labels) - temp->Append(wxString(el)); + for (auto el : m_opt.enum_labels.empty() ? m_opt.enum_values : m_opt.enum_labels){ + const wxString& str = m_opt_id == "support" ? L_str(el) : el; + temp->Append(str); + } set_selection(); } temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId()); @@ -444,6 +446,9 @@ boost::any Choice::get_value() boost::any ret_val; wxString ret_str = static_cast(window)->GetValue(); + if (m_opt_id == "support") + return ret_str; + if (m_opt.type != coEnum) ret_val = get_value_by_opt_type(ret_str); else diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index dc357db0a..efaffd1a0 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -180,6 +180,7 @@ std::vector g_tabs_list; wxLocale* g_wxLocale; std::shared_ptr m_optgroup; +double m_brim_width = 0.0; void set_wxapp(wxApp *app) { @@ -608,9 +609,8 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl { DynamicPrintConfig* config = &g_PresetBundle->prints.get_edited_preset().config; m_optgroup = std::make_shared(parent, "", config); - //preset_sizer->RecalcSizes(); const wxArrayInt& ar = preset_sizer->GetColWidths(); - m_optgroup->label_width = 90;//ar.IsEmpty() ? 90 : ar.front(); + m_optgroup->label_width = ar.IsEmpty() ? 100 : ar.front(); m_optgroup->m_on_change = [config](t_config_option_key opt_key, boost::any value){ TabPrint* tab_print = nullptr; for (size_t i = 0; i < g_wxTabPanel->GetPageCount(); ++i) { @@ -629,46 +629,71 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl value = m_optgroup->get_config_value(*config, opt_key); tab_print->set_value(opt_key, value); } - - if (opt_key == "brim"){ - if (boost::any_cast(value) == true) - { - double brim_width = config->opt_float("brim_width");// m_optgroup->get_config_value(*config, "brim_width"); - if (brim_width == 0.0) - tab_print->set_value("brim_width", wxString("10")); + else{ + DynamicPrintConfig new_conf = *config; + if (opt_key == "brim"){ + double new_val; + double brim_width = config->opt_float("brim_width"); + if (boost::any_cast(value) == true) + { + new_val = m_brim_width == 0.0 ? 10 : + m_brim_width < 0.0 ? m_brim_width * (-1) : + m_brim_width; + } + else{ + m_brim_width = brim_width * (-1); + new_val = 0; + } + new_conf.set_key_value("brim_width", new ConfigOptionFloat(new_val)); } - else - tab_print->set_value("brim_width", wxString("0")); + else{ //(opt_key == "support") + const wxString& selection = boost::any_cast(value); + + auto support_material = selection == _("None") ? false : true; + new_conf.set_key_value("support_material", new ConfigOptionBool(support_material)); + + if (selection == _("Everywhere")) + new_conf.set_key_value("support_material_buildplate_only", new ConfigOptionBool(false)); + else if (selection == _("Support on build plate only")) + new_conf.set_key_value("support_material_buildplate_only", new ConfigOptionBool(true)); + } + tab_print->load_config(new_conf); } tab_print->update_dirty(); - }; + const int width = 250; Option option = m_optgroup->get_option("fill_density"); option.opt.sidetext = ""; - option.opt.width = 200; + option.opt.width = width; m_optgroup->append_single_option_line(option); ConfigOptionDef def; def.label = L("Support"); - def.type = coString; + def.type = coStrings; def.gui_type = "select_open"; def.tooltip = L("Select what kind of support do you need"); def.enum_labels.push_back(L("None")); def.enum_labels.push_back(L("Support on build plate only")); def.enum_labels.push_back(L("Everywhere")); - def.default_value = new ConfigOptionString(L("None")); + std::string selection = !config->opt_bool("support_material") ? + "None" : + config->opt_bool("support_material_buildplate_only") ? + "Support on build plate only" : + "Everywhere"; + def.default_value = new ConfigOptionStrings { selection }; option = Option(def, "support"); - option.opt.width = 200; + option.opt.width = width; m_optgroup->append_single_option_line(option); + m_brim_width = config->opt_float("brim_width"); def.label = L("Brim"); def.type = coBool; def.tooltip = L("This flag enables the brim that will be printed around each object on the first layer."); - def.default_value = new ConfigOptionBool{ false }; // 1; def.gui_type = ""; + def.default_value = new ConfigOptionBool{ m_brim_width > 0.0 ? true : false }; option = Option(def, "brim"); m_optgroup->append_single_option_line(option); diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 066519650..b30738700 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -315,9 +315,14 @@ void Tab::on_value_change(std::string opt_key, boost::any value) value = get_optgroup()->get_config_value(*m_config, opt_key); get_optgroup()->set_value(opt_key, value); } - if (opt_key == "support") + if (opt_key == "support_material" || opt_key == "support_material_buildplate_only") { - + wxString new_selection = !m_config->opt_bool("support_material") ? + _("None") : + m_config->opt_bool("support_material_buildplate_only") ? + _("Support on build plate only") : + _("Everywhere"); + get_optgroup()->set_value("support", new_selection); } if (opt_key == "brim_width") { @@ -343,6 +348,22 @@ void Tab::on_presets_changed() } } +void Tab::update_frequently_changed_parameters() +{ + boost::any value = get_optgroup()->get_config_value(*m_config, "fill_density"); + get_optgroup()->set_value("fill_density", value); + + wxString new_selection = !m_config->opt_bool("support_material") ? + _("None") : + m_config->opt_bool("support_material_buildplate_only") ? + _("Support on build plate only") : + _("Everywhere"); + get_optgroup()->set_value("support", new_selection); + + bool val = m_config->opt_float("brim_width") > 0.0 ? true : false; + get_optgroup()->set_value("brim", val); +} + void Tab::reload_compatible_printers_widget() { bool has_any = !m_config->option("compatible_printers")->values.empty(); @@ -1388,15 +1409,13 @@ void TabPrinter::update(){ void Tab::load_current_preset() { auto preset = m_presets->get_edited_preset(); -// try{ -// local $SIG{ __WARN__ } = Slic3r::GUI::warning_catcher($self); - preset.is_default ? m_btn_delete_preset->Disable() : m_btn_delete_preset->Enable(true); - update(); - // For the printer profile, generate the extruder pages. - on_preset_loaded(); - // Reload preset pages with the new configuration values. - reload_config(); -// }; + preset.is_default ? m_btn_delete_preset->Disable() : m_btn_delete_preset->Enable(true); + update(); + // For the printer profile, generate the extruder pages. + on_preset_loaded(); + // Reload preset pages with the new configuration values. + reload_config(); + // use CallAfter because some field triggers schedule on_change calls using CallAfter, // and we don't want them to be called after this update_dirty() as they would mark the // preset dirty again @@ -1407,6 +1426,11 @@ void Tab::load_current_preset() return; update_tab_ui(); on_presets_changed(); + + if (name() == "print"){ + update_frequently_changed_parameters(); + update_changed_ui(); + } }); } diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp index 4745aa732..e2dc51ee4 100644 --- a/xs/src/slic3r/GUI/Tab.hpp +++ b/xs/src/slic3r/GUI/Tab.hpp @@ -173,6 +173,7 @@ public: protected: void on_presets_changed(); + void update_frequently_changed_parameters(); }; //Slic3r::GUI::Tab::Print;