UnsavedChangesDialog : added correct icons for the categories

+ fixed a crash when try to save changes for the SLA printer preset
This commit is contained in:
YuSanka 2020-10-07 20:13:12 +02:00
parent e40593f2ef
commit bcc23428fa
7 changed files with 65 additions and 19 deletions

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<circle fill="#808080" cx="8" cy="8" r="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 400 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<circle fill="#808080" cx="8" cy="8" r="0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 400 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<circle fill="#FFFFFF" cx="8" cy="8" r="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 400 B

View File

@ -402,6 +402,11 @@ Slic3r::GUI::PageShp Tab::add_options_page(const wxString& title, const std::str
icon_idx = ++m_icon_count; icon_idx = ++m_icon_count;
m_icon_index[icon] = icon_idx; m_icon_index[icon] = icon_idx;
} }
if (m_category_icon.find(title) == m_category_icon.end()) {
// Add new category to the category_to_icon list.
m_category_icon[title] = icon;
}
} }
// Initialize the page. // Initialize the page.
#ifdef __WXOSX__ #ifdef __WXOSX__

View File

@ -198,6 +198,7 @@ protected:
int m_icon_count; int m_icon_count;
std::map<std::string, size_t> m_icon_index; // Map from an icon file name to its index std::map<std::string, size_t> m_icon_index; // Map from an icon file name to its index
std::map<wxString, std::string> m_category_icon; // Map from a category name to an icon file name
std::vector<PageShp> m_pages; std::vector<PageShp> m_pages;
Page* m_active_page {nullptr}; Page* m_active_page {nullptr};
bool m_disable_tree_sel_changed_event {false}; bool m_disable_tree_sel_changed_event {false};
@ -349,6 +350,8 @@ public:
void cache_config_diff(const std::vector<std::string>& selected_options); void cache_config_diff(const std::vector<std::string>& selected_options);
void apply_config_from_cache(); void apply_config_from_cache();
const std::map<wxString, std::string>& get_category_icon_map() { return m_category_icon; }
protected: protected:
void create_line_with_widget(ConfigOptionsGroup* optgroup, const std::string& opt_key, widget_t widget); void create_line_with_widget(ConfigOptionsGroup* optgroup, const std::string& opt_key, widget_t widget);
wxSizer* compatible_widget_create(wxWindow* parent, PresetDependencies &deps); wxSizer* compatible_widget_create(wxWindow* parent, PresetDependencies &deps);

View File

@ -38,6 +38,10 @@ static const std::map<Preset::Type, std::string> type_icon_names = {
{Preset::TYPE_PRINTER, "printer" }, {Preset::TYPE_PRINTER, "printer" },
}; };
static std::string get_icon_name(Preset::Type type, PrinterTechnology pt) {
return pt == ptSLA && type == Preset::TYPE_PRINTER ? "sla_printer" : type_icon_names.at(type);
}
static std::string black = "#000000"; static std::string black = "#000000";
static std::string grey = "#808080"; static std::string grey = "#808080";
static std::string orange = "#ed6b21"; static std::string orange = "#ed6b21";
@ -57,17 +61,17 @@ static void make_string_bold(wxString& str)
} }
// preset(root) node // preset(root) node
ModelNode::ModelNode(Preset::Type preset_type, const wxString& text, wxWindow* parent_win) : ModelNode::ModelNode(Preset::Type preset_type, wxWindow* parent_win, const wxString& text, const std::string& icon_name) :
m_parent_win(parent_win), m_parent_win(parent_win),
m_parent(nullptr), m_parent(nullptr),
m_preset_type(preset_type), m_preset_type(preset_type),
m_icon_name(type_icon_names.at(preset_type)), m_icon_name(icon_name),
m_text(text) m_text(text)
{ {
UpdateIcons(); UpdateIcons();
} }
// group node // category node
ModelNode::ModelNode(ModelNode* parent, const wxString& text, const std::string& icon_name) : ModelNode::ModelNode(ModelNode* parent, const wxString& text, const std::string& icon_name) :
m_parent_win(parent->m_parent_win), m_parent_win(parent->m_parent_win),
m_parent(parent), m_parent(parent),
@ -77,12 +81,14 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const std::string&
UpdateIcons(); UpdateIcons();
} }
// category node // group node
ModelNode::ModelNode(ModelNode* parent, const wxString& text) : ModelNode::ModelNode(ModelNode* parent, const wxString& text) :
m_parent_win(parent->m_parent_win), m_parent_win(parent->m_parent_win),
m_parent(parent), m_parent(parent),
m_text(text) m_text(text),
m_icon_name("dot_small")
{ {
UpdateIcons();
} }
#ifdef __linux__ #ifdef __linux__
@ -119,6 +125,7 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
m_new_color(new_value.StartsWith("#") ? new_value : ""), m_new_color(new_value.StartsWith("#") ? new_value : ""),
m_container(false), m_container(false),
m_text(text), m_text(text),
m_icon_name("empty"),
m_old_value(old_value), m_old_value(old_value),
m_new_value(new_value) m_new_value(new_value)
{ {
@ -144,6 +151,8 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
// "color" strings // "color" strings
color_string(m_old_value, black); color_string(m_old_value, black);
color_string(m_new_value, orange); color_string(m_new_value, orange);
UpdateIcons();
} }
void ModelNode::UpdateEnabling() void ModelNode::UpdateEnabling()
@ -206,13 +215,13 @@ UnsavedChangesModel::~UnsavedChangesModel()
delete preset_node; delete preset_node;
} }
wxDataViewItem UnsavedChangesModel::AddPreset(Preset::Type type, wxString preset_name) wxDataViewItem UnsavedChangesModel::AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt)
{ {
// "color" strings // "color" strings
color_string(preset_name, black); color_string(preset_name, black);
make_string_bold(preset_name); make_string_bold(preset_name);
auto preset = new ModelNode(type, preset_name, m_parent_win); auto preset = new ModelNode(type, m_parent_win, preset_name, get_icon_name(type, pt));
m_preset_nodes.emplace_back(preset); m_preset_nodes.emplace_back(preset);
wxDataViewItem child((void*)preset); wxDataViewItem child((void*)preset);
@ -242,9 +251,10 @@ ModelNode* UnsavedChangesModel::AddOptionWithGroup(ModelNode* category_node, wxS
return AddOption(group_node, option_name, old_value, new_value); return AddOption(group_node, option_name, old_value, new_value);
} }
ModelNode* UnsavedChangesModel::AddOptionWithGroupAndCategory(ModelNode* preset_node, wxString category_name, wxString group_name, wxString option_name, wxString old_value, wxString new_value) ModelNode* UnsavedChangesModel::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)
{ {
ModelNode* category_node = new ModelNode(preset_node, category_name, "cog"); ModelNode* category_node = new ModelNode(preset_node, category_name, category_icon_name);
preset_node->Append(category_node); preset_node->Append(category_node);
ItemAdded(wxDataViewItem((void*)preset_node), wxDataViewItem((void*)category_node)); ItemAdded(wxDataViewItem((void*)preset_node), wxDataViewItem((void*)category_node));
@ -252,7 +262,7 @@ ModelNode* UnsavedChangesModel::AddOptionWithGroupAndCategory(ModelNode* preset_
} }
wxDataViewItem UnsavedChangesModel::AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name, wxDataViewItem UnsavedChangesModel::AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name,
wxString old_value, wxString new_value) wxString old_value, wxString new_value, const std::string category_icon_name)
{ {
// "color" strings // "color" strings
color_string(category_name, black); color_string(category_name, black);
@ -277,7 +287,7 @@ wxDataViewItem UnsavedChangesModel::AddOption(Preset::Type type, wxString catego
return wxDataViewItem((void*)AddOptionWithGroup(category, group_name, option_name, old_value, new_value)); return wxDataViewItem((void*)AddOptionWithGroup(category, group_name, option_name, old_value, new_value));
} }
return wxDataViewItem((void*)AddOptionWithGroupAndCategory(preset, category_name, group_name, option_name, old_value, new_value)); return wxDataViewItem((void*)AddOptionWithGroupAndCategory(preset, category_name, group_name, option_name, old_value, new_value, category_icon_name));
} }
return wxDataViewItem(nullptr); return wxDataViewItem(nullptr);
@ -972,10 +982,13 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
for (PresetCollection* presets : presets_list) for (PresetCollection* presets : presets_list)
{ {
const DynamicPrintConfig& old_config = presets->get_selected_preset().config; 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& new_config = presets->get_edited_preset().config;
type = presets->type(); type = presets->type();
m_tree_model->AddPreset(type, from_u8(presets->get_edited_preset().name)); 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);
// 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_PRINTER || type == Preset::TYPE_SLA_MATERIAL);
@ -983,14 +996,14 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
auto dirty_options_ = presets->current_dirty_options(); auto dirty_options_ = presets->current_dirty_options();
// process changes of extruders count // process changes of extruders count
if (type == Preset::TYPE_PRINTER && 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() != new_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()) {
wxString local_label = _L("Extruders count"); wxString local_label = _L("Extruders count");
wxString old_val = from_u8((boost::format("%1%") % old_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str()); 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 new_val = from_u8((boost::format("%1%") % new_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
ItemData item_data = { "extruders_count", local_label, old_val, new_val, type }; ItemData item_data = { "extruders_count", local_label, old_val, new_val, type };
m_items_map.emplace(m_tree_model->AddOption(type, _L("General"), _L("Capabilities"), local_label, old_val, new_val), item_data); m_items_map.emplace(m_tree_model->AddOption(type, _L("General"), _L("Capabilities"), local_label, old_val, new_val, category_icon_map.at("General")), item_data);
} }
@ -1004,7 +1017,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
if (old_val != item_data.old_val || new_val != item_data.new_val) if (old_val != item_data.old_val || new_val != item_data.new_val)
item_data.is_long = true; item_data.is_long = true;
m_items_map.emplace(m_tree_model->AddOption(type, option.category_local, option.group_local, option.label_local, old_val, new_val), item_data); m_items_map.emplace(m_tree_model->AddOption(type, option.category_local, option.group_local, option.label_local, old_val, new_val, category_icon_map.at(option.category)), item_data);
} }
} }
} }

View File

@ -76,7 +76,7 @@ public:
wxString m_new_value; wxString m_new_value;
// preset(root) node // preset(root) node
ModelNode(Preset::Type preset_type, const wxString& text, wxWindow* parent_win); ModelNode(Preset::Type preset_type, wxWindow* parent_win, const wxString& text, const std::string& icon_name);
// category node // category node
ModelNode(ModelNode* parent, const wxString& text, const std::string& icon_name); ModelNode(ModelNode* parent, const wxString& text, const std::string& icon_name);
@ -141,7 +141,8 @@ class UnsavedChangesModel : public wxDataViewModel
wxString group_name, wxString group_name,
wxString option_name, wxString option_name,
wxString old_value, wxString old_value,
wxString new_value); wxString new_value,
const std::string category_icon_name);
public: public:
enum { enum {
@ -157,9 +158,9 @@ public:
void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; } void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; }
wxDataViewItem AddPreset(Preset::Type type, wxString preset_name); wxDataViewItem AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt);
wxDataViewItem AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name, wxDataViewItem AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name,
wxString old_value, wxString new_value); wxString old_value, wxString new_value, const std::string category_icon_name);
void UpdateItemEnabling(wxDataViewItem item); void UpdateItemEnabling(wxDataViewItem item);
bool IsEnabledItem(const wxDataViewItem& item); bool IsEnabledItem(const wxDataViewItem& item);