FIX: enable edit and delete preset btn and fix issue

Jira: XXXX

Change-Id: I724d7236b28fcc4746698f094531948a8fbb5d93
Signed-off-by: maosheng.wei <maosheng.wei@bambulab.com>
This commit is contained in:
maosheng.wei 2023-11-08 12:06:34 +08:00 committed by Lane.Wei
parent 417d2eeb90
commit 901d6d2936
2 changed files with 46 additions and 35 deletions

View File

@ -14,6 +14,7 @@
#include "FileHelp.hpp"
#include "Tab.hpp"
#include "ParamsDialog.hpp"
#include "MainFrame.hpp"
#define NAME_OPTION_COMBOBOX_SIZE wxSize(FromDIP(200), FromDIP(24))
#define FILAMENT_PRESET_COMBOBOX_SIZE wxSize(FromDIP(300), FromDIP(24))
@ -4227,7 +4228,7 @@ void EditFilamentPresetDialog::update_preset_tree()
this->Freeze();
m_preset_tree_sizer->Clear(true);
for (std::pair<std::string, std::vector<std::shared_ptr<Preset>>> printer_and_presets : m_printer_compatible_presets) {
m_preset_tree_sizer->Add(m_preset_tree_creater->get_preset_tree(printer_and_presets), 0, wxEXPAND | wxALL, 5);
m_preset_tree_sizer->Add(m_preset_tree_creater->get_preset_tree(printer_and_presets), 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 5);
}
m_preset_tree_panel->SetSizerAndFit(m_preset_tree_sizer);
@ -4260,28 +4261,49 @@ void EditFilamentPresetDialog::delete_preset()
return;
}
std::shared_ptr<Preset> need_delete_preset = filament_presets[m_need_delete_preset_index];
// is selecetd filament preset
if (need_delete_preset->name == wxGetApp().preset_bundle->filaments.get_selected_preset_name()) {
wxGetApp().get_tab(need_delete_preset->type)->delete_preset();
} else {
Preset *filament_preset = wxGetApp().preset_bundle->filaments.find_preset(need_delete_preset->name);
// is root preset ?
Preset *filament_preset = wxGetApp().preset_bundle->filaments.find_preset(need_delete_preset->name);
if (filament_preset && wxGetApp().preset_bundle->filaments.get_preset_base(*filament_preset) == filament_preset) {
int count = 0;
wxString presets;
for (auto &preset2 : wxGetApp().preset_bundle->filaments)
if (preset2.inherits() == filament_preset->name) {
++count;
presets += "\n - " + from_u8(preset2.name);
// is root preset ?
if (filament_preset && wxGetApp().preset_bundle->filaments.get_preset_base(*filament_preset) == filament_preset) {
int count = 0;
wxString presets;
for (auto &preset2 : wxGetApp().preset_bundle->filaments)
if (preset2.inherits() == filament_preset->name) {
++count;
presets += "\n - " + from_u8(preset2.name);
}
wxString msg;
if (count > 0) {
msg = _L("Presets inherited by other presets can not be deleted");
msg += "\n";
msg += _L_PLURAL("The following presets inherits this preset.", "The following preset inherits this preset.", count);
wxString title = _L("Delete Preset");
MessageDialog(this, msg + presets, title, wxOK | wxICON_ERROR).ShowModal();
m_selected_printer.clear();
m_need_delete_preset_index = -1;
return;
}
wxString msg;
if (count > 0) {
msg = _L("Presets inherited by other presets can not be deleted");
msg += "\n";
msg += _L_PLURAL("The following presets inherits this preset.", "The following preset inherits this preset.", count);
wxString title = _L("Delete Preset");
MessageDialog(this, msg + presets, title, wxOK | wxICON_ERROR).ShowModal();
}
if (wxID_YES != MessageDialog(this, _L("Are you sure to delete the selected preset?"), _L("Delete preset"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal()) {
m_selected_printer.clear();
m_need_delete_preset_index = -1;
return;
}
// delete preset
std::string next_selected_preset_name = wxGetApp().preset_bundle->filaments.get_selected_preset().name;
bool delete_result = delete_filament_preset_by_name(need_delete_preset->name, next_selected_preset_name);
BOOST_LOG_TRIVIAL(info) << __LINE__ << " filament preset name: " << need_delete_preset->name << (delete_result ? " delete successful" : " delete failed");
wxGetApp().preset_bundle->filaments.select_preset_by_name(next_selected_preset_name, true);
for (size_t i = 0; i < wxGetApp().preset_bundle->filament_presets.size(); ++i) {
auto preset = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[i]);
if (preset == nullptr) wxGetApp().preset_bundle->filament_presets[i] = wxGetApp().preset_bundle->filaments.get_selected_preset_name();
}
}
// remove preset shared_ptr from m_printer_compatible_presets
@ -4292,17 +4314,6 @@ void EditFilamentPresetDialog::delete_preset()
filament_presets.pop_back();
if (filament_presets.empty()) m_printer_compatible_presets.erase(iter);
//delete preset
std::string next_selected_preset_name = wxGetApp().preset_bundle->filaments.get_selected_preset().name;
bool delete_result = delete_filament_preset_by_name(need_delete_preset->name, next_selected_preset_name);
BOOST_LOG_TRIVIAL(info) << __LINE__ << " filament preset name: " << need_delete_preset->name << (delete_result ? " delete successful" : " delete failed");
wxGetApp().preset_bundle->filaments.select_preset_by_name(next_selected_preset_name, true);
for (size_t i = 0; i < wxGetApp().preset_bundle->filament_presets.size(); ++i) {
auto preset = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[i]);
if (preset == nullptr) wxGetApp().preset_bundle->filament_presets[i] = wxGetApp().preset_bundle->filaments.get_selected_preset_name();
}
update_preset_tree();
m_selected_printer.clear();
@ -4818,7 +4829,7 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr<Preset> pre
edit_preset_btn->SetBackgroundColor(flush_bg_col);
edit_preset_btn->SetBorderColor(flush_bd_col);
edit_preset_btn->SetTextColor(flush_fg_col);
edit_preset_btn->Hide();
//edit_preset_btn->Hide();
sizer->Add(edit_preset_btn, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0);
sizer->Add(0, 0, 0, wxLEFT, 5);
@ -4829,7 +4840,7 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr<Preset> pre
del_preset_btn->SetBackgroundColor(flush_bg_col);
del_preset_btn->SetBorderColor(flush_bd_col);
del_preset_btn->SetTextColor(flush_fg_col);
del_preset_btn->Hide();
//del_preset_btn->Hide();
sizer->Add(del_preset_btn, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0);
edit_preset_btn->Bind(wxEVT_BUTTON, [this, printer_name, preset_index](wxCommandEvent &e) {

View File

@ -178,10 +178,8 @@ wxDEFINE_EVENT(EVT_GLCANVAS_COLOR_MODE_CHANGED, SimpleEvent);
wxDEFINE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent);
wxDEFINE_EVENT(EVT_CREATE_FILAMENT, SimpleEvent);
wxDEFINE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent);
bool Plater::has_illegal_filename_characters(const wxString& wxs_name)
{
std::string name = into_u8(wxs_name);
@ -1183,7 +1181,11 @@ void Sidebar::update_presets(Preset::Type preset_type)
preset_bundle.set_filament_preset(p->editing_filament, name);
} else if (filament_cnt == 1) {
// Single filament printer, synchronize the filament presets.
preset_bundle.set_filament_preset(0, name);
Preset *preset = preset_bundle.filaments.find_preset(name, false);
if (preset) {
if (preset->is_compatible) preset_bundle.set_filament_preset(0, name);
}
}
for (size_t i = 0; i < filament_cnt; i++)
@ -1848,7 +1850,6 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) {
wxPostEvent(this, SimpleEvent(EVT_SCHEDULE_BACKGROUND_PROCESS, this));
}
// Plater::DropTarget
class PlaterDropTarget : public wxFileDropTarget
@ -7540,7 +7541,6 @@ void Plater::priv::on_modify_filament(SimpleEvent &evt)
FilamentInfomation * filament_info = static_cast<FilamentInfomation *>(evt.GetEventObject());
EditFilamentPresetDialog dlg(wxGetApp().mainframe, filament_info);
int res = dlg.ShowModal();
wxGetApp().mainframe->update_side_preset_ui();
update_ui_from_settings();
sidebar->update_all_preset_comboboxes();