From ad5d23942694e8b075dca7e0ebfeb8c3b3132ffc Mon Sep 17 00:00:00 2001 From: David Kocik Date: Thu, 25 May 2023 16:55:36 +0200 Subject: [PATCH] Config wizard: sort names in lower case. Other vendors page and Filaments page --- src/slic3r/GUI/ConfigWizard.cpp | 61 ++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 265d256dc..4f211323a 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -1162,7 +1163,7 @@ void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool mat // in alphabetical order std::vector> prusa_profiles; - std::vector> other_profiles; + std::vector>> other_profiles; // first is lower case id for sorting bool add_TEMPLATES_item = false; for (int i = 0 ; i < list->size(); ++i) { const std::string& data = list->get_data(i); @@ -1175,7 +1176,7 @@ void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool mat if (!material_type_ordering && data.find("Prusa") != std::string::npos) prusa_profiles.push_back(data); else - other_profiles.push_back(data); + other_profiles.emplace_back(boost::algorithm::to_lower_copy(boost::nowide::widen(data)),data); } if (material_type_ordering) { @@ -1185,10 +1186,10 @@ void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool mat for (size_t profs = end_of_sorted; profs < other_profiles.size(); profs++) { // find instead compare because PET vs PETG - if (other_profiles[profs].get().find(value) != std::string::npos) { + if (other_profiles[profs].second.get().find(value) != std::string::npos) { //swap if(profs != end_of_sorted) { - std::reference_wrapper aux = other_profiles[end_of_sorted]; + std::pair> aux = other_profiles[end_of_sorted]; other_profiles[end_of_sorted] = other_profiles[profs]; other_profiles[profs] = aux; } @@ -1201,8 +1202,8 @@ void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool mat std::sort(prusa_profiles.begin(), prusa_profiles.end(), [](std::reference_wrapper a, std::reference_wrapper b) { return a.get() < b.get(); }); - std::sort(other_profiles.begin(), other_profiles.end(), [](std::reference_wrapper a, std::reference_wrapper b) { - return a.get() < b.get(); + std::sort(other_profiles.begin(), other_profiles.end(), [](const std::pair>& a, const std::pair>& b) { + return a.first append(item, &const_cast(item.get())); for (const auto& item : other_profiles) - list->append(item, &const_cast(item.get())); + list->append(item.second, &const_cast(item.second.get())); } @@ -1225,20 +1226,19 @@ void PageMaterials::sort_list_data(PresetList* list, const std::vector prusa_profiles; - std::vector other_profiles; - //for (int i = 0; i < data.size(); ++i) { + std::vector> other_profiles; // first is lower case id for sorting for (const auto& item : data) { const std::string& name = item.name; if (name.find("Prusa") != std::string::npos) prusa_profiles.emplace_back(item); else - other_profiles.emplace_back(item); + other_profiles.emplace_back(boost::algorithm::to_lower_copy(boost::nowide::widen(name)), item); } std::sort(prusa_profiles.begin(), prusa_profiles.end(), [](ProfilePrintData a, ProfilePrintData b) { return a.name.get() < b.name.get(); }); - std::sort(other_profiles.begin(), other_profiles.end(), [](ProfilePrintData a, ProfilePrintData b) { - return a.name.get() < b.name.get(); + std::sort(other_profiles.begin(), other_profiles.end(), [](const std::pair& a, const std::pair& b) { + return a.first < b.first; }); list->Clear(); for (size_t i = 0; i < prusa_profiles.size(); ++i) { @@ -1246,8 +1246,8 @@ void PageMaterials::sort_list_data(PresetList* list, const std::vectorCheck(i, prusa_profiles[i].checked); } for (size_t i = 0; i < other_profiles.size(); ++i) { - list->append(std::string(other_profiles[i].name) + (other_profiles[i].omnipresent || template_shown ? "" : " *"), &const_cast(other_profiles[i].name.get())); - list->Check(i + prusa_profiles.size(), other_profiles[i].checked); + list->append(std::string(other_profiles[i].second.name) + (other_profiles[i].second.omnipresent || template_shown ? "" : " *"), &const_cast(other_profiles[i].second.name.get())); + list->Check(i + prusa_profiles.size(), other_profiles[i].second.checked); } } @@ -1670,9 +1670,17 @@ PageVendors::PageVendors(ConfigWizard *parent) auto boldfont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); boldfont.SetWeight(wxFONTWEIGHT_BOLD); + // Copy vendors from bundle map to vector, so we can sort it without case sensitivity + std::vector> vendors; + for (const auto& pair : wizard_p()->bundles) { + vendors.emplace_back(boost::algorithm::to_lower_copy(boost::nowide::widen(pair.second.vendor_profile->name)),pair.second.vendor_profile); + } + std::sort(vendors.begin(), vendors.end(), [](const std::pair& a, const std::pair& b) { + return a.first < b.first; + }); - for (const auto &pair : wizard_p()->bundles) { - const VendorProfile *vendor = pair.second.vendor_profile; + for (const std::pair& v : vendors) { + const VendorProfile* vendor = v.second; if (vendor->id == PresetBundle::PRUSA_BUNDLE) { continue; } if (vendor && vendor->templates_profile) continue; @@ -1682,8 +1690,8 @@ PageVendors::PageVendors(ConfigWizard *parent) wizard_p()->on_3rdparty_install(vendor, cbox->IsChecked()); }); - const auto &vendors = appconfig.vendors(); - const bool enabled = vendors.find(pair.first) != vendors.end(); + const auto &acvendors = appconfig.vendors(); + const bool enabled = acvendors.find(vendor->id) != acvendors.end(); if (enabled) { cbox->SetValue(true); @@ -2316,8 +2324,21 @@ void ConfigWizard::priv::load_pages() index->add_page(page_msla); if (!only_sla_mode) { index->add_page(page_vendors); - for (const auto &pages : pages_3rdparty) { - for ( PagePrinters* page : { pages.second.first, pages.second.second }) + + // Copy pages names from map to vector, so we can sort it without case sensitivity + std::vector> sorted_vendors; + for (const auto& pages : pages_3rdparty) { + sorted_vendors.emplace_back(boost::algorithm::to_lower_copy(boost::nowide::widen(pages.first)), pages.first); + } + std::sort(sorted_vendors.begin(), sorted_vendors.end(), [](const std::pair& a, const std::pair& b) { + return a.first < b.first; + }); + + for (const std::pair v : sorted_vendors) { + const auto& pages = pages_3rdparty.find(v.second); + if (pages == pages_3rdparty.end()) + continue; // Should not happen + for ( PagePrinters* page : { pages->second.first, pages->second.second }) if (page && page->install) index->add_page(page); }