Preset: New flag "respect_active_preset" is added to preset(name).
Return values, when preset i sactive: - edited_preset, when respect_active_preset==true - selected_preset, when respect_active_preset==false + UnsavedChangedDialog: Implementation for FR #7393 - "Switching Presets: Unsaved Changes" table + DiffDialog: Implemented possibility to compare selected and edited presets
This commit is contained in:
parent
0146e8d863
commit
8cc1a58f61
6 changed files with 159 additions and 77 deletions
|
@ -79,12 +79,13 @@ static void make_string_bold(wxString& str)
|
|||
}
|
||||
|
||||
// preset(root) node
|
||||
ModelNode::ModelNode(Preset::Type preset_type, wxWindow* parent_win, const wxString& text, const std::string& icon_name) :
|
||||
ModelNode::ModelNode(Preset::Type preset_type, wxWindow* parent_win, const wxString& text, const std::string& icon_name, const wxString& new_val_column_text) :
|
||||
m_parent_win(parent_win),
|
||||
m_parent(nullptr),
|
||||
m_preset_type(preset_type),
|
||||
m_icon_name(icon_name),
|
||||
m_text(text)
|
||||
m_text(text),
|
||||
m_new_value(new_val_column_text)
|
||||
{
|
||||
UpdateIcons();
|
||||
}
|
||||
|
@ -128,20 +129,22 @@ wxBitmap ModelNode::get_bitmap(const wxString& color)
|
|||
}
|
||||
|
||||
// option node
|
||||
ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& old_value, const wxString& new_value) :
|
||||
ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& old_value, const wxString& mod_value, const wxString& new_value) :
|
||||
m_parent_win(parent->m_parent_win),
|
||||
m_parent(parent),
|
||||
m_old_color(old_value.StartsWith("#") ? old_value : ""),
|
||||
m_mod_color(mod_value.StartsWith("#") ? mod_value : ""),
|
||||
m_new_color(new_value.StartsWith("#") ? new_value : ""),
|
||||
m_container(false),
|
||||
m_text(text),
|
||||
m_icon_name("empty"),
|
||||
m_old_value(old_value),
|
||||
m_mod_value(mod_value),
|
||||
m_new_value(new_value)
|
||||
{
|
||||
// check if old/new_value is color
|
||||
if (m_old_color.IsEmpty()) {
|
||||
if (!m_new_color.IsEmpty())
|
||||
if (!m_mod_color.IsEmpty())
|
||||
m_old_value = _L("Undef");
|
||||
}
|
||||
else {
|
||||
|
@ -149,8 +152,17 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
|
|||
m_old_value.Clear();
|
||||
}
|
||||
|
||||
if (m_new_color.IsEmpty()) {
|
||||
if (m_mod_color.IsEmpty()) {
|
||||
if (!m_old_color.IsEmpty())
|
||||
m_mod_value = _L("Undef");
|
||||
}
|
||||
else {
|
||||
m_mod_color_bmp = get_bitmap(m_mod_color);
|
||||
m_mod_value.Clear();
|
||||
}
|
||||
|
||||
if (m_new_color.IsEmpty()) {
|
||||
if (!m_old_color.IsEmpty() || !m_mod_color.IsEmpty())
|
||||
m_new_value = _L("Undef");
|
||||
}
|
||||
else {
|
||||
|
@ -160,7 +172,8 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
|
|||
|
||||
// "color" strings
|
||||
color_string(m_old_value, def_text_color());
|
||||
color_string(m_new_value, orange);
|
||||
color_string(m_mod_value, orange);
|
||||
color_string(m_new_value, def_text_color());
|
||||
|
||||
UpdateIcons();
|
||||
}
|
||||
|
@ -179,12 +192,14 @@ void ModelNode::UpdateEnabling()
|
|||
if (!m_toggle) {
|
||||
change_text_color(m_text, def_text_color(), grey);
|
||||
change_text_color(m_old_value, def_text_color(), grey);
|
||||
change_text_color(m_new_value, orange,grey);
|
||||
change_text_color(m_mod_value, orange,grey);
|
||||
change_text_color(m_new_value, def_text_color(), grey);
|
||||
}
|
||||
else {
|
||||
change_text_color(m_text, grey, def_text_color());
|
||||
change_text_color(m_old_value, grey, def_text_color());
|
||||
change_text_color(m_new_value, grey, orange);
|
||||
change_text_color(m_mod_value, grey, orange);
|
||||
change_text_color(m_new_value, grey, def_text_color());
|
||||
}
|
||||
// update icons for the colors
|
||||
UpdateIcons();
|
||||
|
@ -195,6 +210,8 @@ void ModelNode::UpdateIcons()
|
|||
// update icons for the colors, if any exists
|
||||
if (!m_old_color.IsEmpty())
|
||||
m_old_color_bmp = get_bitmap(m_old_color);
|
||||
if (!m_mod_color.IsEmpty())
|
||||
m_mod_color_bmp = get_bitmap(m_mod_color);
|
||||
if (!m_new_color.IsEmpty())
|
||||
m_new_color_bmp = get_bitmap(m_new_color);
|
||||
|
||||
|
@ -223,13 +240,14 @@ DiffModel::DiffModel(wxWindow* parent) :
|
|||
{
|
||||
}
|
||||
|
||||
wxDataViewItem DiffModel::AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt)
|
||||
wxDataViewItem DiffModel::AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt, wxString new_preset_name/* = wxString()*/)
|
||||
{
|
||||
// "color" strings
|
||||
color_string(preset_name, def_text_color());
|
||||
make_string_bold(preset_name);
|
||||
make_string_bold(new_preset_name);
|
||||
|
||||
auto preset = new ModelNode(type, m_parent_win, preset_name, get_icon_name(type, pt));
|
||||
auto preset = new ModelNode(type, m_parent_win, preset_name, get_icon_name(type, pt), new_preset_name);
|
||||
m_preset_nodes.emplace_back(preset);
|
||||
|
||||
wxDataViewItem child((void*)preset);
|
||||
|
@ -239,9 +257,9 @@ wxDataViewItem DiffModel::AddPreset(Preset::Type type, wxString preset_name, Pri
|
|||
return child;
|
||||
}
|
||||
|
||||
ModelNode* DiffModel::AddOption(ModelNode* group_node, wxString option_name, wxString old_value, wxString new_value)
|
||||
ModelNode* DiffModel::AddOption(ModelNode* group_node, wxString option_name, wxString old_value, wxString mod_value, wxString new_value)
|
||||
{
|
||||
group_node->Append(std::make_unique<ModelNode>(group_node, option_name, old_value, new_value));
|
||||
group_node->Append(std::make_unique<ModelNode>(group_node, option_name, old_value, mod_value, new_value));
|
||||
ModelNode* option = group_node->GetChildren().back().get();
|
||||
wxDataViewItem group_item = wxDataViewItem((void*)group_node);
|
||||
ItemAdded(group_item, wxDataViewItem((void*)option));
|
||||
|
@ -250,27 +268,27 @@ ModelNode* DiffModel::AddOption(ModelNode* group_node, wxString option_name, wxS
|
|||
return option;
|
||||
}
|
||||
|
||||
ModelNode* DiffModel::AddOptionWithGroup(ModelNode* category_node, wxString group_name, wxString option_name, wxString old_value, wxString new_value)
|
||||
ModelNode* DiffModel::AddOptionWithGroup(ModelNode* category_node, wxString group_name, wxString option_name, wxString old_value, wxString mod_value, wxString new_value)
|
||||
{
|
||||
category_node->Append(std::make_unique<ModelNode>(category_node, group_name));
|
||||
ModelNode* group_node = category_node->GetChildren().back().get();
|
||||
ItemAdded(wxDataViewItem((void*)category_node), wxDataViewItem((void*)group_node));
|
||||
|
||||
return AddOption(group_node, option_name, old_value, new_value);
|
||||
return AddOption(group_node, option_name, old_value, mod_value, new_value);
|
||||
}
|
||||
|
||||
ModelNode* DiffModel::AddOptionWithGroupAndCategory(ModelNode* preset_node, wxString category_name, wxString group_name,
|
||||
wxString option_name, wxString old_value, wxString new_value, const std::string category_icon_name)
|
||||
wxString option_name, wxString old_value, wxString mod_value, wxString new_value, const std::string category_icon_name)
|
||||
{
|
||||
preset_node->Append(std::make_unique<ModelNode>(preset_node, category_name, category_icon_name));
|
||||
ModelNode* category_node = preset_node->GetChildren().back().get();
|
||||
ItemAdded(wxDataViewItem((void*)preset_node), wxDataViewItem((void*)category_node));
|
||||
|
||||
return AddOptionWithGroup(category_node, group_name, option_name, old_value, new_value);
|
||||
return AddOptionWithGroup(category_node, group_name, option_name, old_value, mod_value, new_value);
|
||||
}
|
||||
|
||||
wxDataViewItem DiffModel::AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name,
|
||||
wxString old_value, wxString new_value, const std::string category_icon_name)
|
||||
wxString old_value, wxString mod_value, wxString new_value, const std::string category_icon_name)
|
||||
{
|
||||
// "color" strings
|
||||
color_string(category_name, def_text_color());
|
||||
|
@ -290,12 +308,12 @@ wxDataViewItem DiffModel::AddOption(Preset::Type type, wxString category_name, w
|
|||
{
|
||||
for (std::unique_ptr<ModelNode> &group : category->GetChildren())
|
||||
if (group->text() == group_name)
|
||||
return wxDataViewItem((void*)AddOption(group.get(), option_name, old_value, new_value));
|
||||
return wxDataViewItem((void*)AddOption(group.get(), option_name, old_value, mod_value, new_value));
|
||||
|
||||
return wxDataViewItem((void*)AddOptionWithGroup(category.get(), group_name, option_name, old_value, new_value));
|
||||
return wxDataViewItem((void*)AddOptionWithGroup(category.get(), group_name, option_name, old_value, mod_value, new_value));
|
||||
}
|
||||
|
||||
return wxDataViewItem((void*)AddOptionWithGroupAndCategory(preset.get(), category_name, group_name, option_name, old_value, new_value, category_icon_name));
|
||||
return wxDataViewItem((void*)AddOptionWithGroupAndCategory(preset.get(), category_name, group_name, option_name, old_value, mod_value, new_value, category_icon_name));
|
||||
}
|
||||
|
||||
return wxDataViewItem(nullptr);
|
||||
|
@ -364,6 +382,9 @@ void DiffModel::GetValue(wxVariant& variant, const wxDataViewItem& item, unsigne
|
|||
case colOldValue:
|
||||
variant << wxDataViewIconText(node->m_old_value, node->m_old_color_bmp);
|
||||
break;
|
||||
case colModValue:
|
||||
variant << wxDataViewIconText(node->m_mod_value, node->m_mod_color_bmp);
|
||||
break;
|
||||
case colNewValue:
|
||||
variant << wxDataViewIconText(node->m_new_value, node->m_new_color_bmp);
|
||||
break;
|
||||
|
@ -374,6 +395,9 @@ void DiffModel::GetValue(wxVariant& variant, const wxDataViewItem& item, unsigne
|
|||
case colOldValue:
|
||||
variant << DataViewBitmapText(node->m_old_value, node->m_old_color_bmp);
|
||||
break;
|
||||
case colModValue:
|
||||
variant << DataViewBitmapText(node->m_mod_value, node->m_mod_color_bmp);
|
||||
break;
|
||||
case colNewValue:
|
||||
variant << DataViewBitmapText(node->m_new_value, node->m_new_color_bmp);
|
||||
break;
|
||||
|
@ -635,16 +659,17 @@ void DiffViewCtrl::Rescale(int em /*= 0*/)
|
|||
|
||||
void DiffViewCtrl::Append( const std::string& opt_key, Preset::Type type,
|
||||
wxString category_name, wxString group_name, wxString option_name,
|
||||
wxString old_value, wxString new_value, const std::string category_icon_name)
|
||||
wxString old_value, wxString mod_value, wxString new_value, const std::string category_icon_name)
|
||||
{
|
||||
ItemData item_data = { opt_key, option_name, old_value, new_value, type };
|
||||
ItemData item_data = { opt_key, option_name, old_value, mod_value, new_value, type };
|
||||
|
||||
wxString old_val = get_short_string(item_data.old_val);
|
||||
wxString mod_val = get_short_string(item_data.mod_val);
|
||||
wxString new_val = get_short_string(item_data.new_val);
|
||||
if (old_val != item_data.old_val || new_val != item_data.new_val)
|
||||
if (old_val != item_data.old_val || mod_val != item_data.mod_val || new_val != item_data.new_val)
|
||||
item_data.is_long = true;
|
||||
|
||||
m_items_map.emplace(model->AddOption(type, category_name, group_name, option_name, old_val, new_val, category_icon_name), item_data);
|
||||
m_items_map.emplace(model->AddOption(type, category_name, group_name, option_name, old_val, mod_val, new_val, category_icon_name), item_data);
|
||||
|
||||
}
|
||||
|
||||
|
@ -694,11 +719,11 @@ void DiffViewCtrl::context_menu(wxDataViewEvent& event)
|
|||
if (it == m_items_map.end() || !it->second.is_long)
|
||||
return;
|
||||
|
||||
size_t column_cnt = this->GetColumnCount();
|
||||
const wxString old_value_header = this->GetColumn(column_cnt - 2)->GetTitle();
|
||||
const wxString new_value_header = this->GetColumn(column_cnt - 1)->GetTitle();
|
||||
FullCompareDialog(it->second.opt_name, it->second.old_val, it->second.new_val,
|
||||
old_value_header, new_value_header).ShowModal();
|
||||
const wxString old_value_header = this->GetColumn(DiffModel::colOldValue)->GetTitle();
|
||||
const wxString mod_value_header = this->GetColumn(DiffModel::colModValue)->GetTitle();
|
||||
const wxString new_value_header = has_new_value_column() ? this->GetColumn(DiffModel::colNewValue)->GetTitle() : "";
|
||||
FullCompareDialog(it->second.opt_name, it->second.old_val, it->second.mod_val, it->second.new_val,
|
||||
old_value_header, mod_value_header, new_value_header).ShowModal();
|
||||
|
||||
#ifdef __WXOSX__
|
||||
wxWindow* parent = this->GetParent();
|
||||
|
@ -819,14 +844,22 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_
|
|||
int border = 10;
|
||||
int em = em_unit();
|
||||
|
||||
bool add_new_value_column = !new_selected_preset.empty() && dependent_presets && dependent_presets->get_edited_preset().type == type &&
|
||||
new_selected_preset != dependent_presets->get_edited_preset().name;
|
||||
if (add_new_value_column && dependent_presets->get_edited_preset().type == Preset::TYPE_PRINTER &&
|
||||
dependent_presets->get_edited_preset().printer_technology() != dependent_presets->find_preset(new_selected_preset)->printer_technology())
|
||||
add_new_value_column = false;
|
||||
|
||||
m_action_line = new wxStaticText(this, wxID_ANY, "");
|
||||
m_action_line->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold());
|
||||
|
||||
m_tree = new DiffViewCtrl(this, wxSize(em * 60, em * 30));
|
||||
m_tree = new DiffViewCtrl(this, wxSize(em * (add_new_value_column ? 80 : 60), em * 30));
|
||||
m_tree->AppendToggleColumn_(L"\u2714" , DiffModel::colToggle, wxLinux ? 9 : 6);
|
||||
m_tree->AppendBmpTextColumn("" , DiffModel::colIconText, 28);
|
||||
m_tree->AppendBmpTextColumn(_L("Old Value"), DiffModel::colOldValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("New Value"), DiffModel::colNewValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("Original Value"), DiffModel::colOldValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("Modified Value"), DiffModel::colModValue, 12);
|
||||
if (add_new_value_column)
|
||||
m_tree->AppendBmpTextColumn(_L("New Value"), DiffModel::colNewValue, 12);
|
||||
|
||||
// Add Buttons
|
||||
wxFont btn_font = this->GetFont().Scaled(1.4f);
|
||||
|
@ -1222,7 +1255,7 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent
|
|||
}
|
||||
else {
|
||||
wxString action_msg;
|
||||
if (type == dependent_presets->type()) {
|
||||
if (dependent_presets && type == dependent_presets->type()) {
|
||||
action_msg = format_wxstr(_L("Preset \"%1%\" has the following unsaved changes:"), presets->get_edited_preset().name);
|
||||
}
|
||||
else {
|
||||
|
@ -1234,10 +1267,10 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent
|
|||
m_action_line->SetLabel(action_msg);
|
||||
}
|
||||
|
||||
update_tree(type, presets);
|
||||
update_tree(type, presets, new_selected_preset);
|
||||
}
|
||||
|
||||
void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* presets_)
|
||||
void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* presets_, const std::string& new_selected_preset)
|
||||
{
|
||||
// update searcher befofre update of tree
|
||||
wxGetApp().sidebar().check_and_update_searcher();
|
||||
|
@ -1262,12 +1295,13 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
|||
{
|
||||
const DynamicPrintConfig& old_config = presets->get_selected_preset().config;
|
||||
const PrinterTechnology& old_pt = presets->get_selected_preset().printer_technology();
|
||||
const DynamicPrintConfig& new_config = presets->get_edited_preset().config;
|
||||
const DynamicPrintConfig& mod_config = presets->get_edited_preset().config;
|
||||
const DynamicPrintConfig& new_config = m_tree->has_new_value_column() ? presets->find_preset(new_selected_preset, false, false)->config : mod_config;
|
||||
type = presets->type();
|
||||
|
||||
const std::map<wxString, std::string>& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map();
|
||||
|
||||
m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt);
|
||||
m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt, from_u8(new_selected_preset));
|
||||
|
||||
// Collect dirty options.
|
||||
const bool deep_compare = (type == Preset::TYPE_PRINTER || type == Preset::TYPE_SLA_MATERIAL);
|
||||
|
@ -1275,12 +1309,13 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
|||
|
||||
// process changes of extruders count
|
||||
if (type == Preset::TYPE_PRINTER && old_pt == ptFFF &&
|
||||
old_config.opt<ConfigOptionStrings>("extruder_colour")->values.size() != new_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()) {
|
||||
old_config.opt<ConfigOptionStrings>("extruder_colour")->values.size() != mod_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()) {
|
||||
wxString local_label = _L("Extruders count");
|
||||
wxString old_val = from_u8((boost::format("%1%") % old_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
|
||||
wxString new_val = from_u8((boost::format("%1%") % new_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
|
||||
wxString mod_val = from_u8((boost::format("%1%") % mod_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
|
||||
wxString new_val = !m_tree->has_new_value_column() ? "" : from_u8((boost::format("%1%") % new_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
|
||||
|
||||
m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, old_val, new_val, category_icon_map.at("General"));
|
||||
m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, old_val, mod_val, new_val, category_icon_map.at("General"));
|
||||
}
|
||||
|
||||
for (const std::string& opt_key : dirty_options) {
|
||||
|
@ -1293,7 +1328,8 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
|
|||
}
|
||||
|
||||
m_tree->Append(opt_key, type, option.category_local, option.group_local, option.label_local,
|
||||
get_string_value(opt_key, old_config), get_string_value(opt_key, new_config), category_icon_map.at(option.category));
|
||||
get_string_value(opt_key, old_config), get_string_value(opt_key, mod_config),
|
||||
m_tree->has_new_value_column() ? get_string_value(opt_key, new_config) : "", category_icon_map.at(option.category));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1331,20 +1367,21 @@ void UnsavedChangesDialog::on_sys_color_changed()
|
|||
// FullCompareDialog
|
||||
//------------------------------------------
|
||||
|
||||
FullCompareDialog::FullCompareDialog(const wxString& option_name, const wxString& old_value, const wxString& new_value,
|
||||
const wxString& old_value_header, const wxString& new_value_header)
|
||||
FullCompareDialog::FullCompareDialog(const wxString& option_name, const wxString& old_value, const wxString& mod_value, const wxString& new_value,
|
||||
const wxString& old_value_header, const wxString& mod_value_header, const wxString& new_value_header)
|
||||
: wxDialog(nullptr, wxID_ANY, option_name, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||
{
|
||||
wxGetApp().UpdateDarkUI(this);
|
||||
|
||||
int border = 10;
|
||||
bool has_new_value_column = !new_value_header.IsEmpty();
|
||||
|
||||
wxStaticBoxSizer* sizer = new wxStaticBoxSizer(wxVERTICAL, this);
|
||||
|
||||
wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, 2, 1, 0);
|
||||
wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, has_new_value_column ? 3 : 2, 1, 0);
|
||||
grid_sizer->SetFlexibleDirection(wxBOTH);
|
||||
grid_sizer->AddGrowableCol(0,1);
|
||||
grid_sizer->AddGrowableCol(1,1);
|
||||
for (size_t col = 0 ; col < grid_sizer->GetCols(); col++)
|
||||
grid_sizer->AddGrowableCol(col, 1);
|
||||
grid_sizer->AddGrowableRow(1,1);
|
||||
|
||||
auto add_header = [grid_sizer, border, this](wxString label) {
|
||||
|
@ -1354,7 +1391,9 @@ FullCompareDialog::FullCompareDialog(const wxString& option_name, const wxString
|
|||
};
|
||||
|
||||
add_header(old_value_header);
|
||||
add_header(new_value_header);
|
||||
add_header(mod_value_header);
|
||||
if (has_new_value_column)
|
||||
add_header(new_value_header);
|
||||
|
||||
auto get_set_from_val = [](wxString str) {
|
||||
if (str.Find("\n") == wxNOT_FOUND)
|
||||
|
@ -1370,11 +1409,14 @@ FullCompareDialog::FullCompareDialog(const wxString& option_name, const wxString
|
|||
};
|
||||
|
||||
std::set<wxString> old_set = get_set_from_val(old_value);
|
||||
std::set<wxString> mod_set = get_set_from_val(mod_value);
|
||||
std::set<wxString> new_set = get_set_from_val(new_value);
|
||||
std::set<wxString> old_new_diff_set;
|
||||
std::set<wxString> old_mod_diff_set;
|
||||
std::set<wxString> mod_old_diff_set;
|
||||
std::set<wxString> new_old_diff_set;
|
||||
|
||||
std::set_difference(old_set.begin(), old_set.end(), new_set.begin(), new_set.end(), std::inserter(old_new_diff_set, old_new_diff_set.begin()));
|
||||
std::set_difference(old_set.begin(), old_set.end(), mod_set.begin(), mod_set.end(), std::inserter(old_mod_diff_set, old_mod_diff_set.begin()));
|
||||
std::set_difference(mod_set.begin(), mod_set.end(), old_set.begin(), old_set.end(), std::inserter(mod_old_diff_set, mod_old_diff_set.begin()));
|
||||
std::set_difference(new_set.begin(), new_set.end(), old_set.begin(), old_set.end(), std::inserter(new_old_diff_set, new_old_diff_set.begin()));
|
||||
|
||||
auto add_value = [grid_sizer, border, this](wxString label, const std::set<wxString>& diff_set, bool is_colored = false) {
|
||||
|
@ -1391,8 +1433,10 @@ FullCompareDialog::FullCompareDialog(const wxString& option_name, const wxString
|
|||
|
||||
grid_sizer->Add(text, 1, wxALL | wxEXPAND, border);
|
||||
};
|
||||
add_value(old_value, old_new_diff_set);
|
||||
add_value(new_value, new_old_diff_set, true);
|
||||
add_value(old_value, old_mod_diff_set);
|
||||
add_value(mod_value, mod_old_diff_set, true);
|
||||
if (has_new_value_column)
|
||||
add_value(new_value, new_old_diff_set);
|
||||
|
||||
sizer->Add(grid_sizer, 1, wxEXPAND);
|
||||
|
||||
|
@ -1466,10 +1510,11 @@ DiffPresetDialog::DiffPresetDialog(MainFrame* mainframe)
|
|||
auto add_preset_combobox = [collection, sizer, new_type, em, this](PresetComboBox** cb_, PresetBundle* preset_bundle) {
|
||||
*cb_ = new PresetComboBox(this, new_type, wxSize(em * 35, -1), preset_bundle);
|
||||
PresetComboBox* cb = (*cb_);
|
||||
cb->show_modif_preset_separately();
|
||||
cb->set_selection_changed_function([this, new_type, preset_bundle, cb](int selection) {
|
||||
if (m_view_type == Preset::TYPE_INVALID) {
|
||||
std::string preset_name = cb->GetString(selection).ToUTF8().data();
|
||||
update_compatibility(Preset::remove_suffix_modified(preset_name), new_type, preset_bundle);
|
||||
update_compatibility(preset_name, new_type, preset_bundle);
|
||||
}
|
||||
update_tree();
|
||||
});
|
||||
|
@ -1491,7 +1536,7 @@ DiffPresetDialog::DiffPresetDialog(MainFrame* mainframe)
|
|||
std::string preset_name = get_selection(presets_left);
|
||||
presets_right->update(preset_name);
|
||||
if (m_view_type == Preset::TYPE_INVALID)
|
||||
update_compatibility(Preset::remove_suffix_modified(preset_name), presets_right->get_type(), m_preset_bundle_right.get());
|
||||
update_compatibility(preset_name, presets_right->get_type(), m_preset_bundle_right.get());
|
||||
update_tree();
|
||||
});
|
||||
}
|
||||
|
@ -1512,7 +1557,7 @@ DiffPresetDialog::DiffPresetDialog(MainFrame* mainframe)
|
|||
m_tree = new DiffViewCtrl(this, wxSize(em * 65, em * 40));
|
||||
m_tree->AppendBmpTextColumn("", DiffModel::colIconText, 35);
|
||||
m_tree->AppendBmpTextColumn(_L("Left Preset Value"), DiffModel::colOldValue, 15);
|
||||
m_tree->AppendBmpTextColumn(_L("Right Preset Value"),DiffModel::colNewValue, 15);
|
||||
m_tree->AppendBmpTextColumn(_L("Right Preset Value"),DiffModel::colModValue, 15);
|
||||
m_tree->Hide();
|
||||
|
||||
wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
@ -1618,8 +1663,14 @@ void DiffPresetDialog::update_tree()
|
|||
Preset::Type type = preset_combos.presets_left->get_type();
|
||||
|
||||
const PresetCollection* presets = get_preset_collection(type);
|
||||
const Preset* left_preset = presets->find_preset(get_selection(preset_combos.presets_left));
|
||||
const Preset* right_preset = presets->find_preset(get_selection(preset_combos.presets_right));
|
||||
|
||||
std::string preset_name_full = get_selection(preset_combos.presets_left);
|
||||
std::string preset_name = Preset::remove_suffix_modified(preset_name_full);
|
||||
const Preset* left_preset = presets->find_preset(preset_name, false, preset_name_full.length() != preset_name.length());
|
||||
preset_name_full = get_selection(preset_combos.presets_right);
|
||||
preset_name = Preset::remove_suffix_modified(preset_name_full);
|
||||
const Preset* right_preset = presets->find_preset(preset_name, false, preset_name_full.length() != preset_name.length());
|
||||
|
||||
if (!left_preset || !right_preset) {
|
||||
bottom_info = _L("One of the presets doesn't found");
|
||||
preset_combos.equal_bmp->SetBitmap_(ScalableBitmap(this, "question"));
|
||||
|
@ -1668,7 +1719,7 @@ void DiffPresetDialog::update_tree()
|
|||
wxString left_val = from_u8((boost::format("%1%") % left_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
|
||||
wxString right_val = from_u8((boost::format("%1%") % right_congig.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
|
||||
|
||||
m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, left_val, right_val, category_icon_map.at("General"));
|
||||
m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, left_val, right_val, "", category_icon_map.at("General"));
|
||||
}
|
||||
|
||||
for (const std::string& opt_key : dirty_options) {
|
||||
|
@ -1678,14 +1729,14 @@ void DiffPresetDialog::update_tree()
|
|||
Search::Option option = searcher.get_option(opt_key, get_full_label(opt_key, left_config), type);
|
||||
if (option.opt_key() != opt_key) {
|
||||
// temporary solution, just for testing
|
||||
m_tree->Append(opt_key, type, _L("Undef category"), _L("Undef group"), opt_key, left_val, right_val, "question");
|
||||
m_tree->Append(opt_key, type, _L("Undef category"), _L("Undef group"), opt_key, left_val, right_val, "", "question");
|
||||
// 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;
|
||||
}
|
||||
m_tree->Append(opt_key, type, option.category_local, option.group_local, option.label_local,
|
||||
left_val, right_val, category_icon_map.at(option.category));
|
||||
left_val, right_val, "", category_icon_map.at(option.category));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue