diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index c8c229e8d..c06dc938c 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -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>> 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 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 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 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) { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index e8a6218ae..4817c21cc 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -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(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();