diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 05e86c725..fa609c6d4 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -420,7 +420,7 @@ static std::string get_filament_id(std::string vendor_typr_serial) continue; } std::string filament_name = preset_name.substr(0, index_at - 1); - if (filament_name == vendor_typr_serial) + if (filament_name == vendor_typr_serial && preset.filament_id != "null") return preset.filament_id; filament_id_to_filament_name[preset.filament_id].insert(filament_name); } @@ -437,7 +437,7 @@ static std::string get_filament_id(std::string vendor_typr_serial) continue; } std::string filament_name = preset_name.substr(0, index_at - 1); - if (filament_name == vendor_typr_serial) + if (filament_name == vendor_typr_serial && preset->filament_id != "null") return preset->filament_id; filament_id_to_filament_name[preset->filament_id].insert(filament_name); } @@ -4935,6 +4935,14 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre preset_name->SetFont(Label::Body_10); preset_name->SetForegroundColour(*wxBLACK); sizer->Add(preset_name, 0, wxEXPAND | wxALL, 5); + bool base_id_error = false; + if (preset->inherits() == "" && preset->base_id != "") base_id_error = true; + if (base_id_error) { + std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/custom-filament-issue"; + wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(panel, wxID_ANY, _L("[Delete Required]"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + m_download_hyperlink->SetFont(Label::Body_10); + sizer->Add(m_download_hyperlink, 0, wxEXPAND | wxALL, 5); + } sizer->Add(0, 0, 1, wxEXPAND, 0); StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), @@ -4946,6 +4954,9 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre StateColor flush_bd_col(std::pair(wxColour(0, 174, 66), StateColor::Pressed), std::pair(wxColour(0, 174, 66), StateColor::Hovered), std::pair(wxColour(172, 172, 172), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + Button *edit_preset_btn = new Button(panel, _L("Edit Preset")); edit_preset_btn->SetFont(Label::Body_10); edit_preset_btn->SetPaddingSize(wxSize(8, 3)); @@ -4961,9 +4972,16 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre del_preset_btn->SetFont(Label::Body_10); del_preset_btn->SetPaddingSize(wxSize(8, 3)); del_preset_btn->SetCornerRadius(8); - del_preset_btn->SetBackgroundColor(flush_bg_col); - del_preset_btn->SetBorderColor(flush_bd_col); - del_preset_btn->SetTextColor(flush_fg_col); + if (base_id_error) { + del_preset_btn->SetBackgroundColor(btn_bg_green); + del_preset_btn->SetBorderColor(btn_bg_green); + del_preset_btn->SetTextColor(wxColour(0xFFFFFE)); + } else { + 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(); sizer->Add(del_preset_btn, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 84bc14e35..17881938d 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -45,21 +45,46 @@ static wxString update_custom_filaments() std::map> temp_filament_id_to_presets = preset_bundle->filaments.get_filament_presets(); std::vector> need_sort; + bool need_delete_some_filament = false; for (std::pair> filament_id_to_presets : temp_filament_id_to_presets) { std::string filament_id = filament_id_to_presets.first; if (filament_id.empty()) continue; + if (filament_id == "null") { + need_delete_some_filament = true; + } + bool filament_with_base_id = false; + bool vendor_is_generic = false; + std::string filament_name; for (const Preset *preset : filament_id_to_presets.second) { - if (preset->is_system || filament_id.empty() || "null" == filament_id || filament_id.size() != 8 || filament_id[0] != 'P') break; - auto filament_vendor = dynamic_cast (const_cast(preset)->config.option("filament_vendor",false)); - if(filament_vendor&&filament_vendor->values.size()&&filament_vendor->values[0] == "Generic") break; - std::string preset_name = preset->name; - size_t index_at = preset_name.find(" @"); - if (std::string::npos != index_at) { preset_name = preset_name.substr(0, index_at); } - need_sort.push_back(std::make_pair(preset_name, preset->filament_id)); - break; + if (preset->is_system || preset->inherits() != "") continue; + if (!preset->base_id.empty()) filament_with_base_id = true; + + if (!vendor_is_generic) { + auto filament_vendor = dynamic_cast(const_cast(preset)->config.option("filament_vendor", false)); + if (filament_vendor && filament_vendor->values.size() && filament_vendor->values[0] == "Generic") vendor_is_generic = true; + } + + if (filament_name.empty()) { + std::string preset_name = preset->name; + size_t index_at = preset_name.find(" @"); + if (std::string::npos != index_at) { preset_name = preset_name.substr(0, index_at); } + filament_name = preset_name; + } + } + if (vendor_is_generic) continue; + if (!filament_name.empty()) { + if (filament_with_base_id) { + need_sort.push_back(std::make_pair("[Action Required] " + filament_name, filament_id)); + } else { + + need_sort.push_back(std::make_pair(filament_name, filament_id)); + } } } std::sort(need_sort.begin(), need_sort.end(), [](const std::pair &a, const std::pair &b) { return a.first < b.first; }); + if (need_delete_some_filament) { + need_sort.push_back(std::make_pair("[Action Required]", "null")); + } json temp_j; for (std::pair &filament_name_to_id : need_sort) { temp_j["name"] = filament_name_to_id.first;