Implemented a support of the coFloatsOrPercents values on settings tabs
This commit is contained in:
parent
f730fd21d4
commit
f04545f1e6
10 changed files with 95 additions and 38 deletions
|
@ -1677,6 +1677,7 @@ public:
|
||||||
case coPercent: { auto opt = new ConfigOptionPercent(); archive(*opt); return opt; }
|
case coPercent: { auto opt = new ConfigOptionPercent(); archive(*opt); return opt; }
|
||||||
case coPercents: { auto opt = new ConfigOptionPercents(); archive(*opt); return opt; }
|
case coPercents: { auto opt = new ConfigOptionPercents(); archive(*opt); return opt; }
|
||||||
case coFloatOrPercent: { auto opt = new ConfigOptionFloatOrPercent(); archive(*opt); return opt; }
|
case coFloatOrPercent: { auto opt = new ConfigOptionFloatOrPercent(); archive(*opt); return opt; }
|
||||||
|
case coFloatsOrPercents:{ auto opt = new ConfigOptionFloatsOrPercents();archive(*opt); return opt; }
|
||||||
case coPoint: { auto opt = new ConfigOptionPoint(); archive(*opt); return opt; }
|
case coPoint: { auto opt = new ConfigOptionPoint(); archive(*opt); return opt; }
|
||||||
case coPoints: { auto opt = new ConfigOptionPoints(); archive(*opt); return opt; }
|
case coPoints: { auto opt = new ConfigOptionPoints(); archive(*opt); return opt; }
|
||||||
case coPoint3: { auto opt = new ConfigOptionPoint3(); archive(*opt); return opt; }
|
case coPoint3: { auto opt = new ConfigOptionPoint3(); archive(*opt); return opt; }
|
||||||
|
@ -1708,6 +1709,7 @@ public:
|
||||||
case coPercent: archive(*static_cast<const ConfigOptionPercent*>(opt)); break;
|
case coPercent: archive(*static_cast<const ConfigOptionPercent*>(opt)); break;
|
||||||
case coPercents: archive(*static_cast<const ConfigOptionPercents*>(opt)); break;
|
case coPercents: archive(*static_cast<const ConfigOptionPercents*>(opt)); break;
|
||||||
case coFloatOrPercent: archive(*static_cast<const ConfigOptionFloatOrPercent*>(opt)); break;
|
case coFloatOrPercent: archive(*static_cast<const ConfigOptionFloatOrPercent*>(opt)); break;
|
||||||
|
case coFloatsOrPercents:archive(*static_cast<const ConfigOptionFloatsOrPercents*>(opt));break;
|
||||||
case coPoint: archive(*static_cast<const ConfigOptionPoint*>(opt)); break;
|
case coPoint: archive(*static_cast<const ConfigOptionPoint*>(opt)); break;
|
||||||
case coPoints: archive(*static_cast<const ConfigOptionPoints*>(opt)); break;
|
case coPoints: archive(*static_cast<const ConfigOptionPoints*>(opt)); break;
|
||||||
case coPoint3: archive(*static_cast<const ConfigOptionPoint3*>(opt)); break;
|
case coPoint3: archive(*static_cast<const ConfigOptionPoint3*>(opt)); break;
|
||||||
|
|
|
@ -1253,6 +1253,7 @@ inline t_config_option_keys deep_diff(const ConfigBase &config_this, const Confi
|
||||||
case coStrings: add_correct_opts_to_diff<ConfigOptionStrings >(opt_key, diff, config_other, config_this); break;
|
case coStrings: add_correct_opts_to_diff<ConfigOptionStrings >(opt_key, diff, config_other, config_this); break;
|
||||||
case coPercents:add_correct_opts_to_diff<ConfigOptionPercents >(opt_key, diff, config_other, config_this); break;
|
case coPercents:add_correct_opts_to_diff<ConfigOptionPercents >(opt_key, diff, config_other, config_this); break;
|
||||||
case coPoints: add_correct_opts_to_diff<ConfigOptionPoints >(opt_key, diff, config_other, config_this); break;
|
case coPoints: add_correct_opts_to_diff<ConfigOptionPoints >(opt_key, diff, config_other, config_this); break;
|
||||||
|
case coFloatsOrPercents: add_correct_opts_to_diff<ConfigOptionFloatsOrPercents >(opt_key, diff, config_other, config_this); break;
|
||||||
default: diff.emplace_back(opt_key); break;
|
default: diff.emplace_back(opt_key); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -536,7 +536,7 @@ void PrintConfigDef::init_fff_params()
|
||||||
def->set_default_value(new ConfigOptionBool(true));
|
def->set_default_value(new ConfigOptionBool(true));
|
||||||
|
|
||||||
def = this->add("overhang_overlaps", coPercents);
|
def = this->add("overhang_overlaps", coPercents);
|
||||||
def->label = L("Overhang overlap percentage");
|
def->full_label = L("Overhang overlap percentage");
|
||||||
def->category = L("Speed");
|
def->category = L("Speed");
|
||||||
def->tooltip = L("Controls percentage of overhang extrusion overlap with the previous layer."
|
def->tooltip = L("Controls percentage of overhang extrusion overlap with the previous layer."
|
||||||
"Each overlap size then corresponds with the overhang speed set below.");
|
"Each overlap size then corresponds with the overhang speed set below.");
|
||||||
|
@ -547,7 +547,7 @@ void PrintConfigDef::init_fff_params()
|
||||||
def->set_default_value(new ConfigOptionPercents({60, 40, 20, 0}));
|
def->set_default_value(new ConfigOptionPercents({60, 40, 20, 0}));
|
||||||
|
|
||||||
def = this->add("dynamic_overhang_speeds", coFloatsOrPercents);
|
def = this->add("dynamic_overhang_speeds", coFloatsOrPercents);
|
||||||
def->label = L("Dynamic speed on overhangs");
|
def->full_label = L("Dynamic speed on overhangs");
|
||||||
def->category = L("Speed");
|
def->category = L("Speed");
|
||||||
def->tooltip = L("This setting controls the speed of the overhangs for overlap values set above."
|
def->tooltip = L("This setting controls the speed of the overhangs for overlap values set above."
|
||||||
"The final speed is calculated as an interpolation of the set speed values."
|
"The final speed is calculated as an interpolation of the set speed values."
|
||||||
|
|
|
@ -290,6 +290,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||||
break; }
|
break; }
|
||||||
case coString:
|
case coString:
|
||||||
case coStrings:
|
case coStrings:
|
||||||
|
case coFloatsOrPercents:
|
||||||
case coFloatOrPercent: {
|
case coFloatOrPercent: {
|
||||||
if (m_opt.type == coFloatOrPercent && m_opt.opt_key == "first_layer_height" && !str.IsEmpty() && str.Last() == '%') {
|
if (m_opt.type == coFloatOrPercent && m_opt.opt_key == "first_layer_height" && !str.IsEmpty() && str.Last() == '%') {
|
||||||
// Workaroud to avoid of using of the % for first layer height
|
// Workaroud to avoid of using of the % for first layer height
|
||||||
|
@ -301,7 +302,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||||
m_value = into_u8(stVal);;
|
m_value = into_u8(stVal);;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (m_opt.type == coFloatOrPercent && !str.IsEmpty() && str.Last() != '%')
|
if ((m_opt.type == coFloatOrPercent || m_opt.type == coFloatsOrPercents) && !str.IsEmpty() && str.Last() != '%')
|
||||||
{
|
{
|
||||||
double val = 0.;
|
double val = 0.;
|
||||||
const char dec_sep = is_decimal_separator_point() ? '.' : ',';
|
const char dec_sep = is_decimal_separator_point() ? '.' : ',';
|
||||||
|
@ -443,6 +444,13 @@ void TextCtrl::BUILD() {
|
||||||
text_value += "%";
|
text_value += "%";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case coFloatsOrPercents: {
|
||||||
|
const auto val = m_opt.get_default_value<ConfigOptionFloatsOrPercents>()->get_at(m_opt_idx);
|
||||||
|
text_value = double_to_string(val.value);
|
||||||
|
if (val.percent)
|
||||||
|
text_value += "%";
|
||||||
|
break;
|
||||||
|
}
|
||||||
case coPercent:
|
case coPercent:
|
||||||
{
|
{
|
||||||
text_value = wxString::Format(_T("%i"), int(m_opt.default_value->getFloat()));
|
text_value = wxString::Format(_T("%i"), int(m_opt.default_value->getFloat()));
|
||||||
|
@ -574,6 +582,7 @@ bool TextCtrl::value_was_changed()
|
||||||
case coString:
|
case coString:
|
||||||
case coStrings:
|
case coStrings:
|
||||||
case coFloatOrPercent:
|
case coFloatOrPercent:
|
||||||
|
case coFloatsOrPercents:
|
||||||
return boost::any_cast<std::string>(m_value) != boost::any_cast<std::string>(val);
|
return boost::any_cast<std::string>(m_value) != boost::any_cast<std::string>(val);
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -130,6 +130,18 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt
|
||||||
val = boost::any_cast<double>(value);
|
val = boost::any_cast<double>(value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case coFloatsOrPercents:{
|
||||||
|
std::string str = boost::any_cast<std::string>(value);
|
||||||
|
bool percent = false;
|
||||||
|
if (str.back() == '%') {
|
||||||
|
str.pop_back();
|
||||||
|
percent = true;
|
||||||
|
}
|
||||||
|
double val = std::stod(str); // locale-dependent (on purpose - the input is the actual content of the field)
|
||||||
|
ConfigOptionFloatsOrPercents* vec_new = new ConfigOptionFloatsOrPercents({ {val, percent} });
|
||||||
|
config.option<ConfigOptionFloatsOrPercents>(opt_key)->set_at(vec_new, opt_index, opt_index);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case coPercents:{
|
case coPercents:{
|
||||||
ConfigOptionPercents* vec_new = new ConfigOptionPercents{ boost::any_cast<double>(value) };
|
ConfigOptionPercents* vec_new = new ConfigOptionPercents{ boost::any_cast<double>(value) };
|
||||||
config.option<ConfigOptionPercents>(opt_key)->set_at(vec_new, opt_index, opt_index);
|
config.option<ConfigOptionPercents>(opt_key)->set_at(vec_new, opt_index, opt_index);
|
||||||
|
|
|
@ -54,6 +54,7 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co
|
||||||
default:
|
default:
|
||||||
switch (opt.type) {
|
switch (opt.type) {
|
||||||
case coFloatOrPercent:
|
case coFloatOrPercent:
|
||||||
|
case coFloatsOrPercents:
|
||||||
case coFloat:
|
case coFloat:
|
||||||
case coFloats:
|
case coFloats:
|
||||||
case coPercent:
|
case coPercent:
|
||||||
|
@ -867,6 +868,14 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config
|
||||||
ret = text_value;
|
ret = text_value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case coFloatsOrPercents:{
|
||||||
|
const auto& val = config.option<ConfigOptionFloatsOrPercents>(opt_key)->get_at(idx);
|
||||||
|
text_value = double_to_string(val.value);
|
||||||
|
if (val.percent)
|
||||||
|
text_value += "%";
|
||||||
|
ret = text_value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case coPercent:{
|
case coPercent:{
|
||||||
double val = config.option<ConfigOptionPercent>(opt_key)->value;
|
double val = config.option<ConfigOptionPercent>(opt_key)->value;
|
||||||
text_value = wxString::Format(_T("%i"), int(val));
|
text_value = wxString::Format(_T("%i"), int(val));
|
||||||
|
|
|
@ -80,8 +80,12 @@ static std::string get_key(const std::string& opt_key, Preset::Type type)
|
||||||
|
|
||||||
void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type type)
|
void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type type)
|
||||||
{
|
{
|
||||||
auto emplace = [this, type](const std::string key, const wxString& label)
|
auto emplace = [this, type](std::string key, const wxString& label, int id = -1)
|
||||||
{
|
{
|
||||||
|
if (id >= 0)
|
||||||
|
// ! It's very important to use "#". opt_key#n is a real option key used in GroupAndCategory
|
||||||
|
key += "#" + std::to_string(id);
|
||||||
|
|
||||||
const GroupAndCategory& gc = groups_and_categories[key];
|
const GroupAndCategory& gc = groups_and_categories[key];
|
||||||
if (gc.group.IsEmpty() || gc.category.IsEmpty())
|
if (gc.group.IsEmpty() || gc.category.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
@ -89,10 +93,14 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty
|
||||||
wxString suffix;
|
wxString suffix;
|
||||||
wxString suffix_local;
|
wxString suffix_local;
|
||||||
if (gc.category == "Machine limits") {
|
if (gc.category == "Machine limits") {
|
||||||
suffix = key.back()=='1' ? L("Stealth") : L("Normal");
|
suffix = id == 1 ? L("Stealth") : L("Normal");
|
||||||
suffix_local = " " + _(suffix);
|
suffix_local = " " + _(suffix);
|
||||||
suffix = " " + suffix;
|
suffix = " " + suffix;
|
||||||
}
|
}
|
||||||
|
else if (gc.group == "Dynamic overhang speed" && id >= 0) {
|
||||||
|
suffix = " " + std::to_string(id+1);
|
||||||
|
suffix_local = suffix;
|
||||||
|
}
|
||||||
|
|
||||||
if (!label.IsEmpty())
|
if (!label.IsEmpty())
|
||||||
options.emplace_back(Option{ boost::nowide::widen(key), type,
|
options.emplace_back(Option{ boost::nowide::widen(key), type,
|
||||||
|
@ -109,7 +117,7 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty
|
||||||
|
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
if ( (type == Preset::TYPE_SLA_MATERIAL || type == Preset::TYPE_PRINTER) && opt_key != "bed_shape" && opt_key != "thumbnails")
|
if ( (type == Preset::TYPE_SLA_MATERIAL || type == Preset::TYPE_PRINTER || type == Preset::TYPE_PRINT) && opt_key != "bed_shape" && opt_key != "thumbnails")
|
||||||
switch (config->option(opt_key)->type())
|
switch (config->option(opt_key)->type())
|
||||||
{
|
{
|
||||||
case coInts: change_opt_key<ConfigOptionInts >(opt_key, config, cnt); break;
|
case coInts: change_opt_key<ConfigOptionInts >(opt_key, config, cnt); break;
|
||||||
|
@ -118,6 +126,7 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty
|
||||||
case coStrings: change_opt_key<ConfigOptionStrings >(opt_key, config, cnt); break;
|
case coStrings: change_opt_key<ConfigOptionStrings >(opt_key, config, cnt); break;
|
||||||
case coPercents:change_opt_key<ConfigOptionPercents >(opt_key, config, cnt); break;
|
case coPercents:change_opt_key<ConfigOptionPercents >(opt_key, config, cnt); break;
|
||||||
case coPoints: change_opt_key<ConfigOptionPoints >(opt_key, config, cnt); break;
|
case coPoints: change_opt_key<ConfigOptionPoints >(opt_key, config, cnt); break;
|
||||||
|
case coFloatsOrPercents: change_opt_key<ConfigOptionFloatsOrPercents >(opt_key, config, cnt); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,8 +137,7 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty
|
||||||
emplace(key, label);
|
emplace(key, label);
|
||||||
else
|
else
|
||||||
for (int i = 0; i < cnt; ++i)
|
for (int i = 0; i < cnt; ++i)
|
||||||
// ! It's very important to use "#". opt_key#n is a real option key used in GroupAndCategory
|
emplace(key, label, i);
|
||||||
emplace(key + "#" + std::to_string(i), label);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -603,7 +603,7 @@ void Tab::update_changed_ui()
|
||||||
if (m_postpone_update_ui)
|
if (m_postpone_update_ui)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const bool deep_compare = (m_type == Slic3r::Preset::TYPE_PRINTER || m_type == Slic3r::Preset::TYPE_SLA_MATERIAL);
|
const bool deep_compare = m_type != Preset::TYPE_FILAMENT;
|
||||||
auto dirty_options = m_presets->current_dirty_options(deep_compare);
|
auto dirty_options = m_presets->current_dirty_options(deep_compare);
|
||||||
auto nonsys_options = m_presets->current_different_from_parent_options(deep_compare);
|
auto nonsys_options = m_presets->current_different_from_parent_options(deep_compare);
|
||||||
if (m_type == Preset::TYPE_PRINTER) {
|
if (m_type == Preset::TYPE_PRINTER) {
|
||||||
|
@ -644,11 +644,10 @@ void Tab::update_changed_ui()
|
||||||
|
|
||||||
void Tab::init_options_list()
|
void Tab::init_options_list()
|
||||||
{
|
{
|
||||||
if (!m_options_list.empty())
|
m_options_list.clear();
|
||||||
m_options_list.clear();
|
|
||||||
|
|
||||||
for (const std::string& opt_key : m_config->keys())
|
for (const std::string& opt_key : m_config->keys())
|
||||||
m_options_list.emplace(opt_key, m_opt_status_value);
|
emplace_option(opt_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
@ -659,10 +658,36 @@ void add_correct_opts_to_options_list(const std::string &opt_key, std::map<std::
|
||||||
map.emplace(opt_key + "#" + std::to_string(i), value);
|
map.emplace(opt_key + "#" + std::to_string(i), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tab::emplace_option(const std::string& opt_key, bool respect_vec_values/* = false*/)
|
||||||
|
{
|
||||||
|
if (respect_vec_values) {
|
||||||
|
switch (m_config->option(opt_key)->type())
|
||||||
|
{
|
||||||
|
case coInts: add_correct_opts_to_options_list<ConfigOptionInts >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
case coBools: add_correct_opts_to_options_list<ConfigOptionBools >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
case coFloats: add_correct_opts_to_options_list<ConfigOptionFloats >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
case coStrings: add_correct_opts_to_options_list<ConfigOptionStrings >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
case coPercents:add_correct_opts_to_options_list<ConfigOptionPercents >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
case coPoints: add_correct_opts_to_options_list<ConfigOptionPoints >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
case coFloatsOrPercents: add_correct_opts_to_options_list<ConfigOptionFloatsOrPercents >(opt_key, m_options_list, this, m_opt_status_value); break;
|
||||||
|
default: m_options_list.emplace(opt_key, m_opt_status_value); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_options_list.emplace(opt_key, m_opt_status_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabPrint::init_options_list()
|
||||||
|
{
|
||||||
|
m_options_list.clear();
|
||||||
|
|
||||||
|
for (const std::string& opt_key : m_config->keys())
|
||||||
|
emplace_option(opt_key, true);
|
||||||
|
}
|
||||||
|
|
||||||
void TabPrinter::init_options_list()
|
void TabPrinter::init_options_list()
|
||||||
{
|
{
|
||||||
if (!m_options_list.empty())
|
m_options_list.clear();
|
||||||
m_options_list.clear();
|
|
||||||
|
|
||||||
for (const std::string& opt_key : m_config->keys())
|
for (const std::string& opt_key : m_config->keys())
|
||||||
{
|
{
|
||||||
|
@ -670,16 +695,7 @@ void TabPrinter::init_options_list()
|
||||||
m_options_list.emplace(opt_key, m_opt_status_value);
|
m_options_list.emplace(opt_key, m_opt_status_value);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (m_config->option(opt_key)->type())
|
emplace_option(opt_key, true);
|
||||||
{
|
|
||||||
case coInts: add_correct_opts_to_options_list<ConfigOptionInts >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coBools: add_correct_opts_to_options_list<ConfigOptionBools >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coFloats: add_correct_opts_to_options_list<ConfigOptionFloats >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coStrings: add_correct_opts_to_options_list<ConfigOptionStrings >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coPercents:add_correct_opts_to_options_list<ConfigOptionPercents >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coPoints: add_correct_opts_to_options_list<ConfigOptionPoints >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
default: m_options_list.emplace(opt_key, m_opt_status_value); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (m_printer_technology == ptFFF)
|
if (m_printer_technology == ptFFF)
|
||||||
m_options_list.emplace("extruders_count", m_opt_status_value);
|
m_options_list.emplace("extruders_count", m_opt_status_value);
|
||||||
|
@ -687,8 +703,7 @@ void TabPrinter::init_options_list()
|
||||||
|
|
||||||
void TabSLAMaterial::init_options_list()
|
void TabSLAMaterial::init_options_list()
|
||||||
{
|
{
|
||||||
if (!m_options_list.empty())
|
m_options_list.clear();
|
||||||
m_options_list.clear();
|
|
||||||
|
|
||||||
for (const std::string& opt_key : m_config->keys())
|
for (const std::string& opt_key : m_config->keys())
|
||||||
{
|
{
|
||||||
|
@ -696,16 +711,7 @@ void TabSLAMaterial::init_options_list()
|
||||||
m_options_list.emplace(opt_key, m_opt_status_value);
|
m_options_list.emplace(opt_key, m_opt_status_value);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (m_config->option(opt_key)->type())
|
emplace_option(opt_key, true);
|
||||||
{
|
|
||||||
case coInts: add_correct_opts_to_options_list<ConfigOptionInts >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coBools: add_correct_opts_to_options_list<ConfigOptionBools >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coFloats: add_correct_opts_to_options_list<ConfigOptionFloats >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coStrings: add_correct_opts_to_options_list<ConfigOptionStrings >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coPercents:add_correct_opts_to_options_list<ConfigOptionPercents >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
case coPoints: add_correct_opts_to_options_list<ConfigOptionPoints >(opt_key, m_options_list, this, m_opt_status_value); break;
|
|
||||||
default: m_options_list.emplace(opt_key, m_opt_status_value); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -348,6 +348,7 @@ public:
|
||||||
virtual void update() = 0;
|
virtual void update() = 0;
|
||||||
virtual void toggle_options() = 0;
|
virtual void toggle_options() = 0;
|
||||||
virtual void init_options_list();
|
virtual void init_options_list();
|
||||||
|
void emplace_option(const std::string &opt_key, bool respect_vec_values = false);
|
||||||
void load_initial_data();
|
void load_initial_data();
|
||||||
void update_dirty();
|
void update_dirty();
|
||||||
void update_tab_ui();
|
void update_tab_ui();
|
||||||
|
@ -416,6 +417,7 @@ public:
|
||||||
void toggle_options() override;
|
void toggle_options() override;
|
||||||
void update() override;
|
void update() override;
|
||||||
void clear_pages() override;
|
void clear_pages() override;
|
||||||
|
void init_options_list() override;
|
||||||
bool supports_printer_technology(const PrinterTechnology tech) const override { return tech == ptFFF; }
|
bool supports_printer_technology(const PrinterTechnology tech) const override { return tech == ptFFF; }
|
||||||
wxSizer* create_manage_substitution_widget(wxWindow* parent);
|
wxSizer* create_manage_substitution_widget(wxWindow* parent);
|
||||||
wxSizer* create_substitutions_widget(wxWindow* parent);
|
wxSizer* create_substitutions_widget(wxWindow* parent);
|
||||||
|
|
|
@ -1205,6 +1205,14 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||||
out = double_to_string(opt->value) + (opt->percent ? "%" : "");
|
out = double_to_string(opt->value) + (opt->percent ? "%" : "");
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
case coFloatsOrPercents: {
|
||||||
|
const ConfigOptionFloatsOrPercents* opt = config.opt<ConfigOptionFloatsOrPercents>(opt_key);
|
||||||
|
if (opt) {
|
||||||
|
const auto val = opt->get_at(opt_idx);
|
||||||
|
out = double_to_string(val.value) + (val.percent ? "%" : "");
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
case coEnum: {
|
case coEnum: {
|
||||||
return get_string_from_enum(opt_key, config,
|
return get_string_from_enum(opt_key, config,
|
||||||
opt_key == "top_fill_pattern" ||
|
opt_key == "top_fill_pattern" ||
|
||||||
|
@ -1303,7 +1311,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
||||||
m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt, from_u8(new_selected_preset));
|
m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt, from_u8(new_selected_preset));
|
||||||
|
|
||||||
// Collect dirty options.
|
// Collect dirty options.
|
||||||
const bool deep_compare = (type == Preset::TYPE_PRINTER || type == Preset::TYPE_SLA_MATERIAL);
|
const bool deep_compare = type != Preset::TYPE_FILAMENT;
|
||||||
auto dirty_options = presets->current_dirty_options(deep_compare);
|
auto dirty_options = presets->current_dirty_options(deep_compare);
|
||||||
|
|
||||||
// process changes of extruders count
|
// process changes of extruders count
|
||||||
|
@ -1833,7 +1841,7 @@ void DiffPresetDialog::update_tree()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect dirty options.
|
// Collect dirty options.
|
||||||
const bool deep_compare = (type == Preset::TYPE_PRINTER || type == Preset::TYPE_SLA_MATERIAL);
|
const bool deep_compare = type != Preset::TYPE_FILAMENT;
|
||||||
auto dirty_options = type == Preset::TYPE_PRINTER && left_pt == ptFFF &&
|
auto dirty_options = type == Preset::TYPE_PRINTER && left_pt == ptFFF &&
|
||||||
left_config.opt<ConfigOptionStrings>("extruder_colour")->values.size() < right_congig.opt<ConfigOptionStrings>("extruder_colour")->values.size() ?
|
left_config.opt<ConfigOptionStrings>("extruder_colour")->values.size() < right_congig.opt<ConfigOptionStrings>("extruder_colour")->values.size() ?
|
||||||
presets->dirty_options(right_preset, left_preset, deep_compare) :
|
presets->dirty_options(right_preset, left_preset, deep_compare) :
|
||||||
|
|
Loading…
Add table
Reference in a new issue