Added SettingsDigest
This commit is contained in:
parent
af6a312fea
commit
f471362e86
5 changed files with 78 additions and 14 deletions
|
@ -182,6 +182,8 @@ bool select_language(wxArrayString & names, wxArrayLong & identifiers);
|
||||||
// update right panel of the Plater according to view mode
|
// update right panel of the Plater according to view mode
|
||||||
void update_mode();
|
void update_mode();
|
||||||
|
|
||||||
|
void show_info_sizer(bool show);
|
||||||
|
|
||||||
std::vector<Tab *>& get_tabs_list();
|
std::vector<Tab *>& get_tabs_list();
|
||||||
bool checked_tab(Tab* tab);
|
bool checked_tab(Tab* tab);
|
||||||
void delete_tab_from_list(Tab* tab);
|
void delete_tab_from_list(Tab* tab);
|
||||||
|
|
|
@ -69,8 +69,6 @@ bool m_part_settings_changed = false;
|
||||||
wxString g_selected_extruder = "";
|
wxString g_selected_extruder = "";
|
||||||
#endif //__WXOSX__
|
#endif //__WXOSX__
|
||||||
|
|
||||||
// typedef std::map<std::string, std::string> t_category_icon;
|
|
||||||
typedef std::map<std::string, wxBitmap> t_category_icon;
|
|
||||||
inline t_category_icon& get_category_icon() {
|
inline t_category_icon& get_category_icon() {
|
||||||
static t_category_icon CATEGORY_ICON;
|
static t_category_icon CATEGORY_ICON;
|
||||||
if (CATEGORY_ICON.empty()){
|
if (CATEGORY_ICON.empty()){
|
||||||
|
@ -896,6 +894,7 @@ void update_settings_list()
|
||||||
std::map<std::string, std::vector<std::string>> cat_options;
|
std::map<std::string, std::vector<std::string>> cat_options;
|
||||||
auto opt_keys = (*m_config)->keys();
|
auto opt_keys = (*m_config)->keys();
|
||||||
m_og_settings.resize(0);
|
m_og_settings.resize(0);
|
||||||
|
std::vector<std::string> categories;
|
||||||
if (!(opt_keys.size() == 1 && opt_keys[0] == "extruder"))// return;
|
if (!(opt_keys.size() == 1 && opt_keys[0] == "extruder"))// return;
|
||||||
{
|
{
|
||||||
auto extruders_cnt = get_preset_bundle()->printers.get_selected_preset().printer_technology() == ptSLA ? 1 :
|
auto extruders_cnt = get_preset_bundle()->printers.get_selected_preset().printer_technology() == ptSLA ? 1 :
|
||||||
|
@ -933,6 +932,8 @@ void update_settings_list()
|
||||||
optgroup->reload_config();
|
optgroup->reload_config();
|
||||||
m_option_sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 0);
|
m_option_sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 0);
|
||||||
m_og_settings.push_back(optgroup);
|
m_og_settings.push_back(optgroup);
|
||||||
|
|
||||||
|
categories.push_back(cat.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,11 +941,15 @@ void update_settings_list()
|
||||||
m_objects_ctrl->Select(m_objects_model->Delete(item));
|
m_objects_ctrl->Select(m_objects_model->Delete(item));
|
||||||
part_selection_changed();
|
part_selection_changed();
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
if (!categories.empty())
|
||||||
|
m_objects_model->UpdateSettingsDigest(item, categories);
|
||||||
show_manipulations = false;
|
show_manipulations = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
show_manipulation_og(show_manipulations);
|
show_manipulation_og(show_manipulations);
|
||||||
|
show_info_sizer(show_manipulations);
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
no_updates.reset(nullptr);
|
no_updates.reset(nullptr);
|
||||||
|
@ -1032,11 +1037,11 @@ wxMenuItem* menu_item_split(wxMenu* menu, int id) {
|
||||||
return menu_item;
|
return menu_item;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* menu_item_settings(wxMenu* menu, int id) {
|
wxMenuItem* menu_item_settings(wxMenu* menu, int id, const bool is_part) {
|
||||||
auto menu_item = new wxMenuItem(menu, id, _(L("Add settings")));
|
auto menu_item = new wxMenuItem(menu, id, _(L("Add settings")));
|
||||||
menu_item->SetBitmap(m_bmp_cog);
|
menu_item->SetBitmap(m_bmp_cog);
|
||||||
|
|
||||||
auto sub_menu = create_add_settings_popupmenu(false);
|
auto sub_menu = create_add_settings_popupmenu(is_part);
|
||||||
menu_item->SetSubMenu(sub_menu);
|
menu_item->SetSubMenu(sub_menu);
|
||||||
return menu_item;
|
return menu_item;
|
||||||
}
|
}
|
||||||
|
@ -1063,7 +1068,7 @@ wxMenu *create_add_part_popupmenu()
|
||||||
|
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
// Append settings popupmenu
|
// Append settings popupmenu
|
||||||
menu->Append(menu_item_settings(menu, config_id_base + i + 1));
|
menu->Append(menu_item_settings(menu, config_id_base + i + 1, false));
|
||||||
|
|
||||||
wxWindow* win = get_tab_panel()->GetPage(0);
|
wxWindow* win = get_tab_panel()->GetPage(0);
|
||||||
|
|
||||||
|
@ -1099,7 +1104,7 @@ wxMenu *create_part_settings_popupmenu()
|
||||||
|
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
// Append settings popupmenu
|
// Append settings popupmenu
|
||||||
menu->Append(menu_item_settings(menu, config_id_base + 1));
|
menu->Append(menu_item_settings(menu, config_id_base + 1, true));
|
||||||
|
|
||||||
menu->Bind(wxEVT_MENU, [config_id_base, menu](wxEvent &event){
|
menu->Bind(wxEVT_MENU, [config_id_base, menu](wxEvent &event){
|
||||||
switch (event.GetId() - config_id_base) {
|
switch (event.GetId() - config_id_base) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ class wxMenu;
|
||||||
class wxDataViewEvent;
|
class wxDataViewEvent;
|
||||||
class wxKeyEvent;
|
class wxKeyEvent;
|
||||||
class wxGLCanvas;
|
class wxGLCanvas;
|
||||||
|
class wxBitmap;
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
class ModelObject;
|
class ModelObject;
|
||||||
|
@ -45,6 +46,9 @@ struct OBJECT_PARAMETERS
|
||||||
double slab_z = 0.0;
|
double slab_z = 0.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef std::map<std::string, wxBitmap> t_category_icon;
|
||||||
|
inline t_category_icon& get_category_icon();
|
||||||
|
|
||||||
void add_collapsible_panes(wxWindow* parent, wxBoxSizer* sizer);
|
void add_collapsible_panes(wxWindow* parent, wxBoxSizer* sizer);
|
||||||
void add_objects_list(wxWindow* parent, wxBoxSizer* sizer);
|
void add_objects_list(wxWindow* parent, wxBoxSizer* sizer);
|
||||||
void add_object_settings(wxWindow* parent, wxBoxSizer* sizer);
|
void add_object_settings(wxWindow* parent, wxBoxSizer* sizer);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "GUI.hpp"
|
#include "GUI.hpp"
|
||||||
#include "../../libslic3r/Utils.hpp"
|
#include "../../libslic3r/Utils.hpp"
|
||||||
|
#include "BitmapCache.hpp"
|
||||||
|
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/statline.h>
|
#include <wx/statline.h>
|
||||||
|
@ -361,11 +362,52 @@ void PrusaObjectDataViewModelNode::set_settings_list_icon(const wxIcon& icon) {
|
||||||
m_icon = icon;
|
m_icon = icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Slic3r::GUI::BitmapCache *m_bitmap_cache = nullptr;
|
||||||
|
bool PrusaObjectDataViewModelNode::update_settings_digest(const std::vector<std::string>& categories)
|
||||||
|
{
|
||||||
|
if (m_type != "settings" || m_opt_categories == categories)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_opt_categories = categories;
|
||||||
|
m_name = wxEmptyString;
|
||||||
|
m_icon = m_empty_icon;
|
||||||
|
|
||||||
|
auto categories_icon = Slic3r::GUI::get_category_icon();
|
||||||
|
|
||||||
|
for (auto& cat : m_opt_categories)
|
||||||
|
m_name += cat + "; ";
|
||||||
|
|
||||||
|
wxBitmap *bmp = m_bitmap_cache->find(m_name.ToStdString());
|
||||||
|
if (bmp == nullptr) {
|
||||||
|
std::vector<wxBitmap> bmps;
|
||||||
|
for (auto& cat : m_opt_categories)
|
||||||
|
bmps.emplace_back(categories_icon.find(cat) == categories_icon.end() ?
|
||||||
|
wxNullBitmap : categories_icon.at(cat));
|
||||||
|
bmp = m_bitmap_cache->insert(m_name.ToStdString(), bmps);
|
||||||
|
}
|
||||||
|
m_icon.CopyFromBitmap(*bmp);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// *****************************************************************************
|
// *****************************************************************************
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// PrusaObjectDataViewModel
|
// PrusaObjectDataViewModel
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
PrusaObjectDataViewModel::PrusaObjectDataViewModel()
|
||||||
|
{
|
||||||
|
m_bitmap_cache = new Slic3r::GUI::BitmapCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrusaObjectDataViewModel::~PrusaObjectDataViewModel()
|
||||||
|
{
|
||||||
|
for (auto object : m_objects)
|
||||||
|
delete object;
|
||||||
|
delete m_bitmap_cache;
|
||||||
|
m_bitmap_cache = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
wxDataViewItem PrusaObjectDataViewModel::Add(const wxString &name)
|
wxDataViewItem PrusaObjectDataViewModel::Add(const wxString &name)
|
||||||
{
|
{
|
||||||
auto root = new PrusaObjectDataViewModelNode(name);
|
auto root = new PrusaObjectDataViewModelNode(name);
|
||||||
|
@ -792,6 +834,18 @@ bool PrusaObjectDataViewModel::IsSettingsItem(const wxDataViewItem &item) const
|
||||||
return node->m_type == "settings";
|
return node->m_type == "settings";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PrusaObjectDataViewModel::UpdateSettingsDigest(const wxDataViewItem &item,
|
||||||
|
const std::vector<std::string>& categories)
|
||||||
|
{
|
||||||
|
if (!item.IsOk()) return;
|
||||||
|
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||||
|
if (!node->update_settings_digest(categories))
|
||||||
|
return;
|
||||||
|
ItemChanged(item);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// PrusaDoubleSlider
|
// PrusaDoubleSlider
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
|
@ -156,6 +156,7 @@ class PrusaObjectDataViewModelNode
|
||||||
PrusaObjectDataViewModelNode* m_parent;
|
PrusaObjectDataViewModelNode* m_parent;
|
||||||
MyObjectTreeModelNodePtrArray m_children;
|
MyObjectTreeModelNodePtrArray m_children;
|
||||||
wxIcon m_empty_icon;
|
wxIcon m_empty_icon;
|
||||||
|
std::vector< std::string > m_opt_categories;
|
||||||
public:
|
public:
|
||||||
PrusaObjectDataViewModelNode(const wxString &name, const int instances_count=1) {
|
PrusaObjectDataViewModelNode(const wxString &name, const int instances_count=1) {
|
||||||
m_parent = NULL;
|
m_parent = NULL;
|
||||||
|
@ -340,6 +341,7 @@ public:
|
||||||
void set_object_action_icon();
|
void set_object_action_icon();
|
||||||
void set_part_action_icon();
|
void set_part_action_icon();
|
||||||
void set_settings_list_icon(const wxIcon& icon);
|
void set_settings_list_icon(const wxIcon& icon);
|
||||||
|
bool update_settings_digest(const std::vector<std::string>& categories);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -350,12 +352,8 @@ class PrusaObjectDataViewModel :public wxDataViewModel
|
||||||
{
|
{
|
||||||
std::vector<PrusaObjectDataViewModelNode*> m_objects;
|
std::vector<PrusaObjectDataViewModelNode*> m_objects;
|
||||||
public:
|
public:
|
||||||
PrusaObjectDataViewModel(){}
|
PrusaObjectDataViewModel();
|
||||||
~PrusaObjectDataViewModel()
|
~PrusaObjectDataViewModel();
|
||||||
{
|
|
||||||
for (auto object : m_objects)
|
|
||||||
delete object;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxDataViewItem Add(const wxString &name);
|
wxDataViewItem Add(const wxString &name);
|
||||||
wxDataViewItem Add(const wxString &name, const int instances_count);
|
wxDataViewItem Add(const wxString &name, const int instances_count);
|
||||||
|
@ -411,6 +409,7 @@ public:
|
||||||
|
|
||||||
wxDataViewItem HasSettings(const wxDataViewItem &item) const;
|
wxDataViewItem HasSettings(const wxDataViewItem &item) const;
|
||||||
bool IsSettingsItem(const wxDataViewItem &item) const;
|
bool IsSettingsItem(const wxDataViewItem &item) const;
|
||||||
|
void UpdateSettingsDigest(const wxDataViewItem &item, const std::vector<std::string>& categories);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue