From 4de0f574fbb4630e597de20849f52e1264b521e1 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 16 Nov 2018 11:14:56 +0100 Subject: [PATCH] Fixed wrong preset comboboxes updating on sidebar after preset changing on "Printer Settings" tab --- src/slic3r/GUI/MainFrame.cpp | 10 ++++++++-- src/slic3r/GUI/Tab.cpp | 25 +++++++++++++++++++------ src/slic3r/GUI/Tab.hpp | 3 ++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index d74c1a176..ca349d1f3 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -783,7 +783,7 @@ void MainFrame::on_presets_changed(SimpleEvent &event) // Update preset combo boxes(Print settings, Filament, Material, Printer) from their respective tabs. auto presets = tab->get_presets(); if (m_plater != nullptr && presets != nullptr) { - auto reload_dependent_tabs = tab->get_dependent_tabs(); +// auto reload_dependent_tabs = tab->get_dependent_tabs(); // FIXME: The preset type really should be a property of Tab instead Slic3r::Preset::Type preset_type = tab->type(); @@ -791,7 +791,7 @@ void MainFrame::on_presets_changed(SimpleEvent &event) wxASSERT(false); return; } - +/* m_plater->sidebar().update_presets(preset_type); if (preset_type == Slic3r::Preset::TYPE_PRINTER) { @@ -809,7 +809,9 @@ void MainFrame::on_presets_changed(SimpleEvent &event) cur_tab->load_current_preset(); } } +*/ m_plater->on_config_change(*tab->get_config()); + m_plater->sidebar().update_presets(preset_type); } } @@ -842,9 +844,13 @@ void MainFrame::update_ui_from_settings() { m_menu_item_reslice_now->Enable(wxGetApp().app_config->get("background_processing") == "1"); // if (m_plater) m_plater->update_ui_from_settings(); + /* std::vector tab_names = { "print", "filament", "printer" }; for (auto tab_name: tab_names) m_options_tabs[tab_name]->update_ui_from_settings(); + */ + for (auto tab: wxGetApp().tabs_list) + tab->update_ui_from_settings(); } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index ebde3bb42..307f9fe62 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -759,6 +759,18 @@ void Tab::update_wiping_button_visibility() { // to uddate number of "filament" selection boxes when the number of extruders change. void Tab::on_presets_changed() { + if (m_type == Slic3r::Preset::TYPE_PRINTER && !m_dependent_tabs.empty()) { + // Printer selected at the Printer tab, update "compatible" marks at the print and filament selectors. + for (auto t: m_dependent_tabs) + { + // If the printer tells us that the print or filament/sla_material preset has been switched or invalidated, + // refresh the print or filament/sla_material tab page. + Tab* tab = wxGetApp().get_tab(t); + if (tab) + tab->load_current_preset(); + } + } + wxCommandEvent event(EVT_TAB_PRESETS_CHANGED); event.SetEventObject(this); wxPostEvent(this, event); @@ -2335,7 +2347,7 @@ void Tab::select_preset(std::string preset_name) auto current_dirty = m_presets->current_is_dirty(); auto printer_tab = m_presets->name() == "printer"; auto canceled = false; - m_reload_dependent_tabs = {}; + m_dependent_tabs = {}; if (current_dirty && !may_discard_current_dirty_preset()) { canceled = true; } else if (printer_tab) { @@ -2350,16 +2362,16 @@ void Tab::select_preset(std::string preset_name) PrinterTechnology old_printer_technology = m_presets->get_edited_preset().printer_technology(); PrinterTechnology new_printer_technology = new_printer_preset.printer_technology(); struct PresetUpdate { - std::string name; + Preset::Type tab_type; PresetCollection *presets; PrinterTechnology technology; bool old_preset_dirty; bool new_preset_compatible; }; std::vector updates = { - { "print", &m_preset_bundle->prints, ptFFF }, - { "filament", &m_preset_bundle->filaments, ptFFF }, - { "sla_material", &m_preset_bundle->sla_materials, ptSLA } + { Preset::Type::TYPE_PRINT, &m_preset_bundle->prints, ptFFF }, + { Preset::Type::TYPE_FILAMENT, &m_preset_bundle->filaments, ptFFF }, + { Preset::Type::TYPE_SLA_MATERIAL,&m_preset_bundle->sla_materials, ptSLA } }; for (PresetUpdate &pu : updates) { pu.old_preset_dirty = (old_printer_technology == pu.technology) && pu.presets->current_is_dirty(); @@ -2371,7 +2383,7 @@ void Tab::select_preset(std::string preset_name) for (PresetUpdate &pu : updates) { // The preset will be switched to a different, compatible preset, or the '-- default --'. if (pu.technology == new_printer_technology) - m_reload_dependent_tabs.emplace_back(pu.name); + m_dependent_tabs.emplace_back(pu.tab_type); if (pu.old_preset_dirty) pu.presets->discard_current_changes(); } @@ -2597,6 +2609,7 @@ void Tab::update_ui_from_settings() // in application preferences. m_show_btn_incompatible_presets = wxGetApp().app_config->get("show_incompatible_presets")[0] == '1' ? true : false; bool show = m_show_btn_incompatible_presets && m_presets->name().compare("printer") != 0; + Layout(); show ? m_btn_hide_incompatible_presets->Show() : m_btn_hide_incompatible_presets->Hide(); // If the 'show / hide presets' button is hidden, hide the incompatible presets. if (show) { diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 52be4f885..0f2b1b41c 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -175,6 +175,7 @@ protected: bool m_show_incompatible_presets; std::vector m_reload_dependent_tabs = {}; + std::vector m_dependent_tabs = {}; enum OptStatus { osSystemValue = 1, osInitValue = 2 }; std::map m_options_list; int m_opt_status_value = 0; @@ -187,7 +188,7 @@ protected: size_t m_selected_preset_item{ 0 }; - void set_type(); + void set_type(); public: PresetBundle* m_preset_bundle;