Bring back flow variant combo

This commit is contained in:
Noisyfox
2026-05-18 23:15:51 +08:00
parent e785f89833
commit 7a992b397b
5 changed files with 70 additions and 15 deletions

View File

@@ -638,7 +638,7 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
// ORCA show plate type combo box only when its supported
PresetBundle &preset_bundle = *wxGetApp().preset_bundle;
auto cfg = preset_bundle.printers.get_edited_preset().config;
const auto& cfg = preset_bundle.printers.get_edited_preset().config;
// Orca: we use preset_bundle.is_bbl_vendor() instead of isBBL to determine if the plate type combo box should be shown
// ref: https://github.com/OrcaSlicer/OrcaSlicer/pull/11610#discussion_r2607411847
panel_printer_bed->Show(preset_bundle.is_bbl_vendor() || cfg.opt_bool("support_multi_bed_types"));
@@ -647,8 +647,17 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
// NEEDFIX requires AMS check or any type of ???
// Single nozzle & non ams
panel_nozzle_dia->Show(!isDual && preset_bundle.get_printer_extruder_count() < 2);
extruder_single_sizer->Show(false);
if (!isDual) {
// Orca: for printer without flow variant, we do not show flow combo
int extruder_count = 0;
const bool has_flow_variant = cfg.support_different_extruders(extruder_count);
panel_nozzle_dia->Show(!has_flow_variant);
extruder_single_sizer->Show(has_flow_variant);
} else {
panel_nozzle_dia->Show(false);
extruder_single_sizer->Show(false);
}
}
void Sidebar::priv::flush_printer_sync(bool restart)
@@ -1156,21 +1165,19 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title
wxBoxSizer * hsizer_nozzle = new wxBoxSizer(wxHORIZONTAL);
hsizer_nozzle->Add(label_flow, 0, wxALIGN_CENTER);
hsizer_nozzle->Add(combo_flow, 1, wxEXPAND);
label_flow->Hide(); // TODO: Orca hack, hide flow selection
combo_flow->Hide();
if (index < 0) {
label_ams->Hide();
ams_not_installed_msg->Hide();
wxStaticBoxSizer *hsizer = new wxStaticBoxSizer(this, wxHORIZONTAL);
hsizer->Add(hsizer_diameter, 1, wxEXPAND | wxTOP| wxBOTTOM, FromDIP(8));
//hsizer->Add(hsizer_nozzle, 1, wxEXPAND | wxALL, FromDIP(8));
hsizer->Add(hsizer_nozzle, 1, wxEXPAND | wxALL, FromDIP(8));
hsizer->AddSpacer(FromDIP(2)); // Avoid badge
this->sizer = hsizer;
} else {
wxStaticBoxSizer *vsizer = new wxStaticBoxSizer(this, wxVERTICAL);
vsizer->Add(hsizer_ams, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(2));
vsizer->Add(hsizer_diameter, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT | wxBOTTOM, FromDIP(2));
//vsizer->Add(hsizer_nozzle, 0, wxEXPAND | wxALL, FromDIP(2));
vsizer->Add(hsizer_nozzle, 0, wxEXPAND | wxALL, FromDIP(2));
this->sizer = vsizer;
}
AMSCountPopupWindow::UpdateAMSCount(index < 0 ? 0 : index, this);
@@ -1331,6 +1338,14 @@ bool Sidebar::priv::switch_diameter(bool single)
return wxGetApp().get_tab(Preset::TYPE_PRINTER)->select_preset(preset->name);
}
static bool is_skip_high_flow_printer(const std::string& printer)
{
static const std::set<std::string> invalidate_list = {
"Bambu Lab X1E"
};
return invalidate_list.count(printer);
};
bool Sidebar::priv::sync_extruder_list(bool &only_external_material)
{
MachineObject *obj = wxGetApp().getDeviceManager()->get_selected_machine();
@@ -2648,8 +2663,6 @@ void Sidebar::update_presets(Preset::Type preset_type)
Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
bool isBBL = preset_bundle.is_bbl_vendor();
if (auto printer_structure_opt = printer_preset.config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure")) {
wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3);
}
@@ -2658,11 +2671,50 @@ void Sidebar::update_presets(Preset::Type preset_type)
// Update dual extrudes
auto* nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(printer_preset.config.option("nozzle_diameter"));
auto extruder_variants = printer_preset.config.option<ConfigOptionStrings>("extruder_variant_list");
std::string printer_model = printer_preset.config.option<ConfigOptionString>("printer_model")->value;
bool is_dual_extruder = nozzle_diameter->size() == 2;
bool isBBL = preset_bundle.is_bbl_vendor();
bool is_dual_extruder = extruder_variants->size() == 2;
p->layout_printer(preset_bundle.use_bbl_network(), isBBL && is_dual_extruder);
// Update nozzle titles from printer config (e.g. "Main Nozzle" / "Auxiliary Nozzle" for N6)
// UI left = DEPUTY_EXTRUDER_ID(1), UI right = MAIN_EXTRUDER_ID(0)
if (is_dual_extruder) {
std::string printer_type = printer_preset.get_printer_type(wxGetApp().preset_bundle);
auto left_title = DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase);
auto right_title = DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase);
p->left_extruder->SetTitle(_L(left_title));
p->right_extruder->SetTitle(_L(right_title));
}
auto extruders_def = printer_preset.config.def()->get("extruder_type");
auto extruders = printer_preset.config.option<ConfigOptionEnumsGeneric>("extruder_type");
auto nozzle_volumes_def = wxGetApp().preset_bundle->project_config.def()->get("nozzle_volume_type");
auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
auto diameters = wxGetApp().preset_bundle->printers.diameters_of_selected_printer();
auto diameter = printer_preset.config.opt_string("printer_variant");
auto extruder_max_nozzle_count = printer_preset.config.option<ConfigOptionIntsNullable>("extruder_max_nozzle_count");
auto update_extruder_variant = [printer_model, extruders_def, extruders, nozzle_volumes_def, nozzle_volumes, extruder_variants,diameter,extruder_max_nozzle_count](ExtruderGroup & extruder, int index) {
extruder.combo_flow->Clear();
auto type = extruders_def->enum_labels[extruders->values[index]];
int select = -1;
for (size_t i = 0; i < nozzle_volumes_def->enum_labels.size(); ++i) {
if (boost::algorithm::contains(extruder_variants->values[index], type + " " + nozzle_volumes_def->enum_labels[i]) /*||
extruder_max_nozzle_count->values[index] > 1 && nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid*/) { // TODO: Orca: Support hybrid
if (nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == NozzleVolumeType::nvtHighFlow &&(diameter == "0.2" ||
is_skip_high_flow_printer(printer_model)))
continue;
if (nozzle_volumes->values[index] == i)
select = extruder.combo_flow->GetCount();
extruder.combo_flow->Append(_L(nozzle_volumes_def->enum_labels[i]), {}, (void*)i);
}
}
if (select == -1)
select = extruder.combo_flow->GetCount() - 1;
extruder.combo_flow->SetSelection(select);
};
auto update_extruder_diameter = [&diameters, &diameter, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) {
extruder.combo_diameter->Clear();
int select = -1;
@@ -2691,6 +2743,8 @@ void Sidebar::update_presets(Preset::Type preset_type)
p->right_extruder->SetTitle(_L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase)));
AMSCountPopupWindow::UpdateAMSCount(0, p->left_extruder);
AMSCountPopupWindow::UpdateAMSCount(1, p->right_extruder);
update_extruder_variant(*p->left_extruder, 0);
update_extruder_variant(*p->right_extruder, 1);
//if (!p->is_switching_diameter) {
update_extruder_diameter(0, *p->left_extruder);
update_extruder_diameter(1, *p->right_extruder);
@@ -2698,6 +2752,7 @@ void Sidebar::update_presets(Preset::Type preset_type)
p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight()));
} else {
AMSCountPopupWindow::UpdateAMSCount(0, p->single_extruder);
update_extruder_variant(*p->single_extruder, 0);
//if (!p->is_switching_diameter)
update_extruder_diameter(0, *p->single_extruder);