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:
parent
3075364da1
commit
78cedb34d4
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user