ENH: config: add default_nozzle_volume_type in printer

1. also remove original nozzle_volume_type from printer
and move into project config
2. support save nozzle_volume_type into appconfig
and load from it at beginning or printer switch

jira: no-jira

Change-Id: I01fc82d142fc633fc59a238796a71b9f8d180efb
(cherry picked from commit fe8b904e7551cde83b1ead75922e9b60278b50ad)
This commit is contained in:
lane.wei
2024-08-06 16:31:32 +08:00
committed by Noisyfox
parent b2f2e41b80
commit 9142654795
7 changed files with 98 additions and 9 deletions

View File

@@ -4688,6 +4688,27 @@ if (is_marlin_flavor)
void TabPrinter::on_preset_loaded()
{
// Orca
//update nozzle_volume_type
const Preset& current_printer = m_preset_bundle->printers.get_selected_preset();
const Preset* base_printer = m_preset_bundle->printers.get_preset_base(current_printer);
if (!base_printer)
base_printer = &current_printer;
std::string base_name = base_printer->name;
if (base_name != m_base_preset_name) {
bool use_default_nozzle_volume_type = true;
m_base_preset_name = base_name;
std::string prev_nozzle_volume_type = wxGetApp().app_config->get_nozzle_volume_types_from_config(base_name);
if (!prev_nozzle_volume_type.empty()) {
ConfigOptionEnumsGeneric* nozzle_volume_type_option = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
if (nozzle_volume_type_option->deserialize(prev_nozzle_volume_type)) {
use_default_nozzle_volume_type = false;
}
}
if (use_default_nozzle_volume_type) {
m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type")->values = current_printer.config.option<ConfigOptionEnumsGeneric>("default_nozzle_volume_type")->values;
}
}
// update the extruders count field
auto *nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter"));
size_t extruders_count = nozzle_diameter->values.size();
@@ -6279,10 +6300,18 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep
void TabPrinter::set_extruder_volume_type(int extruder_id, NozzleVolumeType type)
{
auto nozzle_volumes = m_config->option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
assert(nozzle_volumes->values.size() > (size_t)extruder_id);
nozzle_volumes->values[extruder_id] = type;
on_value_change((boost::format("nozzle_volume_type#%1%") % extruder_id).str(), int(type));
//save to app config
if (!m_base_preset_name.empty()) {
ConfigOptionEnumsGeneric* nozzle_volume_type_option = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
std::string nozzle_volume_type_str = nozzle_volume_type_option->serialize();
wxGetApp().app_config->save_nozzle_volume_types_to_config(m_base_preset_name, nozzle_volume_type_str);
}
}
// Return a callback to create a TabPrinter widget to edit bed shape
@@ -6403,7 +6432,7 @@ void Tab::update_extruder_variants(int extruder_id)
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << extruder_id;
if (m_extruder_switch) {
Preset &printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
auto nozzle_volumes = printer_preset.config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
if (nozzle_volumes->size() == 2) {
auto nozzle_volumes_def = printer_preset.config.def()->get("nozzle_volume_type");
wxString left, right;
@@ -6431,7 +6460,7 @@ void Tab::update_extruder_variants(int extruder_id)
void Tab::switch_excluder(int extruder_id)
{
Preset & printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
auto nozzle_volumes = printer_preset.config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
auto extruders = printer_preset.config.option<ConfigOptionEnumsGeneric>("extruder_type");
std::pair<std::string, std::string> variant_keys[]{
{}, {"print_extruder_id", "print_extruder_variant"}, // Preset::TYPE_PRINT