From bfca09c7b2b84d759c14388a7eb184abe4e528c5 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 8 Aug 2022 16:26:37 +0800 Subject: [PATCH] FIX: can not save file when ams filament changed Change-Id: Ie7c567f819211cfa34c7bfeebbb415d5b880c4a8 (cherry picked from commit 1f7458b7e0ff23f664e834455dfcc4cb3773f960) --- src/slic3r/GUI/Plater.cpp | 2 +- src/slic3r/GUI/ProjectDirtyStateManager.cpp | 12 ++++++++++-- src/slic3r/GUI/ProjectDirtyStateManager.hpp | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 60fe66940..7ff539ac5 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4747,7 +4747,7 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) if (preset_type == Preset::TYPE_FILAMENT) { wxGetApp().preset_bundle->set_filament_preset(idx, preset_name); - //wxGetApp().get_tab(preset_type)->select_preset(preset_name); + wxGetApp().plater()->update_project_dirty_from_presets(); } bool select_preset = !combo->selection_is_changed_according_to_physical_printers(); diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.cpp b/src/slic3r/GUI/ProjectDirtyStateManager.cpp index 1f228f446..0db5e6f2d 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.cpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.cpp @@ -30,7 +30,11 @@ void ProjectDirtyStateManager::update_from_presets() if (!app.plater()->get_project_filename().IsEmpty()) { for (const auto &[type, name] : app.get_selected_presets()) { if (type == Preset::Type::TYPE_FILAMENT) { - m_presets_dirty |= m_initial_filament_presets != wxGetApp().preset_bundle->filament_presets; + m_presets_dirty |= m_initial_filament_presets_names != wxGetApp().preset_bundle->filament_presets; + if (ConfigOption *color_option = wxGetApp().preset_bundle->project_config.option("filament_colour")) { + auto colors = static_cast(color_option->clone()); + m_presets_dirty |= m_initial_filament_presets_colors != colors->values; + } } else { m_presets_dirty |= !m_initial_presets[type].empty() && m_initial_presets[type] != name; } @@ -57,7 +61,11 @@ void ProjectDirtyStateManager::reset_initial_presets() GUI_App &app = wxGetApp(); for (const auto &[type, name] : app.get_selected_presets()) { if (type == Preset::Type::TYPE_FILAMENT) { - m_initial_filament_presets = wxGetApp().preset_bundle->filament_presets; + m_initial_filament_presets_names = wxGetApp().preset_bundle->filament_presets; + if (ConfigOption *color_option = wxGetApp().preset_bundle->project_config.option("filament_colour")) { + auto colors = static_cast(color_option->clone()); + m_initial_filament_presets_colors = colors->values; + } } else { m_initial_presets[type] = name; } diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.hpp b/src/slic3r/GUI/ProjectDirtyStateManager.hpp index 203c87076..f17772199 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.hpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.hpp @@ -33,7 +33,8 @@ private: DynamicPrintConfig m_initial_project_config; // filament preset independent of the m_initial_presets - std::vector m_initial_filament_presets; + std::vector m_initial_filament_presets_names; // all filament preset type name + std::vector m_initial_filament_presets_colors; // all filament preset color }; } // namespace GUI