ConfigWizard: Fix a memory access issue between PageMaterial instances

This commit is contained in:
Vojtech Kral 2019-10-07 11:10:18 +02:00
parent eb93d2a32d
commit eda01341d0
2 changed files with 13 additions and 15 deletions

View File

@ -515,9 +515,6 @@ PageMaterials::PageMaterials(ConfigWizard *parent, Materials *materials, wxStrin
, list_l1(new StringList(this)) , list_l1(new StringList(this))
, list_l2(new StringList(this)) , list_l2(new StringList(this))
, list_l3(new PresetList(this)) , list_l3(new PresetList(this))
, sel1_prev(wxNOT_FOUND)
, sel2_prev(wxNOT_FOUND)
, presets_loaded(false)
{ {
append_spacer(VERTICAL_SPACING); append_spacer(VERTICAL_SPACING);
@ -567,7 +564,7 @@ PageMaterials::PageMaterials(ConfigWizard *parent, Materials *materials, wxStrin
void PageMaterials::reload_presets() void PageMaterials::reload_presets()
{ {
list_l1->Clear(); clear();
list_l1->append(_(L("(All)")), &EMPTY); list_l1->append(_(L("(All)")), &EMPTY);
@ -675,7 +672,7 @@ void PageMaterials::clear()
void PageMaterials::on_activate() void PageMaterials::on_activate()
{ {
if (! presets_loaded) { if (! presets_loaded) {
wizard_p()->update_materials(); wizard_p()->update_materials(materials->technology);
reload_presets(); reload_presets();
} }
} }
@ -753,8 +750,8 @@ PageMode::PageMode(ConfigWizard *parent)
{ {
append_text(_(L("PrusaSlicer's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\n" append_text(_(L("PrusaSlicer's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\n"
"The Simple mode shows only the most frequently used settings relevant for regular 3D printing. " "The Simple mode shows only the most frequently used settings relevant for regular 3D printing. "
"The other two offer progressivly more specialized fine-tuning, " "The other two offer progressivly more sophisticated fine-tuning, "
"they are suitable for advanced and expert usiser, respectively. (FIXME: review this text)"))); "they are suitable for advanced and expert usiser, respectively.")));
radio_simple = new wxRadioButton(this, wxID_ANY, _(L("Simple mode"))); radio_simple = new wxRadioButton(this, wxID_ANY, _(L("Simple mode")));
radio_advanced = new wxRadioButton(this, wxID_ANY, _(L("Advanced mode"))); radio_advanced = new wxRadioButton(this, wxID_ANY, _(L("Advanced mode")));
@ -1384,7 +1381,7 @@ void ConfigWizard::priv::load_vendors()
pair.second.preset_bundle->load_installed_printers(appconfig_new); pair.second.preset_bundle->load_installed_printers(appconfig_new);
} }
update_materials(); update_materials(T_ANY);
if (app_config->has_section(AppConfig::SECTION_FILAMENTS)) { if (app_config->has_section(AppConfig::SECTION_FILAMENTS)) {
appconfig_new.set_section(AppConfig::SECTION_FILAMENTS, app_config->get_section(AppConfig::SECTION_FILAMENTS)); appconfig_new.set_section(AppConfig::SECTION_FILAMENTS, app_config->get_section(AppConfig::SECTION_FILAMENTS));
@ -1437,12 +1434,11 @@ void ConfigWizard::priv::set_run_reason(RunReason run_reason)
} }
} }
void ConfigWizard::priv::update_materials() void ConfigWizard::priv::update_materials(Technology technology)
{ {
if (any_fff_selected && (technology & T_FFF)) {
filaments.clear(); filaments.clear();
sla_materials.clear();
if (any_fff_selected) {
// Iterate filaments in all bundles // Iterate filaments in all bundles
for (const auto &pair : bundles) { for (const auto &pair : bundles) {
for (const auto &filament : pair.second.preset_bundle->filaments) { for (const auto &filament : pair.second.preset_bundle->filaments) {
@ -1466,7 +1462,9 @@ void ConfigWizard::priv::update_materials()
} }
} }
if (any_sla_selected) { if (any_sla_selected && (technology & T_SLA)) {
sla_materials.clear();
// Iterate SLA materials in all bundles // Iterate SLA materials in all bundles
for (const auto &pair : bundles) { for (const auto &pair : bundles) {
for (const auto &material : pair.second.preset_bundle->sla_materials) { for (const auto &material : pair.second.preset_bundle->sla_materials) {

View File

@ -466,7 +466,7 @@ struct ConfigWizard::priv
void set_start_page(ConfigWizard::StartPage start_page); void set_start_page(ConfigWizard::StartPage start_page);
void create_3rdparty_pages(); void create_3rdparty_pages();
void set_run_reason(RunReason run_reason); void set_run_reason(RunReason run_reason);
void update_materials(); void update_materials(Technology technology);
void on_custom_setup(); void on_custom_setup();
void on_printer_pick(PagePrinters *page, const PrinterPickerEvent &evt); void on_printer_pick(PagePrinters *page, const PrinterPickerEvent &evt);