Disambiguate nozzles by the variant too

This commit is contained in:
Eric McCann
2026-09-19 07:23:55 -04:00
parent 30b3666c47
commit 734dc1f9ac
+11 -4
View File
@@ -1572,8 +1572,10 @@ bool Sidebar::priv::switch_diameter(bool single)
auto* nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(printer_preset.config.option("nozzle_diameter"));
if (nozzle_diameter && nozzle_diameter->size() > 0) {
auto current_nozzle_dia = get_diameter_string(nozzle_diameter->values[0]);
// If the selected diameter is the same as current nozzle, don't switch profiles
if (current_nozzle_dia == diameter.ToStdString()) {
// A named variant can share this diameter; selecting the plain diameter
// must still switch back to the standard profile.
if (current_nozzle_dia == diameter.ToStdString() &&
printer_preset.config.opt_string("printer_variant") == diameter.ToStdString()) {
return true;
}
}
@@ -3677,11 +3679,16 @@ void Sidebar::update_presets(Preset::Type preset_type)
extruder.combo_flow->SetSelection(select);
};
auto update_extruder_diameter = [&diameters, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) {
auto update_extruder_diameter = [&diameters, &nozzle_diameter, &diameter](int extruder_index,ExtruderGroup & extruder) {
extruder.combo_diameter->Clear();
int select = -1;
// ORCA get the actual nozzle diameter from printer config
auto nozzle_dia = get_diameter_string(nozzle_diameter->values[extruder_index]);
// Named variants such as "0.4 High Flow" share a physical diameter.
// Retain the variant selection unless the diameter was customized.
const auto selected_variant =
(diameter == nozzle_dia || boost::algorithm::starts_with(diameter, nozzle_dia + " ")) &&
std::find(diameters.begin(), diameters.end(), diameter) != diameters.end() ? diameter : nozzle_dia;
// ORCA try to add nozzle diameter from config if list is empty. fixes blank nozzle combo box when preset has no alias
if(diameters[0].empty() && !nozzle_dia.empty()){
diameters[0] = nozzle_dia;
@@ -3691,7 +3698,7 @@ void Sidebar::update_presets(Preset::Type preset_type)
diameters.push_back(nozzle_dia);
}
for (size_t i = 0; i < diameters.size(); ++i) {
if (diameters[i] == nozzle_dia)
if (diameters[i] == selected_variant)
select = extruder.combo_diameter->GetCount();
extruder.combo_diameter->Append(diameters[i], {});
}