Fixed bug with no-slicing of some parts of the object

+ Removed text drawing for equal values in DoubleSlider
+ Added functions for adding of the settings item for objects
This commit is contained in:
YuSanka 2018-09-03 09:58:35 +02:00
parent 3075364da1
commit 78cedb34d4
4 changed files with 90 additions and 22 deletions

View File

@ -2061,6 +2061,7 @@ sub on_extruders_change {
$choices->[-1]->Destroy; $choices->[-1]->Destroy;
pop @$choices; pop @$choices;
} }
$self->{right_panel}->Layout;
$self->Layout; $self->Layout;
} }

View File

@ -870,8 +870,11 @@ void update_settings_list()
{ {
auto opt_key = (line.get_options())[0].opt_id; //we assume that we have one option per line auto opt_key = (line.get_options())[0].opt_id; //we assume that we have one option per line
auto btn = new wxBitmapButton(parent, wxID_ANY, wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("erase.png")), wxBITMAP_TYPE_PNG), auto btn = new wxBitmapButton(parent, wxID_ANY, wxBitmap(from_u8(var("colorchange_delete_on.png")), wxBITMAP_TYPE_PNG),
wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
#ifdef __WXMSW__
btn->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
#endif // __WXMSW__
btn->Bind(wxEVT_BUTTON, [opt_key](wxEvent &event){ btn->Bind(wxEVT_BUTTON, [opt_key](wxEvent &event){
(*m_config)->erase(opt_key); (*m_config)->erase(opt_key);
wxTheApp->CallAfter([]() { update_settings_list(); }); wxTheApp->CallAfter([]() { update_settings_list(); });
@ -928,8 +931,8 @@ void update_settings_list()
no_updates.reset(nullptr); no_updates.reset(nullptr);
#endif #endif
/*get_right_panel()*/parent->Layout(); parent->Layout();
get_right_panel()->GetParent()->GetParent()->Layout(); get_right_panel()->GetParent()->Layout();
} }
void get_settings_choice(wxMenu *menu, int id, bool is_part) void get_settings_choice(wxMenu *menu, int id, bool is_part)
@ -982,6 +985,16 @@ void get_settings_choice(wxMenu *menu, int id, bool is_part)
(*m_config)->set_key_value(opt_key, m_default_config.get()->option(opt_key)->clone()); (*m_config)->set_key_value(opt_key, m_default_config.get()->option(opt_key)->clone());
} }
// *** EXPERIMINT ***
// const auto item = m_objects_ctrl->GetSelection();
// if (item)
// {
// if (!m_objects_model->HasSettings(item))
// m_objects_model->AddSettingsChild(item);
// }
// ********************
update_settings_list(); update_settings_list();
} }
@ -1108,17 +1121,13 @@ wxMenu *create_add_settings_popupmenu(bool is_part)
void show_context_menu() void show_context_menu()
{ {
auto item = m_objects_ctrl->GetSelection(); const auto item = m_objects_ctrl->GetSelection();
if (item) if (item)
{ {
if (m_objects_model->GetParent(item) == wxDataViewItem(0)) { const auto menu = m_objects_model->GetParent(item) == wxDataViewItem(0) ?
auto menu = create_add_part_popupmenu(); create_add_part_popupmenu() :
get_tab_panel()->GetPage(0)->PopupMenu(menu); create_part_settings_popupmenu();
} get_tab_panel()->GetPage(0)->PopupMenu(menu);
else {
auto menu = create_part_settings_popupmenu();
get_tab_panel()->GetPage(0)->PopupMenu(menu);
}
} }
} }
@ -1319,6 +1328,9 @@ void on_btn_split(const bool split_part)
false); false);
m_objects_ctrl->Expand(item); m_objects_ctrl->Expand(item);
} }
m_parts_changed = true;
parts_changed(m_selected_object_id);
} }
void on_btn_move_up(){ void on_btn_move_up(){
@ -1659,6 +1671,9 @@ void on_drop(wxDataViewEvent &event)
for (int id = from_volume_id; cnt < abs(from_volume_id - to_volume_id); id+=delta, cnt++) for (int id = from_volume_id; cnt < abs(from_volume_id - to_volume_id); id+=delta, cnt++)
std::swap(volumes[id], volumes[id +delta]); std::swap(volumes[id], volumes[id +delta]);
m_parts_changed = true;
parts_changed(m_selected_object_id);
g_prevent_list_events = false; g_prevent_list_events = false;
} }

View File

@ -357,6 +357,10 @@ void PrusaObjectDataViewModelNode::set_part_action_icon() {
m_action_icon = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("cog.png")), wxBITMAP_TYPE_PNG); m_action_icon = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("cog.png")), wxBITMAP_TYPE_PNG);
} }
void PrusaObjectDataViewModelNode::set_settings_list_icon(const wxIcon& icon) {
m_icon = icon;
}
// ***************************************************************************** // *****************************************************************************
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// PrusaObjectDataViewModel // PrusaObjectDataViewModel
@ -414,6 +418,19 @@ wxDataViewItem PrusaObjectDataViewModel::AddChild( const wxDataViewItem &parent_
return child; return child;
} }
wxDataViewItem PrusaObjectDataViewModel::AddSettingsChild(const wxDataViewItem &parent_item)
{
PrusaObjectDataViewModelNode *root = (PrusaObjectDataViewModelNode*)parent_item.GetID();
if (!root) return wxDataViewItem(0);
const auto node = new PrusaObjectDataViewModelNode(root);
root->Insert(node, 0);
// notify control
const wxDataViewItem child((void*)node);
ItemAdded(parent_item, child);
return child;
}
wxDataViewItem PrusaObjectDataViewModel::Delete(const wxDataViewItem &item) wxDataViewItem PrusaObjectDataViewModel::Delete(const wxDataViewItem &item)
{ {
auto ret_item = wxDataViewItem(0); auto ret_item = wxDataViewItem(0);
@ -683,10 +700,14 @@ wxDataViewItem PrusaObjectDataViewModel::ReorganizeChildren(int current_volume_i
return wxDataViewItem(node_parent->GetNthChild(new_volume_id)); return wxDataViewItem(node_parent->GetNthChild(new_volume_id));
} }
// bool MyObjectTreeModel::IsEnabled(const wxDataViewItem &item, unsigned int col) const bool PrusaObjectDataViewModel::IsEnabled(const wxDataViewItem &item, unsigned int col) const
// { {
// wxASSERT(item.IsOk());
// } PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
// disable extruder selection for the "Settings" item
return !(col == 2 && node->m_extruder.IsEmpty());
}
wxDataViewItem PrusaObjectDataViewModel::GetParent(const wxDataViewItem &item) const wxDataViewItem PrusaObjectDataViewModel::GetParent(const wxDataViewItem &item) const
{ {
@ -738,6 +759,21 @@ unsigned int PrusaObjectDataViewModel::GetChildren(const wxDataViewItem &parent,
return count; return count;
} }
bool PrusaObjectDataViewModel::HasSettings(const wxDataViewItem &item) const
{
if (!item.IsOk())
return false;
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
if (node->GetChildCount() == 0)
return false;
auto& children = node->GetChildren();
if (children[0]->m_type == "settings")
return true;
return false;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// PrusaDoubleSlider // PrusaDoubleSlider
@ -1029,7 +1065,7 @@ wxString PrusaDoubleSlider::get_label(const SelectedSlider& selection) const
void PrusaDoubleSlider::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const void PrusaDoubleSlider::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const
{ {
if (m_is_one_layer && selection != m_selection || !selection) if ((m_is_one_layer || m_higher_value==m_lower_value) && selection != m_selection || !selection)
return; return;
wxCoord text_width, text_height; wxCoord text_width, text_height;
const wxString label = get_label(selection); const wxString label = get_label(selection);

View File

@ -183,9 +183,22 @@ public:
m_icon = icon; m_icon = icon;
m_type = "volume"; m_type = "volume";
m_volume_id = volume_id; m_volume_id = volume_id;
m_extruder = extruder; m_extruder = extruder;
#ifdef __WXGTK__
// it's necessary on GTK because of control have to know if this item will be container
// in another case you couldn't to add subitem for this item
// it will be produce "segmentation fault"
m_container = true;
#endif //__WXGTK__
set_part_action_icon(); set_part_action_icon();
} }
PrusaObjectDataViewModelNode( PrusaObjectDataViewModelNode* parent) :
m_parent(parent),
m_name("SETTINGS LIST"),
m_copy(wxEmptyString),
m_type("settings"),
m_extruder(wxEmptyString) {}
~PrusaObjectDataViewModelNode() ~PrusaObjectDataViewModelNode()
{ {
@ -202,7 +215,7 @@ public:
wxIcon& m_icon = m_empty_icon; wxIcon& m_icon = m_empty_icon;
wxString m_copy; wxString m_copy;
std::string m_type; std::string m_type;
int m_volume_id; int m_volume_id = -2;
bool m_container = false; bool m_container = false;
wxString m_extruder = "default"; wxString m_extruder = "default";
wxBitmap m_action_icon; wxBitmap m_action_icon;
@ -326,6 +339,7 @@ public:
// Set action icons for node // Set action icons for node
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);
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -350,6 +364,7 @@ public:
const wxIcon& icon, const wxIcon& icon,
const int = 0, const int = 0,
const bool create_frst_child = true); const bool create_frst_child = true);
wxDataViewItem AddSettingsChild(const wxDataViewItem &parent_item);
wxDataViewItem Delete(const wxDataViewItem &item); wxDataViewItem Delete(const wxDataViewItem &item);
void DeleteAll(); void DeleteAll();
void DeleteChildren(wxDataViewItem& parent); void DeleteChildren(wxDataViewItem& parent);
@ -383,8 +398,7 @@ public:
int new_volume_id, int new_volume_id,
const wxDataViewItem &parent); const wxDataViewItem &parent);
// virtual bool IsEnabled(const wxDataViewItem &item, virtual bool IsEnabled(const wxDataViewItem &item, unsigned int col) const override;
// unsigned int col) const override;
virtual wxDataViewItem GetParent(const wxDataViewItem &item) const override; virtual wxDataViewItem GetParent(const wxDataViewItem &item) const override;
virtual bool IsContainer(const wxDataViewItem &item) const override; virtual bool IsContainer(const wxDataViewItem &item) const override;
@ -394,6 +408,8 @@ public:
// Is the container just a header or an item with all columns // Is the container just a header or an item with all columns
// In our case it is an item with all columns // In our case it is an item with all columns
virtual bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; } virtual bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; }
bool HasSettings(const wxDataViewItem &item) const;
}; };