diff --git a/scripts/disable_validation.entitlements b/scripts/disable_validation.entitlements
index 123d12a53e..af12034ce0 100644
--- a/scripts/disable_validation.entitlements
+++ b/scripts/disable_validation.entitlements
@@ -4,5 +4,10 @@
com.apple.security.cs.disable-library-validation
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp
index a2e4e20374..7104d1bbcb 100644
--- a/src/OrcaSlicer.cpp
+++ b/src/OrcaSlicer.cpp
@@ -3618,6 +3618,9 @@ int CLI::run(int argc, char **argv)
{
if (opt_key == "compatible_prints" || opt_key == "compatible_printers" || opt_key == "model_id" || opt_key == "dev_model_name" || opt_key == "filament_settings_id")
continue;
+ // rebuilt from every filament after this loop
+ if (filament_dev_options.find(opt_key) != filament_dev_options.end())
+ continue;
ConfigOption *opt = m_print_config.option(opt_key, true);
if (opt == nullptr) {
// opt_key does not exist in this ConfigBase and it cannot be created, because it is not defined by this->def().
@@ -3681,6 +3684,14 @@ int CLI::run(int argc, char **argv)
}
}
+ // The stored values cannot be told apart per filament, so they are kept as they are unless every slot has a config.
+ std::vector filament_configs(filament_count, nullptr);
+ for (size_t index = 0; index < load_filaments_config.size(); index++)
+ if (load_filaments_index[index] >= 1 && load_filaments_index[index] <= filament_count)
+ filament_configs[load_filaments_index[index] - 1] = &load_filaments_config[index];
+ if (std::find(filament_configs.begin(), filament_configs.end(), nullptr) == filament_configs.end())
+ set_filament_dev_options(m_print_config, filament_configs);
+
if (m_print_config.option("filament_extruder_variant")) {
std::vector& filament_self_indice = m_print_config.option("filament_self_index", true)->values;
int index_size = m_print_config.option("filament_extruder_variant")->size();
diff --git a/src/dev-utils/platform/osx/entitlements.plist b/src/dev-utils/platform/osx/entitlements.plist
index 59274f955f..5ba7ca02e3 100644
--- a/src/dev-utils/platform/osx/entitlements.plist
+++ b/src/dev-utils/platform/osx/entitlements.plist
@@ -5,5 +5,10 @@
com.apple.security.cs.disable-library-validation
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 6c3caafdc4..21e1b0fbc3 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -10869,6 +10869,22 @@ void normalize_filament_values_to_variants(DynamicPrintConfig &config)
}
}
+void set_filament_dev_options(DynamicPrintConfig &config, const std::vector &filament_configs)
+{
+ for (const std::string &key : filament_dev_options) {
+ if (std::none_of(filament_configs.begin(), filament_configs.end(), [&key](const DynamicPrintConfig *filament) { return filament->has(key); }))
+ continue;
+ const ConfigOption *default_value = print_config_def.get(key)->default_value.get();
+ auto *dst = static_cast(config.option(key, true));
+ dst->clear();
+ for (const DynamicPrintConfig *filament : filament_configs) {
+ const auto *src = static_cast(filament->has(key) ? filament->option(key) : default_value);
+ if (!src->empty())
+ dst->append(src);
+ }
+ }
+}
+
//used for object/region config
//use the smallest of multiple to single
@@ -11525,12 +11541,18 @@ void DynamicPrintConfig::update_non_diff_values_to_base_config(DynamicPrintConfi
int cur_variant_count = cur_extruder_variants.size();
int target_variant_count = target_extruder_variants.size();
+ // A base variant this config does not list (the base gained it after the config was saved, or the
+ // config lists none) takes this config's first variant of the same extruder, as a user preset's
+ // values do in update_diff_values_to_child_config. Left unmatched, the base's value would silently
+ // replace the user's.
variant_index.resize(target_variant_count, -1);
if (cur_variant_count == 0) {
// Defensive: target_variant_count may be 0 if the preset doesn't carry extruder_variant_name.
// In that case keep variant_index empty and let the downstream size checks produce a useful error.
if (!variant_index.empty())
- variant_index[0] = 0;
+ // This config's one value belongs to the extruder of the base's first variant.
+ variant_index = map_variant_indices(target_extruder_variants, target_extruder_ids, {},
+ target_extruder_ids.empty() ? std::vector() : std::vector{target_extruder_ids[0]});
}
else if ((cur_extruder_ids.size() > 0) && cur_variant_count != cur_extruder_ids.size()){
//should not happen
@@ -11543,18 +11565,7 @@ void DynamicPrintConfig::update_non_diff_values_to_base_config(DynamicPrintConfi
%extruder_variant_name %target_variant_count %extruder_id_name %target_extruder_ids.size();
}
else {
- for (int i = 0; i < target_variant_count; i++)
- {
- for (int j = 0; j < cur_variant_count; j++)
- {
- if ((target_extruder_variants[i] == cur_extruder_variants[j])
- &&(target_extruder_ids.empty() || (target_extruder_ids[i] == cur_extruder_ids[j])))
- {
- variant_index[i] = j;
- break;
- }
- }
- }
+ variant_index = map_variant_indices(target_extruder_variants, target_extruder_ids, cur_extruder_variants, cur_extruder_ids);
}
for (auto& opt : keys) {
@@ -11579,6 +11590,13 @@ void DynamicPrintConfig::update_non_diff_values_to_base_config(DynamicPrintConfi
if (cur_variant_count > target_variant_count)
continue;
+ // The variant lists are the base's layout itself, which every other value is
+ // carried onto: a variant this config lacks keeps its own name and id.
+ if (opt == extruder_id_name || opt == extruder_variant_name) {
+ opt_src->set(opt_target);
+ continue;
+ }
+
int stride = 1;
if (key_set2.find(opt) != key_set2.end())
stride = 2;
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index acf6bd5335..beff23933a 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -928,6 +928,11 @@ void normalize_filament_values_to_variants(DynamicPrintConfig &config);
extern std::set filament_dev_options;
+// Orca: a filament_dev_options option holds several values per filament, and how many is up to the
+// filament preset, so one filament's values cannot be replaced in place. This rebuilds each option from
+// filament_configs, one config per filament in slot order, as the filaments' values one after another.
+void set_filament_dev_options(DynamicPrintConfig &config, const std::vector &filament_configs);
+
extern void update_static_print_config_from_dynamic(ConfigBase& config, const DynamicPrintConfig& dest_config, std::vector variant_index, std::set& key_set1, int stride = 1);
extern void compute_filament_override_value(const std::string& opt_key, const ConfigOption *opt_old_machine, const ConfigOption *opt_new_machine, const ConfigOption *opt_new_filament, const DynamicPrintConfig& new_full_config,
t_config_option_keys& diff_keys, DynamicPrintConfig& filament_overrides, std::vector& f_map_indices);
diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp
index 66e87ac3af..83dd6a2d07 100644
--- a/src/slic3r/GUI/AMSMaterialsSetting.cpp
+++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp
@@ -974,8 +974,8 @@ bool AMSMaterialsSetting::Show(bool show)
static void _collect_filament_info(const wxString& shown_name,
const Preset& filament,
- unordered_map& query_filament_vendors,
- unordered_map& query_filament_types)
+ std::unordered_map& query_filament_vendors,
+ std::unordered_map& query_filament_types)
{
query_filament_vendors[shown_name] = filament.config.get_filament_vendor();
query_filament_types[shown_name] = filament.config.get_filament_type();
diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp
index 1827032b29..85f6533c1c 100644
--- a/src/slic3r/GUI/Auxiliary.cpp
+++ b/src/slic3r/GUI/Auxiliary.cpp
@@ -856,14 +856,14 @@ void AuxiliaryPanel::Split(const std::string &src, const std::string &separator,
dest.clear();
index = str.find_first_of(separator, start);
do {
- if (index != string::npos) {
+ if (index != std::string::npos) {
substring = str.substr(start, index - start);
dest.push_back(substring);
start = index + separator.size();
index = str.find(separator, start);
- if (start == string::npos) break;
+ if (start == std::string::npos) break;
}
- } while (index != string::npos);
+ } while (index != std::string::npos);
// the last part
substring = str.substr(start);
diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
index e49ebfb787..3ed3ca66df 100644
--- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
+++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
@@ -1307,7 +1307,7 @@ void CalibrationPresetPage::stripWhiteSpace(std::string& str)
{
if (str == "") { return; }
- string::iterator cur_it;
+ std::string::iterator cur_it;
cur_it = str.begin();
while (cur_it != str.end()) {
@@ -2597,7 +2597,7 @@ void CalibrationPresetPage::update_multi_extruder_filament_combobox(const std::s
int ams_id_int = 0;
try {
if (!ams_id.empty())
- ams_id_int = stoi(ams_id.c_str());
+ ams_id_int = std::stoi(ams_id.c_str());
} catch (...) {}
@@ -2685,7 +2685,7 @@ void CalibrationPresetPage::update_filament_combobox(std::string ams_id)
int ams_id_int = 0;
try {
if (!ams_id.empty())
- ams_id_int = stoi(ams_id.c_str());
+ ams_id_int = std::stoi(ams_id.c_str());
} catch (...) {}
diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp
index efe7bc16ba..c7c9cd2760 100644
--- a/src/slic3r/GUI/CreatePresetsDialog.cpp
+++ b/src/slic3r/GUI/CreatePresetsDialog.cpp
@@ -347,7 +347,7 @@ static std::string get_curr_timestmp()
// return timestampString;
}
-static void get_filament_compatible_printer(Preset* preset, vector& printers)
+static void get_filament_compatible_printer(Preset* preset, std::vector& printers)
{
auto compatible_printers = dynamic_cast(preset->config.option("compatible_printers"));
if (compatible_printers == nullptr) return;
@@ -1581,7 +1581,7 @@ void CreateFilamentPresetDialog::sort_printer_by_nozzle(std::vector nozzle_diameter = nozzle_diameter_map;
std::sort(printer_name_to_filament_preset.begin(), printer_name_to_filament_preset.end(),
- [&nozzle_diameter](const std::pair &a, const std::pair &b) {
+ [&nozzle_diameter](const std::pair &a, const std::pair &b) {
size_t nozzle_index_a = a.first.find(" nozzle");
size_t nozzle_index_b = b.first.find(" nozzle");
if (nozzle_index_a == std::string::npos || nozzle_index_b == std::string::npos) return a.first < b.first;
@@ -3143,7 +3143,7 @@ void CreatePrinterPresetDialog::set_current_visible_printer()
wxArrayString CreatePrinterPresetDialog::printer_preset_sort_with_nozzle_diameter(const VendorProfile &vendor_profile, float nozzle_diameter)
{
- std::vector> preset_sort;
+ std::vector> preset_sort;
auto get_nozzle_size_for_printer_model = [this](const std::string & model_name) -> size_t {
auto iter = m_printer_name_to_preset.find(model_name);
@@ -4964,7 +4964,7 @@ wxBoxSizer *CreatePresetForPrinterDialog::create_selected_filament_preset_sizer(
m_selected_printer->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) {
wxString printer_name = m_selected_printer->GetStringSelection();
- std::unordered_map>>::iterator filament_iter = m_printer_compatible_filament_presets.find(into_u8(printer_name));
+ std::unordered_map>>::iterator filament_iter = m_printer_compatible_filament_presets.find(into_u8(printer_name));
if (m_printer_compatible_filament_presets.end() != filament_iter) {
filament_choice_to_filament_preset.clear();
wxArrayString filament_choices;
diff --git a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp
index 8644047e64..14d78fba1f 100644
--- a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp
+++ b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp
@@ -160,7 +160,7 @@ DevAms::~DevAms()
m_trays.clear();
}
-static unordered_map s_ams_display_formats = {
+static std::unordered_map s_ams_display_formats = {
{DevAms::AMS, "AMS-%d"},
{DevAms::AMS_LITE, "AMS Lite-%d"},
{DevAms::N3F, "AMS 2 PRO-%d"},
diff --git a/src/slic3r/GUI/DeviceCore/DevMappingNozzle.cpp b/src/slic3r/GUI/DeviceCore/DevMappingNozzle.cpp
index 5eb0defa93..95081f5382 100644
--- a/src/slic3r/GUI/DeviceCore/DevMappingNozzle.cpp
+++ b/src/slic3r/GUI/DeviceCore/DevMappingNozzle.cpp
@@ -250,7 +250,7 @@ int DevNozzleMappingCtrl::CtrlGetAutoNozzleMappingV1(Slic3r::GUI::Plater* plater
void DevNozzleMappingCtrl::ParseAutoNozzleMapping(const json& print_jj)
{
- if (print_jj.contains("command") && print_jj["command"].get() == "get_auto_nozzle_mapping") {
+ if (print_jj.contains("command") && print_jj["command"].get() == "get_auto_nozzle_mapping") {
if (print_jj.contains("sequence_id") && print_jj["sequence_id"] == m_sequence_id) {
Clear();
DevJsonValParser::ParseVal(print_jj, "result", m_result);
diff --git a/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp b/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp
index 98d5d5bd5f..14c29817ef 100644
--- a/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp
+++ b/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp
@@ -426,7 +426,7 @@ void DevNozzleSystem::ClearNozzles()
// ---- parsing ----------------------------------------------------------------------------------------
-static unordered_map _str2_nozzle_flow_type = {
+static std::unordered_map _str2_nozzle_flow_type = {
{"S", NozzleFlowType::S_FLOW},
{"H", NozzleFlowType::H_FLOW},
{"A", NozzleFlowType::S_FLOW},
@@ -436,7 +436,7 @@ static unordered_map _str2_nozzle_flow_type = {
{"B", NozzleFlowType::E_FLOW}, // E3D High Flow -> nvtE3DHighFlow
};
-static unordered_map _str2_nozzle_type = {
+static std::unordered_map _str2_nozzle_type = {
{"00", NozzleType::ntStainlessSteel},
{"01", NozzleType::ntHardenedSteel},
{"05", NozzleType::ntTungstenCarbide}
diff --git a/src/slic3r/GUI/DeviceErrorDialog.cpp b/src/slic3r/GUI/DeviceErrorDialog.cpp
index de578f78ed..23b7f3a665 100644
--- a/src/slic3r/GUI/DeviceErrorDialog.cpp
+++ b/src/slic3r/GUI/DeviceErrorDialog.cpp
@@ -368,7 +368,7 @@ wxString DeviceErrorDialog::parse_error_level(int error_code)
}
}
-static const std::unordered_set s_jump_liveview_error_codes = { "0300-8003", "0300-8002", "0300-800A"};
+static const std::unordered_set s_jump_liveview_error_codes = { "0300-8003", "0300-8002", "0300-800A"};
wxString DeviceErrorDialog::show_error_code(int error_code)
{
if (m_error_code == error_code) { return wxEmptyString;}
diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp
index 3729387040..30e7282c0e 100644
--- a/src/slic3r/GUI/DeviceManager.cpp
+++ b/src/slic3r/GUI/DeviceManager.cpp
@@ -110,6 +110,7 @@ using json = nlohmann::json;
class wxWindow;
namespace fs = boost::filesystem;
+using namespace std::chrono_literals;
#define CALI_DEBUG
#define MINUTE_30 1800000 //ms
@@ -3103,7 +3104,7 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
DevFirmwareVersionInfo ver_info;
ver_info.name = (*it)["name"].get();
if ((*it).contains("product_name"))
- ver_info.product_name = wxString::FromUTF8((*it)["product_name"].get());
+ ver_info.product_name = wxString::FromUTF8((*it)["product_name"].get());
if ((*it).contains("sw_ver"))
ver_info.sw_ver = (*it)["sw_ver"].get();
if ((*it).contains("sw_new_ver"))
diff --git a/src/slic3r/GUI/EditGCodeDialog.cpp b/src/slic3r/GUI/EditGCodeDialog.cpp
index 917ff56013..2ef70ab82b 100644
--- a/src/slic3r/GUI/EditGCodeDialog.cpp
+++ b/src/slic3r/GUI/EditGCodeDialog.cpp
@@ -294,8 +294,8 @@ wxDataViewItem EditGCodeDialog::add_presets_placeholders()
// Orca: create subgroups from the pages of the tabs
- auto init_from_tab = [this, full_config](wxDataViewItem parent, Tab* tab, const set& preset_keys){
- set extra_keys(preset_keys);
+ auto init_from_tab = [this, full_config](wxDataViewItem parent, Tab* tab, const std::set& preset_keys){
+ std::set extra_keys(preset_keys);
for (const auto& page : tab->m_pages) {
// ORCA: Pull icons from tabs for subgroups, icons are hidden on tabs
std::string icon_name = "empty"; // use empty icon if not defined
@@ -549,7 +549,7 @@ void ParamsNode::RefreshSearch(const wxString& search_text)
if (GetEnabledChildren().empty())
if (auto pos = text.find(search_text); IsParamNode() && pos != wxString::npos) {
- m_highlight_index = make_unique>(pos, search_text.Len());
+ m_highlight_index = make_unique>(pos, search_text.Len());
Enable();
} else {
Disable();
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 05ab99bae1..fda86e854d 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -702,11 +702,11 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
set_value(str, true);
}
} else if (m_opt.opt_key == "sparse_infill_rotate_template" || m_opt.opt_key == "solid_infill_rotate_template") {
- string ustr(str.utf8_string());
+ std::string ustr(str.utf8_string());
if (!ConfigOptionFloats::validate_string(ustr)) {
- string v;
+ std::string v;
std::smatch match;
- string ps = (m_opt.opt_key == "sparse_infill_rotate_template") ?
+ std::string ps = (m_opt.opt_key == "sparse_infill_rotate_template") ?
u8"[BT][!]?|[#][\\d]+[!]?|[+\\-]?[\\d.]+[%]?[*]?[\\d]*[/NnZz$LlUuQq~^|#]?[+\\-]?[\\d.]*[%#\'\"cm]?[m]?[BT]?[!*]?" :
u8"[#][\\d]+[!]?|[+\\-]?[\\d.]+[%]?[*]?[\\d]*[/NnZz$LlUuQq~^|#]?[+\\-]?[\\d.]*[%#\'\"cm]?[m]?[!*]?";
@@ -729,7 +729,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
}
break;
} else if (m_opt.opt_key == "extra_solid_infills") {
- string ustr(str.utf8_string());
+ std::string ustr(str.utf8_string());
// New rule: accept either interval form (N or N#K) or explicit list (e.g. 1,7,9), with optional quotes.
const std::regex rx_interval(u8R"(^\s*['"]?\s*\d+\s*(?:#\s*\d*)?\s*['"]?\s*$)");
// List entries may be plain numbers or number with optional #K count, e.g., 5, 9#2, 18
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 4727ed0871..f21ce9ac15 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -94,6 +94,8 @@
#include "slic3r/GUI/Gizmos/GizmoObjectManipulation.hpp"
#include "slic3r/GUI/PartPlate.hpp"
+using namespace std::string_view_literals;
+
namespace Slic3r { class PrintBase; }
@@ -3184,7 +3186,7 @@ void GCodeViewer::render_legend_color_arr_recommen(float window_padding)
float ams_item_height = 0;
float filament_group_item_align_width = 0;
{
- float three_words_width = imgui.calc_text_size(std::string_view("ABC")).x;
+ float three_words_width = imgui.calc_text_size("ABC"sv).x;
const int line_capacity = 4;
for (const auto& extruder_filaments : {m_left_extruder_filament,m_right_extruder_filament })
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 4f6c54fac5..6ad3e80dc0 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -177,6 +177,8 @@ extern wxPopupWindow* wxCurrentPopupWindow;
#endif
#endif
+using namespace std::string_view_literals;
+
static constexpr const float TRACKBALLSIZE = 0.8f;
static Slic3r::ColorRGBA DEFAULT_BG_LIGHT_COLOR = { 0.906f, 0.906f, 0.906f, 1.0f };
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 499ac6f23d..11cde7e5f2 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -9040,7 +9040,7 @@ std::map GUI_App::get_delete_cache_presets_lock()
void GUI_App::process_delete_presets()
{
- std::map delete_cache_presets = get_delete_cache_presets_lock();
+ std::map delete_cache_presets = get_delete_cache_presets_lock();
for (auto it = delete_cache_presets.begin(); it != delete_cache_presets.end();) {
if (it->first.empty()) continue;
std::string del_setting_id = it->first;
@@ -10068,7 +10068,7 @@ bool is_soluble_filament(int extruder_id)
return support_option->get_at(0);
};
-bool has_filaments(const std::vector& model_filaments) {
+bool has_filaments(const std::vector& model_filaments) {
auto &filament_presets = Slic3r::GUI::wxGetApp().preset_bundle->filament_presets;
if (!Slic3r::GUI::wxGetApp().plater()) return false;
auto model_objects = Slic3r::GUI::wxGetApp().plater()->model().objects;
@@ -10103,7 +10103,7 @@ bool is_support_filament(int extruder_id, bool strict_check)
Slic3r::ConfigOptionBools *support_option = dynamic_cast(filament->config.option("filament_is_support"));
if(!strict_check &&(filament_type == "PETG" || filament_type == "PLA")) {
- std::vector model_filaments;
+ std::vector model_filaments;
if (filament_type == "PETG")
model_filaments.emplace_back("PLA");
else {
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index fd6da1beef..47e391b2ed 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -1108,7 +1108,7 @@ void ObjectList::update_name_column_width() const
}
}
- GetColumn(colName)->SetWidth(max(0, client_size.x - (others_width)*em));
+ GetColumn(colName)->SetWidth(std::max(0, client_size.x - (others_width)*em));
}
void ObjectList::set_filament_column_hidden(const bool hide) const
@@ -3970,7 +3970,7 @@ wxDataViewItem ObjectList::add_settings_item(wxDataViewItem parent_item, const D
if (config->opt_float("layer_height") == object_cfg->opt_float("layer_height")) {
SettingsFactory::Bundle new_cat_options;
for (auto cat_opt : cat_options) {
- std::vector temp;
+ std::vector temp;
for (auto value : cat_opt.second) {
if (value != "layer_height")
temp.push_back(value);
diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
index 72f08318c6..bb76a171b8 100644
--- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
+++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
@@ -44,6 +44,8 @@
#define MAX_NUM 9999.99
#define MAX_SIZE std::string_view{"9999.99"}
+using namespace std::string_view_literals;
+
namespace Slic3r
{
namespace GUI
diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp
index 0a5dba5a0e..2234d1afb4 100644
--- a/src/slic3r/GUI/HMS.cpp
+++ b/src/slic3r/GUI/HMS.cpp
@@ -33,7 +33,7 @@ static const char* HMS_LOCAL_IMG_PATH = "hms/local_image";
// the local HMS info
// Orca: dev-id-type set trimmed to the devices Orca ships local HMS images for
-static unordered_set package_dev_id_types {"094", "239", "093", "22E"};
+static std::unordered_set package_dev_id_types {"094", "239", "093", "22E"};
// Orca: HMS should be disabled when stealth mode is on or networking is not installed
static bool should_disable_hms()
@@ -345,17 +345,17 @@ wxString HMSQuery::query_hms_msg(const std::string& dev_id, const std::string& l
return _query_hms_msg(dev_id.substr(0, 3), long_error_code, lang_code);
}
-string HMSQuery::get_dev_id_type(const MachineObject* obj) const
+std::string HMSQuery::get_dev_id_type(const MachineObject* obj) const
{
if (obj)
{
return obj->get_dev_id().substr(0, 3);
}
- return string();
+ return std::string();
}
-wxString HMSQuery::_query_hms_msg(const string& dev_id_type, const string& long_error_code, const string& lang_code)
+wxString HMSQuery::_query_hms_msg(const std::string& dev_id_type, const std::string& long_error_code, const std::string& lang_code)
{
if (long_error_code.empty())
{
@@ -426,9 +426,9 @@ wxString HMSQuery::_query_hms_msg(const string& dev_id_type, const string& long_
return wxEmptyString;
}
-bool HMSQuery::_is_internal_error(const string &dev_id_type,
- const string &error_code,
- const string &lang_code)
+bool HMSQuery::_is_internal_error(const std::string &dev_id_type,
+ const std::string &error_code,
+ const std::string &lang_code)
{
init_hms_info(dev_id_type);
auto iter = m_hms_info_jsons.find(dev_id_type);
diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp
index 9e5e2cc7c4..b6b420969f 100644
--- a/src/slic3r/GUI/Jobs/PrintJob.cpp
+++ b/src/slic3r/GUI/Jobs/PrintJob.cpp
@@ -335,7 +335,7 @@ void PrintJob::process(Ctl &ctl)
auto origin_profile_id = model_info->metadata_items.find(BBL_DESIGNER_PROFILE_ID_TAG);
if (origin_profile_id != model_info->metadata_items.end()) {
try {
- params.origin_profile_id = stoi(origin_profile_id->second.c_str());
+ params.origin_profile_id = std::stoi(origin_profile_id->second.c_str());
}
catch(...) {}
}
diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp
index 7a7050429d..3e91d19cdd 100644
--- a/src/slic3r/GUI/NotificationManager.cpp
+++ b/src/slic3r/GUI/NotificationManager.cpp
@@ -536,12 +536,12 @@ void NotificationManager::PopNotification::count_lines()
return;
// handle with marks
- if (pos_start == string::npos && pos_end == string::npos) {
+ if (pos_start == std::string::npos && pos_end == std::string::npos) {
pos_start = text.find(error_start);
- if (pos_start != string::npos) {
+ if (pos_start != std::string::npos) {
text.erase(pos_start, error_start.length());
pos_end = text.find(error_end);
- if (pos_end != string::npos) {
+ if (pos_end != std::string::npos) {
text.erase(pos_end, error_end.length());
}
}
@@ -675,7 +675,7 @@ void NotificationManager::PopNotification::bbl_render_block_notif_text(ImGuiWrap
if (m_text1.size() > m_endlines[i])
last_end += (m_text1[m_endlines[i]] == '\n' || m_text1[m_endlines[i]] == ' ' ? 1 : 0);
- if (pos_start != string::npos && pos_end != string::npos && m_endlines[i] - line.length() >= pos_start && m_endlines[i] <= pos_end) {
+ if (pos_start != std::string::npos && pos_end != std::string::npos && m_endlines[i] - line.length() >= pos_start && m_endlines[i] <= pos_end) {
push_style_color(ImGuiCol_Text, m_ErrorColor, m_state == EState::FadingOut, m_current_fade_opacity);
imgui.text(line.c_str());
ImGui::PopStyleColor();
@@ -737,7 +737,7 @@ void NotificationManager::PopNotification::render_text(ImGuiWrapper& imgui, cons
if (m_text1.size() > m_endlines[i])
last_end += (m_text1[m_endlines[i]] == '\n' || m_text1[m_endlines[i]] == ' ' ? 1 : 0);
- if (pos_start != string::npos && pos_end != string::npos&& m_endlines[i] - line.length() >= pos_start && m_endlines[i] <= pos_end) {
+ if (pos_start != std::string::npos && pos_end != std::string::npos&& m_endlines[i] - line.length() >= pos_start && m_endlines[i] <= pos_end) {
push_style_color(ImGuiCol_Text, m_ErrorColor, m_state == EState::FadingOut, m_current_fade_opacity);
imgui.text(line.c_str());
ImGui::PopStyleColor();
diff --git a/src/slic3r/GUI/PartSkipDialog.cpp b/src/slic3r/GUI/PartSkipDialog.cpp
index ddf0d10965..4c0557abea 100644
--- a/src/slic3r/GUI/PartSkipDialog.cpp
+++ b/src/slic3r/GUI/PartSkipDialog.cpp
@@ -86,7 +86,7 @@ PartSkipDialog::PartSkipDialog(wxWindow *parent) : DPIDialog(parent, wxID_ANY, _
{
std::time_t t = std::time(0);
std::stringstream buf;
- buf << put_time(std::localtime(&t), "%a_%b_%d_%H_%M_%S/");
+ buf << std::put_time(std::localtime(&t), "%a_%b_%d_%H_%M_%S/");
m_timestamp = buf.str();
SetBackgroundColour(*wxWHITE);
@@ -402,7 +402,7 @@ std::string PartSkipDialog::create_tmp_path()
return tmp_path;
}
-bool PartSkipDialog::is_local_file_existed(const std::vector &local_paths)
+bool PartSkipDialog::is_local_file_existed(const std::vector &local_paths)
{
for (auto path : local_paths) {
if (!std::filesystem::exists(path)) { return false; }
@@ -703,8 +703,8 @@ void PartSkipDialog::InitDialogUI()
m_parts_state.clear();
m_parts_name.clear();
- string pick_img = m_local_paths[0];
- string slice_info = m_local_paths[2];
+ std::string pick_img = m_local_paths[0];
+ std::string slice_info = m_local_paths[2];
m_switch_drag_btn->SetIcon("canvas_drag");
m_switch_drag_btn->SetBackgroundColor(*wxWHITE);
diff --git a/src/slic3r/GUI/PartSkipDialog.hpp b/src/slic3r/GUI/PartSkipDialog.hpp
index f1aef1f022..4e4f7b6bb6 100644
--- a/src/slic3r/GUI/PartSkipDialog.hpp
+++ b/src/slic3r/GUI/PartSkipDialog.hpp
@@ -139,11 +139,11 @@ private:
boost::shared_ptr m_file_sys;
std::string m_timestamp;
std::string m_tmp_path;
- std::vector m_local_paths;
- std::vector m_target_paths;
+ std::vector m_local_paths;
+ std::vector m_target_paths;
std::string create_tmp_path();
- bool is_local_file_existed(const std::vector &local_paths);
+ bool is_local_file_existed(const std::vector &local_paths);
void DownloadPartsFile();
void OnFileSystemEvent(wxCommandEvent &event);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 707bed30b1..76ccac2838 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -357,7 +357,7 @@ wxDEFINE_EVENT(EVT_NOTICE_FULL_SCREEN_CHANGED, IntEvent);
#define PRINTER_PANEL_RADIUS (6) // ORCA
#define BTN_SYNC_SIZE (wxSize(FromDIP(96), FromDIP(98)))
-static string get_diameter_string(float diameter)
+static std::string get_diameter_string(float diameter)
{
std::ostringstream stream; // ORCA ensure 0.25 returned as 0.25. previous code returned as 0.2 because of std::setprecision(1)
stream << std::fixed << std::setprecision(2) << diameter; // Use 2 decimals to capture 0.25 / 0.15 reliably
@@ -6323,7 +6323,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn)
}
// BBS:Record consumables information before synchronization
- std::vector color_before_sync;
+ std::vector color_before_sync;
std::vector is_support_before;
DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config;
ConfigOptionStrings* color_opt = project_config.option("filament_colour");
@@ -12762,7 +12762,7 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt)
Vec3d old_plate_pos = old_plate->get_center_origin();
// BBS: Save the model in the current platelist
- std::vector > plate_object;
+ std::vector > plate_object;
for (size_t i = 0; i < old_plate_list.get_plate_count(); ++i) {
PartPlate* plate = old_plate_list.get_plate(i);
std::vector obj_idxs;
@@ -17975,7 +17975,7 @@ bool Plater::load_files(const wxArrayString& filenames)
// Orca: Iters through given paths and imports files from zip then remove zip from paths
// returns true if zip files were found
- auto handle_zips = [this](vector& paths) { // NOLINT(*-no-recursion) - Recursion is intended and should be managed properly
+ auto handle_zips = [this](std::vector& paths) { // NOLINT(*-no-recursion) - Recursion is intended and should be managed properly
bool res = false;
for (auto it = paths.begin(); it != paths.end();) {
if (boost::algorithm::iends_with(it->string(), ".zip")) {
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 735b02f58b..27e101745e 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -378,7 +378,7 @@ wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxString too
auto current_setting = app_config->get(param);
if (!current_setting.empty()) {
- auto compare = [current_setting](string possible_setting) { return current_setting == possible_setting; };
+ auto compare = [current_setting](std::string possible_setting) { return current_setting == possible_setting; };
auto iterator = find_if(config_name_index.begin(), config_name_index.end(), compare);
if (iterator != config_name_index.end())
current_index = static_cast(iterator - config_name_index.begin());
@@ -1714,7 +1714,7 @@ void PreferencesDialog::create_items()
g_sizer->Add(create_item_title(_L("Project")), 1, wxEXPAND);
std::vector projectLoadSettingsBehaviourOptions = {_L("Load All"), _L("Ask When Relevant"), _L("Always Ask"), _L("Load Geometry Only")};
- std::vector projectLoadSettingsConfigOptions = { OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL, OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT, OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY };
+ std::vector projectLoadSettingsConfigOptions = { OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL, OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT, OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY };
auto item_project_load = create_item_combobox(_L("Load behavior"), _L("Should printer/filament/process settings be loaded when opening a 3MF file?"), SETTING_PROJECT_LOAD_BEHAVIOUR, projectLoadSettingsBehaviourOptions, projectLoadSettingsConfigOptions);
g_sizer->Add(item_project_load);
diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp
index a0ed54cfe2..0680878999 100644
--- a/src/slic3r/GUI/Project.cpp
+++ b/src/slic3r/GUI/Project.cpp
@@ -239,7 +239,7 @@ void ProjectPanel::on_reload(wxCommandEvent& evt)
}
bool has_content = false;
- for (const string& v : {
+ for (const std::string& v : {
update_type,
license,
model_name,
diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp
index 3a23889c6c..a885dcd058 100644
--- a/src/slic3r/GUI/SelectMachine.cpp
+++ b/src/slic3r/GUI/SelectMachine.cpp
@@ -182,7 +182,7 @@ std::string get_nozzle_volume_type_cloud_string(NozzleVolumeType nozzle_volume_t
static int s_nozzle_mapping_last_request_time = 0;
std::vector SelectMachineDialog::MACHINE_BED_TYPE_STRING;
-std::vector SelectMachineDialog::MachineBedTypeString;
+std::vector SelectMachineDialog::MachineBedTypeString;
void SelectMachineDialog::init_machine_bed_types()
{
if (MACHINE_BED_TYPE_STRING.size() == 0) {
@@ -2748,8 +2748,8 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
std::vector confirm_text;
// check more than one using in same external spool
- std::unordered_set main_external_spool_filas;
- std::unordered_set deputy_external_spool_filas;
+ std::unordered_set main_external_spool_filas;
+ std::unordered_set deputy_external_spool_filas;
for (const auto& mapping_info : m_ams_mapping_result) {
if (mapping_info.ams_id == VIRTUAL_AMS_MAIN_ID_STR){
main_external_spool_filas.insert(mapping_info.filament_id);
@@ -5239,7 +5239,7 @@ void SelectMachineDialog::update_show_status(MachineObject* obj_)
/*Check high temperture slicing*/
if (m_print_type == PrintFromType::FROM_NORMAL) {
- std::set high_temp_filaments;
+ std::set high_temp_filaments;
std::unordered_set known_fila_soften_extruders;
std::unordered_set unknown_fila_soften_extruders;
auto preset_full_config = wxGetApp().preset_bundle->full_config();
diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp
index a0515dd20c..31ce752a2e 100644
--- a/src/slic3r/GUI/SelectMachine.hpp
+++ b/src/slic3r/GUI/SelectMachine.hpp
@@ -337,7 +337,7 @@ private:
wxColour m_colour_bold_color{wxColour(38, 46, 48)};
StateColor m_btn_bg_enable;
- std::unordered_map m_checkbox_list;
+ std::unordered_map m_checkbox_list;
std::list m_checkbox_list_order;
std::shared_ptr m_token = std::make_shared(0);
diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp
index 370baf29d1..7e98fbe85e 100644
--- a/src/slic3r/GUI/SendToPrinter.cpp
+++ b/src/slic3r/GUI/SendToPrinter.cpp
@@ -126,7 +126,7 @@ void SendToPrinterDialog::stripWhiteSpace(std::string& str)
{
if (str == "") { return; }
- string::iterator cur_it;
+ std::string::iterator cur_it;
cur_it = str.begin();
while (cur_it != str.end()) {
diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp
index af908c0c80..cd297eefe8 100644
--- a/src/slic3r/GUI/StatusPanel.hpp
+++ b/src/slic3r/GUI/StatusPanel.hpp
@@ -171,7 +171,7 @@ public:
std::string current_nozzle_loc = "";
wxColour m_colour;
- string m_file_name;
+ std::string m_file_name;
bool m_ams_loading{false};
void doRender(wxDC &dc);
ExtruderImage(wxWindow *parent, wxWindowID id, int nozzle_num, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
@@ -244,7 +244,7 @@ protected:
{
wxString local_image_url; //local image path
std::string img_url_paths; // oss url path
- vector image_broad;
+ std::vector image_broad;
bool is_selected;
bool is_uploaded; // load
wxBoxSizer * image_tb_broad = nullptr;
diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp
index 61998dc963..d6049451b9 100644
--- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp
+++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp
@@ -1576,7 +1576,7 @@ bool SyncAmsInfoDialog::is_nozzle_type_match(DevExtderSystem data, wxString &err
}
}
- vector map_extruders = {1, 0};
+ std::vector map_extruders = {1, 0};
// The default two extruders are left, right, but the order of the extruders on the machine is right, left.
std::vector flow_type_of_machine;
@@ -1676,7 +1676,7 @@ void SyncAmsInfoDialog::stripWhiteSpace(std::string &str)
{
if (str == "") { return; }
- string::iterator cur_it;
+ std::string::iterator cur_it;
cur_it = str.begin();
while (cur_it != str.end()) {
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 55067f14ca..93fc22ae53 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -2306,7 +2306,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value)
wxGetApp().plater()->update();
}
- string opt_key_without_idx = opt_key.substr(0, opt_key.find('#'));
+ std::string opt_key_without_idx = opt_key.substr(0, opt_key.find('#'));
if (opt_key_without_idx == "long_retractions_when_cut") {
unsigned char activate = boost::any_cast(value);
diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp
index b5b48d413e..b3e0aa7cd6 100644
--- a/src/slic3r/GUI/WebGuideDialog.cpp
+++ b/src/slic3r/GUI/WebGuideDialog.cpp
@@ -1682,13 +1682,13 @@ int GuideFrame::SaveProfileData()
return 0;
}
-void StringReplace(string &strBase, string strSrc, string strDes)
+void StringReplace(std::string &strBase, std::string strSrc, std::string strDes)
{
- string::size_type pos = 0;
- string::size_type srcLen = strSrc.size();
- string::size_type desLen = strDes.size();
+ std::string::size_type pos = 0;
+ std::string::size_type srcLen = strSrc.size();
+ std::string::size_type desLen = strDes.size();
pos = strBase.find(strSrc, pos);
- while ((pos != string::npos)) {
+ while ((pos != std::string::npos)) {
strBase.replace(pos, srcLen, strDes);
pos = strBase.find(strSrc, (pos + desLen));
}
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index c5015c9ddc..2fe4ac6014 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -1052,7 +1052,7 @@ void AMSControl::UpdateAms(const std::string &series_name,
/*update humidity popup*/
if (m_percent_humidity_dry_popup->IsShown())
{
- string target_id = m_percent_humidity_dry_popup->get_owner_ams_id();
+ std::string target_id = m_percent_humidity_dry_popup->get_owner_ams_id();
for (const auto& the_info : ams_info)
{
if (target_id == the_info.ams_id)
diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp
index f4c83667c2..99146a01a6 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -63,7 +63,7 @@ protected:
std::string m_dev_id;
std::vector> m_item_ids{ {}, {} };
- std::vector> pair_id;
+ std::vector> pair_id;
int m_total_ext_count = 1;
AMSextruder *m_extruder{nullptr};
@@ -181,7 +181,7 @@ public:
std::tuple isFilaSwitchReady();
void show_switcher_status(bool show);
- void UpdatePassRoad(string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step);
+ void UpdatePassRoad(std::string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step);
void CreateAms();
void CreateAmsDoubleNozzle(const std::string &series_name, const std::string& printer_type);
void CreateAmsSingleNozzle(const std::string &series_name, const std::string &printer_type);
diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp
index ef3643e531..95418f79a2 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.cpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.cpp
@@ -634,7 +634,7 @@ void AMSextruderImage::doRender(wxDC &dc)
}
-AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxSize& size, const wxPoint &pos)
+AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, std::string file_name, const wxSize& size, const wxPoint &pos)
{
wxWindow::Create(parent, id, pos, size);
SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE));
@@ -823,7 +823,7 @@ void SwitcherImage::doRender(wxDC &dc)
Layout();
}
-SwitcherImage::SwitcherImage(wxWindow *parent, wxWindowID id, string file_name, const wxSize& size, const wxPoint &pos)
+SwitcherImage::SwitcherImage(wxWindow *parent, wxWindowID id, std::string file_name, const wxSize& size, const wxPoint &pos)
{
wxWindow::Create(parent, id, pos, size);
SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE));
@@ -899,7 +899,7 @@ void AMSextruder::OnAmsLoading(bool load, int nozzle_id, wxColour col /*= AMS_CO
}
/*return true if something is updated*/
-bool AMSextruder::updateNozzleNum(int nozzle_num, const string& series_name)
+bool AMSextruder::updateNozzleNum(int nozzle_num, const std::string& series_name)
{
if (m_nozzle_num == nozzle_num && m_series_name == series_name) return false;
m_series_name = series_name;
diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp
index 55c0a3ca8d..c17b4ad59d 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.hpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.hpp
@@ -393,10 +393,10 @@ public:
bool m_show_state = {false};
wxColour m_colour;
ScalableBitmap m_ams_extruder;
- string m_file_name;
+ std::string m_file_name;
bool m_ams_loading{ false };
void doRender(wxDC &dc);
- AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxSize& size, const wxPoint &pos = wxDefaultPosition);
+ AMSextruderImage(wxWindow *parent, wxWindowID id, std::string file_name, const wxSize& size, const wxPoint &pos = wxDefaultPosition);
~AMSextruderImage();
};
@@ -444,10 +444,10 @@ public:
bool m_show_state = {false};
wxColour m_colour;
ScalableBitmap m_switcher;
- string m_file_name;
+ std::string m_file_name;
// bool m_ams_loading{ false };
void doRender(wxDC &dc);
- SwitcherImage(wxWindow *parent, wxWindowID id, string file_name, const wxSize& size, const wxPoint &pos = wxDefaultPosition);
+ SwitcherImage(wxWindow *parent, wxWindowID id, std::string file_name, const wxSize& size, const wxPoint &pos = wxDefaultPosition);
~SwitcherImage();
};
@@ -456,7 +456,7 @@ class AMSextruder : public wxWindow
{
private:
int m_nozzle_num = -1;
- string m_series_name;
+ std::string m_series_name;
public:
void TurnOn(wxColour col);
@@ -466,7 +466,7 @@ public:
void msw_rescale();
void has_ams(bool hams) {m_has_vams = hams; Refresh();};
void no_ams_mode(bool mode) {m_none_ams_mode = mode; Refresh();};
- bool updateNozzleNum(int nozzle_num, const std::string& series_name = string());
+ bool updateNozzleNum(int nozzle_num, const std::string& series_name = std::string());
bool m_none_ams_mode{true};
bool m_has_vams{false};
diff --git a/src/slic3r/Utils/BBLNetworkPlugin.cpp b/src/slic3r/Utils/BBLNetworkPlugin.cpp
index 5cffe6468d..bae9ce85a8 100644
--- a/src/slic3r/Utils/BBLNetworkPlugin.cpp
+++ b/src/slic3r/Utils/BBLNetworkPlugin.cpp
@@ -596,7 +596,8 @@ PrintParams_Legacy BBLNetworkPlugin::as_legacy(PrintParams& param)
}
// Every PrintParams field except the four the 02.08.01 series added
-// (task_timelapse_use_internal, extruder_cali_manual_mode, svc_context, slicer_uid).
+// (task_timelapse_use_internal, extruder_cali_manual_mode, svc_context, slicer_uid) and the
+// queue_plate_id 02.08.02 appended.
PrintParams_0203 BBLNetworkPlugin::as_0203(PrintParams& param)
{
PrintParams_0203 p;
diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp
index 30c33c6c73..54079ee0bd 100644
--- a/src/slic3r/Utils/bambu_networking.hpp
+++ b/src/slic3r/Utils/bambu_networking.hpp
@@ -336,6 +336,7 @@ struct PrintParams {
bool try_emmc_print;
std::string svc_context;
std::string slicer_uid;
+ std::string queue_plate_id;
};
struct TaskQueryParams
@@ -412,7 +413,7 @@ enum class NetworkAbi {
Unsupported, // no generation in this build can call it - never dispatch through it
Legacy, // 01.10.01: PrintParams_Legacy; send_message/send_message_to_printer take no flag
V0203, // 02.03.00: PrintParams_0203; bind takes no dev_model
- Current, // 02.08.01: the layouts and signatures this build declares directly
+ Current, // 02.08.04: the layouts and signatures this build declares directly
};
struct NetworkLibraryVersion {
@@ -425,10 +426,12 @@ struct NetworkLibraryVersion {
};
// Every row names the generation that can call it, so a series can never be offered without a
-// host-side ABI for it. Series with no generation - 02.01.01, 02.00.02 and older - must stay out;
-// is_supported_network_version() is the gate that keeps them from loading.
+// host-side ABI for it. Series with no generation - 02.08.01 (whose PrintParams lacks the
+// queue_plate_id that 02.08.02 appended, and whose malformed bind table macOS 27 refuses to
+// load), 02.01.01, 02.00.02 and older - must stay out; is_supported_network_version() is the
+// gate that keeps them from loading.
static const NetworkLibraryVersion AVAILABLE_NETWORK_VERSIONS[] = {
- {"02.08.01", "02.08.01", nullptr, true, nullptr, NetworkAbi::Current},
+ {"02.08.04", "02.08.04", nullptr, true, nullptr, NetworkAbi::Current},
{"02.03.00", "02.03.00", nullptr, false,
"An older plug-in series. Features that need newer plug-in support, such as print-failure "
"snapshots in the device error dialog, are unavailable.", NetworkAbi::V0203},
diff --git a/src/slic3r/Utils/json_diff.hpp b/src/slic3r/Utils/json_diff.hpp
index bb88e78c7f..df097dc78c 100644
--- a/src/slic3r/Utils/json_diff.hpp
+++ b/src/slic3r/Utils/json_diff.hpp
@@ -7,9 +7,6 @@
#include "nlohmann/json.hpp"
-
-using namespace std;
-
class json_diff
{
private:
diff --git a/tests/libslic3r/test_config.cpp b/tests/libslic3r/test_config.cpp
index 553e94b1c0..738e8539d2 100644
--- a/tests/libslic3r/test_config.cpp
+++ b/tests/libslic3r/test_config.cpp
@@ -538,6 +538,110 @@ SCENARIO("update_diff_values_to_child_config keeps a child's values on variants
}
}
+SCENARIO("update_non_diff_values_to_base_config keeps a project's changed values on variants it does not list",
+ "[Config][Variant]") {
+ std::set no_keys;
+ auto variants = [](std::initializer_list names) { return new Slic3r::ConfigOptionStrings(names); };
+
+ GIVEN("A filament base with three variants") {
+ Slic3r::DynamicPrintConfig base;
+ base.set_key_value("filament_extruder_variant",
+ variants({"Direct Drive Standard", "Bowden Standard", "Direct Drive High Flow"}));
+ base.set_deserialize_strict("nozzle_temperature", "220,220,220");
+
+ WHEN("the project was saved when the base had only its first variant") {
+ Slic3r::DynamicPrintConfig project;
+ project.set_key_value("filament_extruder_variant", variants({"Direct Drive Standard"}));
+ project.set_deserialize_strict("nozzle_temperature", "199");
+
+ AND_WHEN("the project lists the value as changed") {
+ project.update_non_diff_values_to_base_config(base, project.keys(), {"nozzle_temperature"}, "", "filament_extruder_variant",
+ Slic3r::filament_options_with_variant, no_keys);
+ THEN("the project's value applies to every variant") {
+ REQUIRE(project.opt_serialize("nozzle_temperature") == "199,199,199");
+ }
+ }
+ AND_WHEN("the project does not list the value as changed") {
+ project.update_non_diff_values_to_base_config(base, project.keys(), {}, "", "filament_extruder_variant",
+ Slic3r::filament_options_with_variant, no_keys);
+ THEN("the base's values replace it") {
+ REQUIRE(project.opt_serialize("nozzle_temperature") == "220,220,220");
+ }
+ }
+ }
+ WHEN("the project lists every variant, in another order") {
+ Slic3r::DynamicPrintConfig project;
+ project.set_key_value("filament_extruder_variant",
+ variants({"Bowden Standard", "Direct Drive High Flow", "Direct Drive Standard"}));
+ project.set_deserialize_strict("nozzle_temperature", "190,205,199");
+ project.update_non_diff_values_to_base_config(base, project.keys(), {"nozzle_temperature"}, "", "filament_extruder_variant",
+ Slic3r::filament_options_with_variant, no_keys);
+ THEN("each variant keeps its own value") {
+ REQUIRE(project.opt_serialize("nozzle_temperature") == "199,190,205");
+ }
+ }
+ WHEN("the project lists no variants") {
+ Slic3r::DynamicPrintConfig project;
+ project.set_deserialize_strict("nozzle_temperature", "199");
+ project.update_non_diff_values_to_base_config(base, project.keys(), {"nozzle_temperature"}, "", "filament_extruder_variant",
+ Slic3r::filament_options_with_variant, no_keys);
+ THEN("the project's value applies to every variant") {
+ REQUIRE(project.opt_serialize("nozzle_temperature") == "199,199,199");
+ }
+ }
+ }
+
+ GIVEN("A two-extruder printer base with two variants per extruder") {
+ Slic3r::DynamicPrintConfig base;
+ base.set_key_value("printer_extruder_variant",
+ variants({"Direct Drive Standard", "Direct Drive High Flow", "Direct Drive Standard", "Direct Drive High Flow"}));
+ base.set_key_value("printer_extruder_id", new Slic3r::ConfigOptionInts({1, 1, 2, 2}));
+ base.set_deserialize_strict("retraction_length", "0.8,0.8,0.8,0.8");
+
+ WHEN("the project lists only the Standard variant of each extruder") {
+ Slic3r::DynamicPrintConfig project;
+ project.set_key_value("printer_extruder_variant", variants({"Direct Drive Standard", "Direct Drive Standard"}));
+ project.set_key_value("printer_extruder_id", new Slic3r::ConfigOptionInts({1, 2}));
+ project.set_deserialize_strict("retraction_length", "1.1,2.2");
+ project.update_non_diff_values_to_base_config(base, project.keys(), {"retraction_length"}, "printer_extruder_id", "printer_extruder_variant",
+ Slic3r::printer_options_with_variant_1,
+ Slic3r::printer_options_with_variant_2);
+ THEN("each extruder's High Flow variant takes that extruder's value") {
+ REQUIRE(project.opt_serialize("retraction_length") == "1.1,1.1,2.2,2.2");
+ }
+ }
+ WHEN("the project lists only the Standard variant of each extruder, and the variant lists as changed") {
+ Slic3r::DynamicPrintConfig project;
+ project.set_key_value("printer_extruder_variant", variants({"Direct Drive Standard", "Direct Drive Standard"}));
+ project.set_key_value("printer_extruder_id", new Slic3r::ConfigOptionInts({1, 2}));
+ project.set_deserialize_strict("machine_max_speed_x", "300,100,400,150");
+ base.set_deserialize_strict("machine_max_speed_x", "500,200,500,200,500,200,500,200");
+ project.update_non_diff_values_to_base_config(base, project.keys(),
+ {"machine_max_speed_x", "printer_extruder_id", "printer_extruder_variant"},
+ "printer_extruder_id", "printer_extruder_variant",
+ Slic3r::printer_options_with_variant_1,
+ Slic3r::printer_options_with_variant_2);
+ THEN("the variant lists are the base's") {
+ REQUIRE(project.opt_serialize("printer_extruder_variant") == base.opt_serialize("printer_extruder_variant"));
+ REQUIRE(project.opt_serialize("printer_extruder_id") == "1,1,2,2");
+ }
+ THEN("each extruder's High Flow variant takes that extruder's pair of limits") {
+ REQUIRE(project.opt_serialize("machine_max_speed_x") == "300,100,300,100,400,150,400,150");
+ }
+ }
+ WHEN("the project lists no variants") {
+ Slic3r::DynamicPrintConfig project;
+ project.set_deserialize_strict("retraction_length", "1.1");
+ project.update_non_diff_values_to_base_config(base, project.keys(), {"retraction_length"}, "printer_extruder_id", "printer_extruder_variant",
+ Slic3r::printer_options_with_variant_1,
+ Slic3r::printer_options_with_variant_2);
+ THEN("only the first extruder's variants take the project's value") {
+ REQUIRE(project.opt_serialize("retraction_length") == "1.1,1.1,0.8,0.8");
+ }
+ }
+ }
+}
+
// SCENARIO("DynamicPrintConfig JSON serialization", "[Config]") {
// WHEN("DynamicPrintConfig is serialized and deserialized") {
// auto now = std::chrono::high_resolution_clock::now();
diff --git a/tests/libslic3r/test_config_variant_expansion.cpp b/tests/libslic3r/test_config_variant_expansion.cpp
index 5880e21645..95e94fa117 100644
--- a/tests/libslic3r/test_config_variant_expansion.cpp
+++ b/tests/libslic3r/test_config_variant_expansion.cpp
@@ -836,3 +836,30 @@ TEST_CASE("set_num_extruders gives every printer variant its own pair of machine
REQUIRE(speed_x() == std::vector({500., 200., 500., 200., 500., 200., 500., 200.}));
}
}
+
+// The device drying options hold several values per filament, as many as each filament preset gives.
+TEST_CASE("The device drying options are rebuilt as each filament's values in slot order", "[Config]")
+{
+ DynamicPrintConfig two_values, one_value, no_value;
+ two_values.option("filament_dev_ams_drying_ams_limitations", true)->values = {"1", "0"};
+ two_values.option("filament_dev_ams_drying_temperature", true)->values = {45., 45., 55., 55.};
+ one_value.option("filament_dev_ams_drying_ams_limitations", true)->values = {"1"};
+ one_value.option("filament_dev_ams_drying_temperature", true)->values = {65., 65., 75., 75.};
+
+ // values a project stored for three other filaments
+ DynamicPrintConfig config;
+ config.option("filament_dev_ams_drying_ams_limitations", true)->values = {"0", "0", "0"};
+ config.option("filament_dev_chamber_drying_time", true)->values = {12., 8., 12.};
+
+ set_filament_dev_options(config, {&two_values, &one_value, &two_values});
+ REQUIRE(config.option("filament_dev_ams_drying_ams_limitations")->values ==
+ std::vector({"1", "0", "1", "1", "0"}));
+ REQUIRE(config.option("filament_dev_ams_drying_temperature")->values ==
+ std::vector({45., 45., 55., 55., 65., 65., 75., 75., 45., 45., 55., 55.}));
+ // an option no filament defines keeps the stored values
+ REQUIRE(config.option("filament_dev_chamber_drying_time")->values == std::vector({12., 8., 12.}));
+
+ // a filament without the option takes the option's default
+ set_filament_dev_options(config, {&two_values, &no_value});
+ REQUIRE(config.option("filament_dev_ams_drying_ams_limitations")->values == std::vector({"1", "0", ""}));
+}
diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp
index 7dfba69cbd..e2ff2a2322 100644
--- a/tests/libslic3r/test_preset_bundle_loading.cpp
+++ b/tests/libslic3r/test_preset_bundle_loading.cpp
@@ -6228,8 +6228,9 @@ TEST_CASE("A per-variant project value maps onto its base preset's variant layou
base_finder(&base, calls));
CHECK(config.option("print_extruder_variant")->values ==
std::vector{"Direct Drive Standard", "Direct Drive High Flow"});
- // The listed key keeps the project's Standard value and takes High Flow from the base.
- check_double_vector(config.option("outer_wall_speed")->values, {100., 300.});
+ // The listed key keeps the project's Standard value, and High Flow, which the project does not
+ // list, takes it too, as a user preset's value does.
+ check_double_vector(config.option("outer_wall_speed")->values, {100., 100.});
check_double_vector(config.option("inner_wall_speed")->values, {250., 350.});
}
diff --git a/tests/slic3rutils/test_network_versions.cpp b/tests/slic3rutils/test_network_versions.cpp
index ad352e0bfa..cac2c1543e 100644
--- a/tests/slic3rutils/test_network_versions.cpp
+++ b/tests/slic3rutils/test_network_versions.cpp
@@ -78,31 +78,34 @@ TEST_CASE("Series and managed classification", "[NetworkVersions]")
TEST_CASE_METHOD(PluginFolderFixture, "Managed builds fold into the series; customs are surfaced", "[NetworkVersions]")
{
- add_plugin("02.08.01.55"); // managed, same series -> folded into the 02.08.01 row
+ add_plugin("02.08.04.60"); // managed, same series -> folded into the 02.08.04 row
add_plugin("02.09.00.10"); // managed, unknown series -> not listed
+ add_plugin("02.08.01.55"); // managed, series this build no longer has an ABI for -> not listed
add_plugin("02.03.00.62"); // managed, older whitelisted series -> folded into 02.03.00
add_plugin("02.01.01.52"); // managed, series with no ABI in this build -> not listed
- add_plugin("02.08.01_custom"); // custom, whitelisted series -> listed under it
- add_plugin("02.08.01.52-dev"); // custom (dash-suffixed), whitelisted series -> listed
+ add_plugin("02.08.04_custom"); // custom, whitelisted series -> listed under it
+ add_plugin("02.08.04.52-dev"); // custom (dash-suffixed), whitelisted series -> listed
auto versions = get_all_available_versions();
// The specific managed build never gets its own row - the series represents it.
- REQUIRE(count_version(versions, "02.08.01.55") == 0);
- REQUIRE(count_version(versions, "02.08.01") == 1);
+ REQUIRE(count_version(versions, "02.08.04.60") == 0);
+ REQUIRE(count_version(versions, "02.08.04") == 1);
REQUIRE(count_version(versions, "02.09.00.10") == 0);
+ REQUIRE(count_version(versions, "02.08.01.55") == 0);
+ REQUIRE(count_version(versions, "02.08.01") == 0);
REQUIRE(count_version(versions, "02.03.00.62") == 0);
REQUIRE(count_version(versions, "02.03.00") == 1);
REQUIRE(count_version(versions, "02.01.01.52") == 0);
// Custom-named builds are distinct files kept under their own name.
- REQUIRE(count_version(versions, "02.08.01_custom") == 1);
- REQUIRE(count_version(versions, "02.08.01.52-dev") == 1);
+ REQUIRE(count_version(versions, "02.08.04_custom") == 1);
+ REQUIRE(count_version(versions, "02.08.04.52-dev") == 1);
// Newest series first, its customs nested under it (suffix sort: "" < ".52-dev" < "_custom"),
// then older series, legacy last.
- REQUIRE(versions[0].version == "02.08.01");
- REQUIRE(versions[1].version == "02.08.01.52-dev");
- REQUIRE(versions[2].version == "02.08.01_custom");
+ REQUIRE(versions[0].version == "02.08.04");
+ REQUIRE(versions[1].version == "02.08.04.52-dev");
+ REQUIRE(versions[2].version == "02.08.04_custom");
REQUIRE(versions[3].version == "02.03.00");
REQUIRE(versions.back().version == BAMBU_NETWORK_AGENT_VERSION_LEGACY);
@@ -111,9 +114,9 @@ TEST_CASE_METHOD(PluginFolderFixture, "Managed builds fold into the series; cust
REQUIRE_FALSE(versions[3].is_latest);
// Customs sort/render nested under their series (non-empty suffix, base = the series).
- REQUIRE(versions[1].base_version == "02.08.01");
+ REQUIRE(versions[1].base_version == "02.08.04");
REQUIRE_FALSE(versions[1].suffix.empty());
- REQUIRE(versions[2].base_version == "02.08.01");
+ REQUIRE(versions[2].base_version == "02.08.04");
REQUIRE_FALSE(versions[2].suffix.empty());
// "(Latest)" is the series row, never a nested custom build.
@@ -123,20 +126,20 @@ TEST_CASE_METHOD(PluginFolderFixture, "Managed builds fold into the series; cust
REQUIRE_FALSE(versions[2].is_latest);
// The stored default that drives download and update-check decisions is now the series.
- REQUIRE(std::string(get_latest_network_version()) == "02.08.01");
+ REQUIRE(std::string(get_latest_network_version()) == "02.08.04");
}
TEST_CASE_METHOD(PluginFolderFixture, "Only the loaded series is marked installed", "[NetworkVersions]")
{
- add_plugin("02.08.01.55");
- add_plugin("02.08.01_custom");
+ add_plugin("02.08.04.60");
+ add_plugin("02.08.04_custom");
- // The loaded plug-in reports its full build (02.08.01.55); the series row is what gets marked.
+ // The loaded plug-in reports its full build (02.08.04.60); the series row is what gets marked.
{
- auto versions = get_all_available_versions("02.08.01.55");
+ auto versions = get_all_available_versions("02.08.04.60");
int marked = 0;
for (const auto& info : versions)
- if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.01"); }
+ if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.04"); }
REQUIRE(marked == 1);
}
@@ -152,10 +155,10 @@ TEST_CASE_METHOD(PluginFolderFixture, "Only the loaded series is marked installe
// A loaded custom build matches its own row, never the bare series.
{
- auto versions = get_all_available_versions("02.08.01_custom");
+ auto versions = get_all_available_versions("02.08.04_custom");
int marked = 0;
for (const auto& info : versions)
- if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.01_custom"); }
+ if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.04_custom"); }
REQUIRE(marked == 1);
}
@@ -167,11 +170,11 @@ TEST_CASE_METHOD(PluginFolderFixture, "Only the loaded series is marked installe
TEST_CASE("Only whitelisted series pass the load gate", "[NetworkVersions]")
{
// Each whitelisted series, its builds, and custom-named builds of that series.
- REQUIRE(is_supported_network_version("02.08.01"));
- REQUIRE(is_supported_network_version("02.08.01.52"));
- REQUIRE(is_supported_network_version("02.08.01.55"));
- REQUIRE(is_supported_network_version("02.08.01_custom"));
- REQUIRE(is_supported_network_version("02.08.01.52-dev"));
+ REQUIRE(is_supported_network_version("02.08.04"));
+ REQUIRE(is_supported_network_version("02.08.04.52"));
+ REQUIRE(is_supported_network_version("02.08.04.60"));
+ REQUIRE(is_supported_network_version("02.08.04_custom"));
+ REQUIRE(is_supported_network_version("02.08.04.52-dev"));
REQUIRE(is_supported_network_version("02.03.00"));
REQUIRE(is_supported_network_version("02.03.00.62"));
REQUIRE(is_supported_network_version("02.03.00.70"));
@@ -179,6 +182,9 @@ TEST_CASE("Only whitelisted series pass the load gate", "[NetworkVersions]")
REQUIRE(is_supported_network_version(BAMBU_NETWORK_AGENT_VERSION_LEGACY));
// Series whitelisted by previous Orca releases that no generation here can call.
+ REQUIRE_FALSE(is_supported_network_version("02.08.01"));
+ REQUIRE_FALSE(is_supported_network_version("02.08.01.55"));
+ REQUIRE_FALSE(is_supported_network_version("02.08.01_custom"));
REQUIRE_FALSE(is_supported_network_version("02.01.01.52"));
REQUIRE_FALSE(is_supported_network_version("02.00.02.50"));
@@ -198,9 +204,9 @@ TEST_CASE("Each version resolves to the ABI generation that can call it", "[Netw
{
// The generation is keyed on the series, so every build of a series - including the
// custom-named ones - resolves to the same one.
- CHECK(network_plugin_abi("02.08.01") == NetworkAbi::Current);
- CHECK(network_plugin_abi("02.08.01.55") == NetworkAbi::Current);
- CHECK(network_plugin_abi("02.08.01.52-dev") == NetworkAbi::Current);
+ CHECK(network_plugin_abi("02.08.04") == NetworkAbi::Current);
+ CHECK(network_plugin_abi("02.08.04.60") == NetworkAbi::Current);
+ CHECK(network_plugin_abi("02.08.04.52-dev") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.03.00") == NetworkAbi::V0203);
CHECK(network_plugin_abi("02.03.00.62") == NetworkAbi::V0203);
CHECK(network_plugin_abi("02.03.00_custom") == NetworkAbi::V0203);
@@ -208,6 +214,7 @@ TEST_CASE("Each version resolves to the ABI generation that can call it", "[Netw
// Anything the load gate rejects must dispatch through nothing at all, rather than
// defaulting to a layout it does not share.
+ CHECK(network_plugin_abi("02.08.01.55") == NetworkAbi::Unsupported);
CHECK(network_plugin_abi("02.01.01.52") == NetworkAbi::Unsupported);
CHECK(network_plugin_abi("02.00.02.50") == NetworkAbi::Unsupported);
CHECK(network_plugin_abi("02.09.00.10") == NetworkAbi::Unsupported);
@@ -234,7 +241,7 @@ TEST_CASE_METHOD(PluginFolderFixture, "Legacy series never adopts discovered bui
// With nothing else on disk, the series holds "(Latest)" even though its library is
// not installed.
for (const auto& info : versions) {
- if (info.version == "02.08.01") {
+ if (info.version == "02.08.04") {
REQUIRE(info.is_latest);
REQUIRE_FALSE(info.is_loaded);
}