diff --git a/lib/Slic3r/GUI/Tab.pm b/lib/Slic3r/GUI/Tab.pm index e01c0a107..9253cee09 100644 --- a/lib/Slic3r/GUI/Tab.pm +++ b/lib/Slic3r/GUI/Tab.pm @@ -495,6 +495,7 @@ sub _compatible_printers_widget { $btn->$method; # All printers have been made compatible with this preset. $self->_load_key_value('compatible_printers', []) if $checkbox->GetValue; + $self->get_field('compatible_printers_condition')->toggle($checkbox->GetValue); }); EVT_BUTTON($self, $btn, sub { @@ -516,6 +517,7 @@ sub _compatible_printers_widget { my $value = [ @presets[$dlg->GetSelections] ]; if (!@$value) { $checkbox->SetValue(1); + $self->get_field('compatible_printers_condition')->toggle(1); $btn->Disable; } # All printers have been made compatible with this preset. @@ -533,6 +535,7 @@ sub _reload_compatible_printers_widget { my $method = $has_any ? 'Enable' : 'Disable'; $self->{compatible_printers_checkbox}->SetValue(! $has_any); $self->{compatible_printers_btn}->$method; + $self->get_field('compatible_printers_condition')->toggle(! $has_any); } sub update_ui_from_settings { diff --git a/xs/src/slic3r/GUI/Preset.cpp b/xs/src/slic3r/GUI/Preset.cpp index 6af5982a3..2720654bf 100644 --- a/xs/src/slic3r/GUI/Preset.cpp +++ b/xs/src/slic3r/GUI/Preset.cpp @@ -144,8 +144,10 @@ std::string Preset::label() const bool Preset::is_compatible_with_printer(const Preset &active_printer, const DynamicPrintConfig *extra_config) const { - auto *condition = dynamic_cast(this->config.option("compatible_printers_condition")); - if (condition != nullptr && ! condition->value.empty()) { + auto *condition = dynamic_cast(this->config.option("compatible_printers_condition")); + auto *compatible_printers = dynamic_cast(this->config.option("compatible_printers")); + bool has_compatible_printers = compatible_printers != nullptr && ! compatible_printers->values.empty(); + if (! has_compatible_printers && condition != nullptr && ! condition->value.empty()) { try { return PlaceholderParser::evaluate_boolean_expression(condition->value, active_printer.config, extra_config); } catch (const std::runtime_error &err) { @@ -154,9 +156,7 @@ bool Preset::is_compatible_with_printer(const Preset &active_printer, const Dyna return true; } } - auto *compatible_printers = dynamic_cast(this->config.option("compatible_printers")); - return this->is_default || active_printer.name.empty() || - compatible_printers == nullptr || compatible_printers->values.empty() || + return this->is_default || active_printer.name.empty() || ! has_compatible_printers || std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.name) != compatible_printers->values.end(); }