mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-21 16:02:37 +00:00
Fix: Show indexed coFloatsOrPercents options in unsaved changes dialog (#15472)
This commit is contained in:
@@ -1490,7 +1490,15 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, DynamicConfig * config
|
||||
|
||||
for (const std::string &opt_key : config->keys()) {
|
||||
int variant_index = -2;
|
||||
const Search::Option &option = searcher.get_option(opt_key, type, variant_index);
|
||||
Search::Option option = searcher.get_option(opt_key, type, variant_index);
|
||||
if (variant_index == -2) {
|
||||
// Orca: Every transferred setting must remain visible even when it is absent from the search index.
|
||||
const ConfigOptionDef* def = print_config_def.get(opt_key);
|
||||
const std::string label = def ? (def->full_label.empty() ? def->label : def->full_label) : std::string();
|
||||
option.label_local = (label.empty() ? from_u8(opt_key) : _L(label)).ToStdWstring();
|
||||
option.category_local = (def && !def->category.empty() ?
|
||||
Tab::translate_category(from_u8(def->category), type) : _L("Other")).ToStdWstring();
|
||||
}
|
||||
auto category = option.category_local;
|
||||
auto opt = dynamic_cast<ConfigOptionVectorBase*>(config->option(opt_key));
|
||||
std::string value_from = opt->vserialize()[from];
|
||||
@@ -1518,6 +1526,8 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
||||
else
|
||||
presets_list.emplace_back(presets_);
|
||||
|
||||
const bool multiple_extruders = wxGetApp().preset_bundle->get_printer_extruder_count() > 1;
|
||||
|
||||
// Display a dialog showing the dirty options in a human readable form.
|
||||
for (PresetCollection* presets : presets_list)
|
||||
{
|
||||
@@ -1553,29 +1563,41 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
||||
|
||||
auto variant_key = Preset::get_iot_type_string(type) + "_extruder_variant";
|
||||
auto id_key = Preset::get_iot_type_string(type) + "_extruder_id";
|
||||
auto extruder_variant = dynamic_cast<ConfigOptionStrings const *>(old_config.option(variant_key));
|
||||
auto extruder_id = dynamic_cast<ConfigOptionInts const *>(old_config.option(id_key));
|
||||
// Orca: Dirty indices belong to the edited config, which may contain newly added variants.
|
||||
auto extruder_variant = dynamic_cast<ConfigOptionStrings const *>(new_config.option(variant_key));
|
||||
auto extruder_id = dynamic_cast<ConfigOptionInts const *>(new_config.option(id_key));
|
||||
|
||||
for (const std::string& opt_key : dirty_options) {
|
||||
int variant_index = -2;
|
||||
const Search::Option &option = searcher.get_option(opt_key, type, variant_index);
|
||||
if (option.opt_key() != opt_key && variant_index < -1) {
|
||||
if (variant_index == -2) {
|
||||
// When founded option isn't the correct one.
|
||||
// It can be for dirty_options: "default_print_profile", "printer_model", "printer_settings_id",
|
||||
// because of they don't exist in searcher
|
||||
continue;
|
||||
}
|
||||
auto category = option.category_local;
|
||||
if (variant_index >= 0) {
|
||||
if (printer_options_with_variant_2.count(opt_key.substr(0, opt_key.find_last_of('#'))) > 0)
|
||||
variant_index /= 2;
|
||||
if (boost::nowide::narrow(category).find("Extruder ") == 0)
|
||||
category = category.substr(0, 8);
|
||||
if (extruder_id)
|
||||
category = category + (wxString(" {") + (extruder_id->values[variant_index] == 1 ? _L("Left: ") : _L("Right: "))
|
||||
+ L(extruder_variant->values[variant_index]) + "}");
|
||||
else
|
||||
category = category + (wxString(" {") + L(extruder_variant->values[variant_index]) + "}");
|
||||
wxString category = option.category_local;
|
||||
wxString label = option.label_local;
|
||||
if (type == Preset::TYPE_PRINTER && variant_index >= 0 &&
|
||||
printer_options_with_variant_2.count(get_pure_opt_key(opt_key)) > 0) {
|
||||
// Orca: silent_mode is obsolete on import, but its option and two-column UI still exist.
|
||||
// Keep mode labels for configs that explicitly enable it; omit them in the default single-mode UI.
|
||||
if (new_config.opt_bool("silent_mode"))
|
||||
label += " (" + (variant_index % 2 == 0 ? _L("Normal") : _L("Silent")) + ")";
|
||||
variant_index /= 2;
|
||||
}
|
||||
if (variant_index >= 0 && extruder_variant && variant_index < extruder_variant->size()) {
|
||||
// Orca: Match the untranslated category and use the same extruder names as the printer tabs.
|
||||
if (option.category.compare(0, 9, L"Extruder ") == 0)
|
||||
category = _L("Extruder");
|
||||
wxString variant_label = L(extruder_variant->values[variant_index]);
|
||||
// Orca: An extruder name only disambiguates variants on printers with multiple extruders.
|
||||
if (multiple_extruders && extruder_id && variant_index < extruder_id->size() && extruder_id->values[variant_index] > 0) {
|
||||
const wxString extruder_name = Tab::translate_category(
|
||||
wxString::Format("Extruder %d", extruder_id->values[variant_index]), Preset::TYPE_PRINTER);
|
||||
variant_label = extruder_name + " (" + variant_label + ")";
|
||||
}
|
||||
category = variant_label + ": " + category;
|
||||
}
|
||||
|
||||
/*m_tree->Append(opt_key, type, option.category_local, option.group_local, option.label_local,
|
||||
@@ -1584,7 +1606,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
||||
|
||||
//PresetItem pi = {opt_key, type, 1983};
|
||||
//m_presetitems.push_back()
|
||||
PresetItem pi = {type, opt_key, category, option.group_local, option.label_local, get_string_value(opt_key, old_config), get_string_value(opt_key, new_config)};
|
||||
PresetItem pi = {type, opt_key, category, option.group_local, label, get_string_value(opt_key, old_config), get_string_value(opt_key, new_config)};
|
||||
m_presetitems.push_back(pi);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user