Follow-up 3b1f1d9444 fixes:

Tab: Fixed rename_preset().
 * Presets weren't sorted after preset renaming.
 * New selected preset wasn't updated on the Plater.
Preset: Fixed delete_preset().
 * Selected preset wasn't updated after preset deletion.
This commit is contained in:
YuSanka 2022-09-14 15:09:33 +02:00
parent 369e08aed1
commit 82716cd78c
2 changed files with 46 additions and 16 deletions

View File

@ -947,6 +947,11 @@ bool PresetCollection::delete_current_preset()
bool PresetCollection::delete_preset(const std::string& name)
{
if (name == this->get_selected_preset().name)
return delete_current_preset();
const std::string selected_preset_name = this->get_selected_preset_name();
auto it = this->find_preset_internal(name);
const Preset& preset = *it;
@ -957,6 +962,10 @@ bool PresetCollection::delete_preset(const std::string& name)
boost::nowide::remove(preset.file.c_str());
}
m_presets.erase(it);
// update selected preset
this->select_preset_by_name(selected_preset_name, true);
return true;
}

View File

@ -30,6 +30,8 @@
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/filesystem.hpp>
#include <boost/exception/diagnostic_information.hpp>
#include "wxExtensions.hpp"
#include "PresetComboBoxes.hpp"
#include <wx/wupdlock.h>
@ -3710,12 +3712,11 @@ void Tab::rename_preset()
if (m_presets_choice->is_selected_physical_printer())
return;
Preset& selected_preset = m_presets->get_selected_preset();
wxString msg;
if (m_type == Preset::TYPE_PRINTER && !m_preset_bundle->physical_printers.empty()) {
// Check preset for rename in physical printers
std::vector<std::string> ph_printers = m_preset_bundle->physical_printers.get_printers_with_preset(selected_preset.name);
std::vector<std::string> ph_printers = m_preset_bundle->physical_printers.get_printers_with_preset(m_presets->get_selected_preset().name);
if (!ph_printers.empty()) {
msg += _L_PLURAL("The physical printer below is based on the preset, you are going to rename.",
"The physical printers below are based on the preset, you are going to rename.", ph_printers.size());
@ -3732,31 +3733,51 @@ void Tab::rename_preset()
SavePresetDialog dlg(m_parent, m_type, true, msg);
if (dlg.ShowModal() != wxID_OK)
return;
std::string new_name = into_u8(dlg.get_name());
const std::string new_name = into_u8(dlg.get_name());
if (new_name.empty() || new_name == m_presets->get_selected_preset().name)
return;
// rename selected and edited presets
// Note: selected preset can be changed, if in SavePresetDialog was selected name of existing preset
Preset& selected_preset = m_presets->get_selected_preset();
Preset& edited_preset = m_presets->get_edited_preset();
std::string old_name = selected_preset.name;
std::string old_file_name = selected_preset.file;
const std::string old_name = selected_preset.name;
const std::string old_file_name = selected_preset.file;
selected_preset.name = new_name;
boost::replace_last(selected_preset.file, old_name, new_name);
assert(old_name == edited_preset.name);
Preset& edited_preset = m_presets->get_edited_preset();
edited_preset.name = new_name;
boost::replace_last(edited_preset.file, old_name, new_name);
using namespace boost;
try {
// rename selected and edited presets
// rename file with renamed preset configuration
boost::filesystem::rename(old_file_name, selected_preset.file);
selected_preset.name = new_name;
replace_last(selected_preset.file, old_name, new_name);
// rename selected preset in printers, if it's needed
if (!msg.IsEmpty())
m_preset_bundle->physical_printers.rename_preset_in_printers(old_name, new_name);
edited_preset.name = new_name;
replace_last(edited_preset.file, old_name, new_name);
// rename file with renamed preset configuration
filesystem::rename(old_file_name, selected_preset.file);
// rename selected preset in printers, if it's needed
if (!msg.IsEmpty())
m_preset_bundle->physical_printers.rename_preset_in_printers(old_name, new_name);
}
catch (const exception& ex) {
const std::string exception = diagnostic_information(ex);
printf("Can't rename a preset : %s", exception.c_str());
}
// sort presets after renaming
std::sort(m_presets->begin(), m_presets->end());
// update selection
m_presets->select_preset_by_name(new_name, true);
m_presets_choice->update();
on_presets_changed();
}
// Called for a currently selected preset.