mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-08-05 21:06:02 +08:00
FIX: sort filament by order/vendor/type
Change-Id: If52f5962c165f0983c5b4d9bc046152975faec63 Jira: STUDIO-8260
This commit is contained in:
parent
9c1afdc63c
commit
8016cedc61
@ -959,7 +959,8 @@ void PlaterPresetComboBox::update()
|
||||
std::map<wxString, wxBitmap*> project_embedded_presets;
|
||||
std::map<wxString, wxBitmap *> system_presets;
|
||||
std::map<wxString, wxString> preset_descriptions;
|
||||
std::map<wxString, std::string> preset_filament_types;
|
||||
std::map<wxString, std::string> preset_filament_vendors;
|
||||
std::map<wxString, std::string> preset_filament_types;
|
||||
|
||||
//BBS: move system to the end
|
||||
wxString selected_system_preset;
|
||||
@ -996,6 +997,7 @@ void PlaterPresetComboBox::update()
|
||||
|
||||
bitmap_key += single_bar ? filament_rgb : filament_rgb + extruder_rgb;
|
||||
#endif
|
||||
preset_filament_vendors[name] = preset.config.option<ConfigOptionStrings>("filament_vendor")->values.at(0);
|
||||
preset_filament_types[name] = preset.config.option<ConfigOptionStrings>("filament_type")->values.at(0);
|
||||
}
|
||||
|
||||
@ -1043,20 +1045,37 @@ void PlaterPresetComboBox::update()
|
||||
if (m_type == Preset::TYPE_FILAMENT)
|
||||
add_ams_filaments(into_u8(selected_user_preset.empty() ? selected_system_preset : selected_user_preset), true);
|
||||
|
||||
std::vector<std::string> first_types = { "PLA", "PETG" };
|
||||
auto add_presets = [this, &preset_descriptions, &preset_filament_types, &first_types]
|
||||
std::vector<std::string> filament_orders = {"Bambu PLA Basic", "Bambu PLA Mette", "Bambu PETG HF", "Bambu ABS", "Bambu PLA Sink", "Bambu PLA-CF",
|
||||
"Bambu PLA Galaxy", "Bambu PLA Metal", "Bambu PLA Marble", "Bambu PETG-CF", "Bambu PETG Translucent", "Bambu ABS-GF"};
|
||||
std::vector<std::string> first_vendors = {"Bambu Lab", "Generic"};
|
||||
std::vector<std::string> first_types = {"PLA", "PETG", "ABS", "TPU"};
|
||||
auto add_presets = [this, &preset_descriptions, &filament_orders, &preset_filament_vendors, &first_vendors, &preset_filament_types, &first_types]
|
||||
(std::map<wxString, wxBitmap *> const &presets, wxString const &selected, std::string const &group) {
|
||||
if (!presets.empty()) {
|
||||
set_label_marker(Append(separator(group), wxNullBitmap));
|
||||
if (m_type == Preset::TYPE_FILAMENT) {
|
||||
std::vector<std::map<wxString, wxBitmap *>::value_type const*> list(presets.size(), nullptr);
|
||||
std::transform(presets.begin(), presets.end(), list.begin(), [](auto & pair) { return &pair; });
|
||||
std::sort(list.begin(), list.end(), [&preset_filament_types, &first_types](auto *l, auto *r) {
|
||||
auto iter1 = std::find(first_types.begin(), first_types.end(), preset_filament_types[l->first]);
|
||||
auto iter2 = std::find(first_types.begin(), first_types.end(), preset_filament_types[r->first]);
|
||||
if (iter1 == iter2)
|
||||
return l->first < r->first;
|
||||
return iter1 < iter2;
|
||||
std::sort(list.begin(), list.end(), [&filament_orders, &preset_filament_vendors, &first_vendors, &preset_filament_types, &first_types](auto *l, auto *r) {
|
||||
{ // Compare order
|
||||
auto iter1 = std::find(filament_orders.begin(), filament_orders.end(), l->first);
|
||||
auto iter2 = std::find(filament_orders.begin(), filament_orders.end(), r->first);
|
||||
if (iter1 != iter2)
|
||||
return iter1 < iter2;
|
||||
}
|
||||
{ // Compare vendor
|
||||
auto iter1 = std::find(first_vendors.begin(), first_vendors.end(), preset_filament_vendors[l->first]);
|
||||
auto iter2 = std::find(first_vendors.begin(), first_vendors.end(), preset_filament_vendors[r->first]);
|
||||
if (iter1 != iter2)
|
||||
return iter1 < iter2;
|
||||
}
|
||||
{ // Compare type
|
||||
auto iter1 = std::find(first_types.begin(), first_types.end(), preset_filament_types[l->first]);
|
||||
auto iter2 = std::find(first_types.begin(), first_types.end(), preset_filament_types[r->first]);
|
||||
if (iter1 != iter2)
|
||||
return iter1 < iter2;
|
||||
}
|
||||
return l->first < r->first;
|
||||
});
|
||||
for (auto it : list) {
|
||||
SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user