From 342cab756e8f6077eace8af9acae822d69e874a0 Mon Sep 17 00:00:00 2001 From: "maosheng.wei" Date: Wed, 1 Nov 2023 18:08:50 +0800 Subject: [PATCH] FIX: delete all compatible presets when delete third printer Jira: XXXX Change-Id: I1a294402627e7ab7a8c6701f20679b3d04aff059 Signed-off-by: maosheng.wei --- src/slic3r/GUI/Tab.cpp | 53 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 6385ea03e..3c8167987 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -4402,6 +4402,9 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, } BOOST_LOG_TRIVIAL(info) << boost::format("before delete action, canceled %1%, delete_current %2%") %canceled %delete_current; + bool delete_third_printer = false; + std::vector filament_presets; + std::vector process_presets; if (! canceled && delete_current) { // Delete the file and select some other reasonable preset. // It does not matter which preset will be made active as the preset will be re-selected from the preset_name variable. @@ -4409,11 +4412,22 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, try { //BBS delete preset Preset ¤t_preset = m_presets->get_selected_preset(); + + // Obtain compatible filament and process presets for printers + if (m_preset_bundle && m_presets->get_preset_base(current_preset) == ¤t_preset && printer_tab && !current_preset.is_system) { + delete_third_printer = true; + for (const Preset &preset : m_preset_bundle->filaments.get_presets()) { + if (preset.is_compatible && preset.is_default) { filament_presets.push_back(preset); } + } + for (const Preset &preset : m_preset_bundle->prints.get_presets()) { + if (preset.is_compatible && preset.is_default) { process_presets.push_back(preset); } + } + } if (!current_preset.setting_id.empty()) { - BOOST_LOG_TRIVIAL(info) << "delete preset = " << current_preset.name << ", setting_id = " << current_preset.setting_id; m_presets->set_sync_info_and_save(current_preset.name, current_preset.setting_id, "delete", 0); wxGetApp().delete_preset_from_cloud(current_preset.setting_id); } + BOOST_LOG_TRIVIAL(info) << "delete preset = " << current_preset.name << ", setting_id = " << current_preset.setting_id; BOOST_LOG_TRIVIAL(info) << boost::format("will delete current preset..."); m_presets->delete_current_preset(); } catch (const std::exception & ex) { @@ -4487,6 +4501,35 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, apply_config_from_cache(); load_current_preset(); + + if (delete_third_printer) { + wxGetApp().CallAfter([filament_presets, process_presets]() { + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + std::string old_filament_name = preset_bundle->filaments.get_edited_preset().name; + std::string old_process_name = preset_bundle->prints.get_edited_preset().name; + + for (const Preset &preset : filament_presets) { + if (!preset.setting_id.empty()) { + preset_bundle->filaments.set_sync_info_and_save(preset.name, preset.setting_id, "delete", 0); + wxGetApp().delete_preset_from_cloud(preset.setting_id); + } + BOOST_LOG_TRIVIAL(info) << "delete filament preset = " << preset.name << ", setting_id = " << preset.setting_id; + preset_bundle->filaments.delete_preset(preset.name); + } + + for (const Preset &preset : process_presets) { + if (!preset.setting_id.empty()) { + preset_bundle->prints.set_sync_info_and_save(preset.name, preset.setting_id, "delete", 0); + wxGetApp().delete_preset_from_cloud(preset.setting_id); + } + BOOST_LOG_TRIVIAL(info) << "delete print preset = " << preset.name << ", setting_id = " << preset.setting_id; + preset_bundle->prints.delete_preset(preset.name); + } + preset_bundle->filaments.select_preset_by_name(old_filament_name, true); + preset_bundle->prints.select_preset_by_name(old_process_name, true); + }); + } + } if (technology_changed) @@ -4959,7 +5002,13 @@ void Tab::delete_preset() // TRN remove/delete wxString msg; - if (m_presets->get_preset_base(current_preset) == ¤t_preset) { + if (m_presets->get_preset_base(current_preset) == ¤t_preset) { //root preset + if (current_preset.type == Preset::Type::TYPE_PRINTER && !current_preset.is_system) { //Customize third-party printers + MessageDialog dlg(this, _L("If you want to delete this preset, all compatible filament and process presets will be deleted. \nDo you want to continue?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), + wxYES_NO | wxYES_DEFAULT); + int res = dlg.ShowModal(); + if (res != wxID_YES) return; + } int count = 0; wxString presets; for (auto &preset2 : *m_presets)