From f750abb9db5c4d5105adb31343f4932f9076db7b Mon Sep 17 00:00:00 2001 From: YuSanka Date: Sun, 4 Mar 2018 15:21:01 +0100 Subject: [PATCH] Refactor load_config() function --- xs/src/slic3r/GUI/Tab.cpp | 72 +++++++++++++-------------------------- 1 file changed, 23 insertions(+), 49 deletions(-) diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 785a6c165..d93f09b02 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -147,6 +147,18 @@ void Tab::update_tab_ui() m_presets->update_tab_ui(m_presets_choice, m_show_incompatible_presets); } +template +boost::any get_new_value(const DynamicPrintConfig &config_new, const DynamicPrintConfig &config_old, std::string opt_key, int &index) +{ + for (int i = 0; i < config_new.option(opt_key)->values.size(); i++) + if (config_new.option(opt_key)->values[i] != + config_old.option(opt_key)->values[i]){ + index = i; + break; + } + return config_new.option(opt_key)->values[index]; +} + // Load a provied DynamicConfig into the tab, modifying the active preset. // This could be used for example by setting a Wipe Tower position by interactive manipulation in the 3D view. void Tab::load_config(DynamicPrintConfig config) @@ -168,65 +180,27 @@ void Tab::load_config(DynamicPrintConfig config) case coString: value = config.opt_string(opt_key); break; - case coPercents:{ - for (int i = 0; i < config.option(opt_key)->values.size(); i++) - if (config.option(opt_key)->values[i] != - m_config->option(opt_key)->values[i]){ - value = config.option(opt_key)->values[i]; - opt_index = i; - break; - } - } + case coPercents: + value = get_new_value(config, *m_config, opt_key, opt_index); break; - case coFloats:{ - for (int i = 0; i < config.option(opt_key)->values.size(); i++) - if (config.option(opt_key)->values[i] != - m_config->option(opt_key)->values[i]){ - value = config.option(opt_key)->values[i]; - opt_index = i; - break; - } - } + case coFloats: + value = get_new_value(config, *m_config, opt_key, opt_index); break; - case coStrings:{ - if (config.option(opt_key)->values.empty()) - value = ""; - else{ - for (int i = 0; i < config.option(opt_key)->values.size(); i++) - if (config.option(opt_key)->values[i] != - m_config->option(opt_key)->values[i]){ - value = config.option(opt_key)->values[i]; - opt_index = i; - break; - } - } - } + case coStrings: + value = config.option(opt_key)->values.empty() ? "" : + get_new_value(config, *m_config, opt_key, opt_index); break; case coBool: value = config.opt_bool(opt_key); break; - case coBools:{ - for (int i = 0; i < config.option(opt_key)->values.size(); i++) - if (config.option(opt_key)->values[i] != - m_config->option(opt_key)->values[i]){ - value = config.option(opt_key)->values[i]; - opt_index = i; - break; - } - } + case coBools: + value = get_new_value(config, *m_config, opt_key, opt_index); break; case coInt: value = config.opt_int(opt_key); break; - case coInts:{ - for (int i = 0; i < config.option(opt_key)->values.size(); i++) - if (config.option(opt_key)->values[i] != - m_config->option(opt_key)->values[i]){ - value = config.option(opt_key)->values[i]; - opt_index = i; - break; - } - } + case coInts: + value = get_new_value(config, *m_config, opt_key, opt_index); break; case coEnum:{ if (opt_key.compare("external_fill_pattern") == 0 ||