From 3fdefbfbea324aa5940811a06b418290d966ecbd Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 22 Jun 2018 13:01:41 +0200 Subject: [PATCH 1/2] Added updatin of the "Machine limits" page according to "use silent mode" --- xs/src/slic3r/GUI/Tab.cpp | 57 ++++++++++++++++++++++----------------- xs/src/slic3r/GUI/Tab.hpp | 3 +++ 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 583773c1e7..1703884348 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -1631,8 +1631,14 @@ void TabPrinter::build() optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value){ wxTheApp->CallAfter([this, opt_key, value](){ - if (opt_key.compare("gcode_flavor") == 0) - build_extruder_pages(); + if (opt_key.compare("silent_mode") == 0) { + bool val = boost::any_cast(value); + if (m_use_silent_mode != val) { + m_rebuil_kinematics_page = true; + m_use_silent_mode = val; + } + } + build_extruder_pages(); update_dirty(); on_value_change(opt_key, value); }); @@ -1718,12 +1724,13 @@ void TabPrinter::extruders_count_changed(size_t extruders_count){ on_value_change("extruders_count", extruders_count); } -void append_option_line(ConfigOptionsGroupShp optgroup, const std::string opt_key) +void TabPrinter::append_option_line(ConfigOptionsGroupShp optgroup, const std::string opt_key) { auto option = optgroup->get_option(opt_key, 0); auto line = Line{ option.opt.full_label, "" }; line.append_option(option); - line.append_option(optgroup->get_option(opt_key, 1)); + if (m_use_silent_mode) + line.append_option(optgroup->get_option(opt_key, 1)); optgroup->append_line(line); } @@ -1731,31 +1738,33 @@ PageShp TabPrinter::create_kinematics_page() { auto page = add_options_page(_(L("Machine limits")), "cog.png", true); - // Legend for OptionsGroups - auto optgroup = page->new_optgroup(_(L(""))); - optgroup->set_show_modified_btns_val(false); - optgroup->label_width = 230; - auto line = Line{ "", "" }; + if (m_use_silent_mode) { + // Legend for OptionsGroups + auto optgroup = page->new_optgroup(_(L(""))); + optgroup->set_show_modified_btns_val(false); + optgroup->label_width = 230; + auto line = Line{ "", "" }; - ConfigOptionDef def; - def.type = coString; - def.width = 150; - def.gui_type = "legend"; - def.tooltip = L("Values in this column are for Full Power mode"); - def.default_value = new ConfigOptionString{ L("Full Power")}; + ConfigOptionDef def; + def.type = coString; + def.width = 150; + def.gui_type = "legend"; + def.tooltip = L("Values in this column are for Full Power mode"); + def.default_value = new ConfigOptionString{ L("Full Power") }; - auto option = Option(def, "full_power_legend"); - line.append_option(option); + auto option = Option(def, "full_power_legend"); + line.append_option(option); - def.tooltip = L("Values in this column are for Silent mode"); - def.default_value = new ConfigOptionString{ L("Silent") }; - option = Option(def, "silent_legend"); - line.append_option(option); + def.tooltip = L("Values in this column are for Silent mode"); + def.default_value = new ConfigOptionString{ L("Silent") }; + option = Option(def, "silent_legend"); + line.append_option(option); - optgroup->append_line(line); + optgroup->append_line(line); + } std::vector axes{ "x", "y", "z", "e" }; - optgroup = page->new_optgroup(_(L("Maximum accelerations"))); + auto optgroup = page->new_optgroup(_(L("Maximum accelerations"))); for (const std::string &axis : axes) { append_option_line(optgroup, "machine_max_acceleration_" + axis); } @@ -1789,7 +1798,7 @@ void TabPrinter::build_extruder_pages() size_t existed_page = 0; for (int i = n_before_extruders; i < m_pages.size(); ++i) // first make sure it's not there already if (m_pages[i]->title().find(_(L("Machine limits"))) != std::string::npos) { - if (!is_marlin_flavor) + if (!is_marlin_flavor || m_rebuil_kinematics_page) m_pages.erase(m_pages.begin() + i); else existed_page = i; diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp index ab63bcc783..90bb40b9ed 100644 --- a/xs/src/slic3r/GUI/Tab.hpp +++ b/xs/src/slic3r/GUI/Tab.hpp @@ -313,6 +313,9 @@ public: class TabPrinter : public Tab { bool m_has_single_extruder_MM_page = false; + bool m_use_silent_mode = false; + void append_option_line(ConfigOptionsGroupShp optgroup, const std::string opt_key); + bool m_rebuil_kinematics_page = false; public: wxButton* m_serial_test_btn; wxButton* m_octoprint_host_test_btn; From 54c90ee9488be6cac3df4d9fb6231fbd828a7059 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 22 Jun 2018 16:13:34 +0200 Subject: [PATCH 2/2] Updated PrintConfig default values for machine limits + fixed incorrect default value setting for the TextCtrl --- xs/src/libslic3r/PrintConfig.cpp | 28 ++++++++++++++-------------- xs/src/slic3r/GUI/Field.cpp | 32 +++++++++++++++++++++++--------- xs/src/slic3r/GUI/Field.hpp | 1 + xs/src/slic3r/GUI/Tab.cpp | 4 ++-- xs/src/slic3r/GUI/Tab.hpp | 2 +- 5 files changed, 41 insertions(+), 26 deletions(-) diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 68fc2da244..a59a835f4a 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -861,7 +861,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = L("Set silent mode for the G-code flavor"); def->default_value = new ConfigOptionBool(true); - const int machine_linits_opt_width = 70; + const int machine_limits_opt_width = 70; { struct AxisDefault { std::string name; @@ -871,10 +871,10 @@ PrintConfigDef::PrintConfigDef() }; std::vector axes { // name, max_feedrate, max_acceleration, max_jerk - { "x", { 200., 200. }, { 1000., 1000. }, { 10., 10. } }, - { "y", { 200., 200. }, { 1000., 1000. }, { 10., 10. } }, - { "z", { 12., 12. }, { 200., 200. }, { 0.4, 0.4 } }, - { "e", { 120., 120. }, { 5000., 5000. }, { 2.5, 2.5 } } + { "x", { 500., 200. }, { 9000., 1000. }, { 10., 10. } }, + { "y", { 500., 200. }, { 9000., 1000. }, { 10., 10. } }, + { "z", { 12., 12. }, { 500., 200. }, { 0.2, 0.4 } }, + { "e", { 120., 120. }, { 10000., 5000. }, { 2.5, 2.5 } } }; for (const AxisDefault &axis : axes) { std::string axis_upper = boost::to_upper_copy(axis.name); @@ -885,7 +885,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = (boost::format(L("Maximum feedrate of the %1% axis")) % axis_upper).str(); def->sidetext = L("mm/s"); def->min = 0; - def->width = machine_linits_opt_width; + def->width = machine_limits_opt_width; def->default_value = new ConfigOptionFloats(axis.max_feedrate); // Add the machine acceleration limits for XYZE axes (M201) def = this->add("machine_max_acceleration_" + axis.name, coFloats); @@ -894,7 +894,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = (boost::format(L("Maximum acceleration of the %1% axis")) % axis_upper).str(); def->sidetext = L("mm/s²"); def->min = 0; - def->width = machine_linits_opt_width; + def->width = machine_limits_opt_width; def->default_value = new ConfigOptionFloats(axis.max_acceleration); // Add the machine jerk limits for XYZE axes (M205) def = this->add("machine_max_jerk_" + axis.name, coFloats); @@ -903,7 +903,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = (boost::format(L("Maximum jerk of the %1% axis")) % axis_upper).str(); def->sidetext = L("mm/s"); def->min = 0; - def->width = machine_linits_opt_width; + def->width = machine_limits_opt_width; def->default_value = new ConfigOptionFloats(axis.max_jerk); } } @@ -915,7 +915,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = L("Minimum feedrate when extruding") + " (M205 S)"; def->sidetext = L("mm/s"); def->min = 0; - def->width = machine_linits_opt_width; + def->width = machine_limits_opt_width; def->default_value = new ConfigOptionFloats{ 0., 0. }; // M205 T... [mm/sec] @@ -925,7 +925,7 @@ PrintConfigDef::PrintConfigDef() def->tooltip = L("Minimum travel feedrate") + " (M205 T)"; def->sidetext = L("mm/s"); def->min = 0; - def->width = machine_linits_opt_width; + def->width = machine_limits_opt_width; def->default_value = new ConfigOptionFloats{ 0., 0. }; // M204 S... [mm/sec^2] @@ -935,8 +935,8 @@ PrintConfigDef::PrintConfigDef() def->tooltip = L("Maximum acceleration when extruding") + " (M204 S)"; def->sidetext = L("mm/s²"); def->min = 0; - def->width = machine_linits_opt_width; - def->default_value = new ConfigOptionFloats(1250., 1250.); + def->width = machine_limits_opt_width; + def->default_value = new ConfigOptionFloats(1500., 1250.); // M204 T... [mm/sec^2] def = this->add("machine_max_acceleration_retracting", coFloats); @@ -945,8 +945,8 @@ PrintConfigDef::PrintConfigDef() def->tooltip = L("Maximum acceleration when retracting") + " (M204 T)"; def->sidetext = L("mm/s²"); def->min = 0; - def->width = machine_linits_opt_width; - def->default_value = new ConfigOptionFloats(1250., 1250.); + def->width = machine_limits_opt_width; + def->default_value = new ConfigOptionFloats(1500., 1250.); def = this->add("max_fan_speed", coInts); def->label = L("Max"); diff --git a/xs/src/slic3r/GUI/Field.cpp b/xs/src/slic3r/GUI/Field.cpp index ba59225f6e..57420a4112 100644 --- a/xs/src/slic3r/GUI/Field.cpp +++ b/xs/src/slic3r/GUI/Field.cpp @@ -35,6 +35,22 @@ namespace Slic3r { namespace GUI { set_undo_bitmap(&bmp); set_undo_to_sys_bitmap(&bmp); + switch (m_opt.type) + { + case coPercents: + case coFloats: + case coStrings: + case coBools: + case coInts: { + auto tag_pos = m_opt_id.find("#"); + if (tag_pos != std::string::npos) + m_opt_idx = stoi(m_opt_id.substr(tag_pos + 1, m_opt_id.size())); + break; + } + default: + break; + } + BUILD(); } @@ -151,10 +167,10 @@ namespace Slic3r { namespace GUI { case coFloat: { double val = m_opt.type == coFloats ? - static_cast(m_opt.default_value)->get_at(0) : + static_cast(m_opt.default_value)->get_at(m_opt_idx) : m_opt.type == coFloat ? m_opt.default_value->getFloat() : - static_cast(m_opt.default_value)->get_at(0); + static_cast(m_opt.default_value)->get_at(m_opt_idx); text_value = double_to_string(val); break; } @@ -164,10 +180,8 @@ namespace Slic3r { namespace GUI { case coStrings: { const ConfigOptionStrings *vec = static_cast(m_opt.default_value); - if (vec == nullptr || vec->empty()) break; - if (vec->size() > 1) - break; - text_value = vec->values.at(0); + if (vec == nullptr || vec->empty()) break; //for the case of empty default value + text_value = vec->get_at(m_opt_idx); break; } default: @@ -249,7 +263,7 @@ void CheckBox::BUILD() { bool check_value = m_opt.type == coBool ? m_opt.default_value->getBool() : m_opt.type == coBools ? - static_cast(m_opt.default_value)->values.at(0) : + static_cast(m_opt.default_value)->get_at(m_opt_idx) : false; auto temp = new wxCheckBox(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size); @@ -408,7 +422,7 @@ void Choice::set_selection() break; } case coStrings:{ - text_value = static_cast(m_opt.default_value)->values.at(0); + text_value = static_cast(m_opt.default_value)->get_at(m_opt_idx); size_t idx = 0; for (auto el : m_opt.enum_values) @@ -572,7 +586,7 @@ void ColourPicker::BUILD() if (m_opt.height >= 0) size.SetHeight(m_opt.height); if (m_opt.width >= 0) size.SetWidth(m_opt.width); - wxString clr(static_cast(m_opt.default_value)->values.at(0)); + wxString clr(static_cast(m_opt.default_value)->get_at(m_opt_idx)); auto temp = new wxColourPickerCtrl(m_parent, wxID_ANY, clr, wxDefaultPosition, size); // // recast as a wxWindow to fit the calling convention diff --git a/xs/src/slic3r/GUI/Field.hpp b/xs/src/slic3r/GUI/Field.hpp index fb6116b79c..db8d2a4085 100644 --- a/xs/src/slic3r/GUI/Field.hpp +++ b/xs/src/slic3r/GUI/Field.hpp @@ -95,6 +95,7 @@ public: /// Copy of ConfigOption for deduction purposes const ConfigOptionDef m_opt {ConfigOptionDef()}; const t_config_option_key m_opt_id;//! {""}; + int m_opt_idx = 0; /// Sets a value for this control. /// subclasses should overload with a specific version diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 1703884348..4935d8dcde 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -1734,7 +1734,7 @@ void TabPrinter::append_option_line(ConfigOptionsGroupShp optgroup, const std::s optgroup->append_line(line); } -PageShp TabPrinter::create_kinematics_page() +PageShp TabPrinter::build_kinematics_page() { auto page = add_options_page(_(L("Machine limits")), "cog.png", true); @@ -1806,7 +1806,7 @@ void TabPrinter::build_extruder_pages() } if (existed_page < n_before_extruders && is_marlin_flavor){ - auto page = create_kinematics_page(); + auto page = build_kinematics_page(); m_pages.insert(m_pages.begin() + n_before_extruders, page); } diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp index 90bb40b9ed..4906b8d1ef 100644 --- a/xs/src/slic3r/GUI/Tab.hpp +++ b/xs/src/slic3r/GUI/Tab.hpp @@ -333,7 +333,7 @@ public: void update() override; void update_serial_ports(); void extruders_count_changed(size_t extruders_count); - PageShp create_kinematics_page(); + PageShp build_kinematics_page(); void build_extruder_pages(); void on_preset_loaded() override; void init_options_list() override;