Fix AMS filament preset switch crash

This commit is contained in:
tome9111991
2026-04-27 16:46:31 +02:00
committed by viewit
parent 888384d7c4
commit 9ccb4e125c
2 changed files with 10 additions and 1 deletions

View File

@@ -3335,7 +3335,8 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject
tray_config.set_key_value("slot_id", new ConfigOptionStrings{slot_id});
tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.m_fila_type});
tray_config.set_key_value("tray_name", new ConfigOptionStrings{ name });
tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX))});
const std::string filament_color = into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX));
tray_config.set_key_value("filament_colour", new ConfigOptionStrings{filament_color});
tray_config.set_key_value("filament_multi_colour", new ConfigOptionStrings{});
tray_config.set_key_value("filament_colour_type", new ConfigOptionStrings{std::to_string(tray.ctype)});
tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists});
@@ -3348,6 +3349,9 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject
for (int i = 0; i < tray.cols.size(); ++i) {
tray_config.opt<ConfigOptionStrings>("filament_multi_colour")->values.push_back(into_u8(wxColour("#" + tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX)));
}
if (tray_config.opt<ConfigOptionStrings>("filament_multi_colour")->values.empty() && !filament_color.empty()) {
tray_config.opt<ConfigOptionStrings>("filament_multi_colour")->values.push_back(filament_color);
}
return tray_config;
};

View File

@@ -255,6 +255,11 @@ int PresetComboBox::update_ams_color()
auto color_pack = static_cast<ConfigOptionStrings *>(cfg->option("filament_multi_colour")->clone()); // multi color (all colors in all kinds of filament)
auto color_type = static_cast<ConfigOptionStrings*>(cfg->option("filament_colour_type")->clone()); // color type
if (m_filament_idx >= color_head->values.size()) color_head->values.resize(m_filament_idx + 1);
if (m_filament_idx >= color_pack->values.size()) color_pack->values.resize(m_filament_idx + 1);
if (m_filament_idx >= color_type->values.size()) color_type->values.resize(m_filament_idx + 1);
if (ctype.empty()) ctype = "1";
color_head->values[m_filament_idx] = color;
color_type->values[m_filament_idx] = ctype;
std::string color_str = ""; // Translate multi color info to config storage format