First right-panel reorganization:
* Replaced Object list from CollapsiblePane * Sub-object are adding by context menu from list * (sub)objects can be deleted by only one "Delete" button * Added extruder selection to list
This commit is contained in:
parent
678498bed6
commit
54298c8e61
@ -29,6 +29,8 @@ our $PRESETS_CHANGED_EVENT = Wx::NewEventType;
|
|||||||
our $OBJECT_SELECTION_CHANGED_EVENT = Wx::NewEventType;
|
our $OBJECT_SELECTION_CHANGED_EVENT = Wx::NewEventType;
|
||||||
# 4) To inform about a change of object settings
|
# 4) To inform about a change of object settings
|
||||||
our $OBJECT_SETTINGS_CHANGED_EVENT = Wx::NewEventType;
|
our $OBJECT_SETTINGS_CHANGED_EVENT = Wx::NewEventType;
|
||||||
|
# 5) To inform about a remove of object
|
||||||
|
our $OBJECT_REMOVE_EVENT = Wx::NewEventType;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, %params) = @_;
|
my ($class, %params) = @_;
|
||||||
@ -122,6 +124,7 @@ sub _init_tabpanel {
|
|||||||
$panel->AddPage($self->{plater} = Slic3r::GUI::Plater->new($panel,
|
$panel->AddPage($self->{plater} = Slic3r::GUI::Plater->new($panel,
|
||||||
event_object_selection_changed => $OBJECT_SELECTION_CHANGED_EVENT,
|
event_object_selection_changed => $OBJECT_SELECTION_CHANGED_EVENT,
|
||||||
event_object_settings_changed => $OBJECT_SETTINGS_CHANGED_EVENT,
|
event_object_settings_changed => $OBJECT_SETTINGS_CHANGED_EVENT,
|
||||||
|
event_remove_object => $OBJECT_REMOVE_EVENT,
|
||||||
), L("Plater"));
|
), L("Plater"));
|
||||||
if (!$self->{no_controller}) {
|
if (!$self->{no_controller}) {
|
||||||
$panel->AddPage($self->{controller} = Slic3r::GUI::Controller->new($panel), L("Controller"));
|
$panel->AddPage($self->{controller} = Slic3r::GUI::Controller->new($panel), L("Controller"));
|
||||||
@ -197,6 +200,12 @@ sub _init_tabpanel {
|
|||||||
|
|
||||||
$self->{plater}->changed_object_settings($obj_idx, $parts_changed, $part_settings_changed);
|
$self->{plater}->changed_object_settings($obj_idx, $parts_changed, $part_settings_changed);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
# The following event is emited by the C++ Tab implementation on object settings change.
|
||||||
|
EVT_COMMAND($self, -1, $OBJECT_REMOVE_EVENT, sub {
|
||||||
|
my ($self, $event) = @_;
|
||||||
|
$self->{plater}->remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
Slic3r::GUI::create_preset_tabs($self->{no_controller}, $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT);
|
Slic3r::GUI::create_preset_tabs($self->{no_controller}, $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT);
|
||||||
|
@ -57,6 +57,7 @@ sub new {
|
|||||||
# store input params
|
# store input params
|
||||||
$self->{event_object_selection_changed} = $params{event_object_selection_changed};
|
$self->{event_object_selection_changed} = $params{event_object_selection_changed};
|
||||||
$self->{event_object_settings_changed} = $params{event_object_settings_changed};
|
$self->{event_object_settings_changed} = $params{event_object_settings_changed};
|
||||||
|
$self->{event_remove_object} = $params{event_remove_object};
|
||||||
|
|
||||||
# C++ Slic3r::Model with Perl extensions in Slic3r/Model.pm
|
# C++ Slic3r::Model with Perl extensions in Slic3r/Model.pm
|
||||||
$self->{model} = Slic3r::Model->new;
|
$self->{model} = Slic3r::Model->new;
|
||||||
@ -151,6 +152,7 @@ sub new {
|
|||||||
Slic3r::GUI::_3DScene::register_on_increase_objects_callback($self->{canvas3D}, sub { $self->increase() });
|
Slic3r::GUI::_3DScene::register_on_increase_objects_callback($self->{canvas3D}, sub { $self->increase() });
|
||||||
Slic3r::GUI::_3DScene::register_on_decrease_objects_callback($self->{canvas3D}, sub { $self->decrease() });
|
Slic3r::GUI::_3DScene::register_on_decrease_objects_callback($self->{canvas3D}, sub { $self->decrease() });
|
||||||
Slic3r::GUI::_3DScene::register_on_remove_object_callback($self->{canvas3D}, sub { $self->remove() });
|
Slic3r::GUI::_3DScene::register_on_remove_object_callback($self->{canvas3D}, sub { $self->remove() });
|
||||||
|
# Slic3r::GUI::_3DScene::register_on_remove_object_callback($self->{canvas3D}, sub { Slic3r::GUI::remove_obj() });
|
||||||
Slic3r::GUI::_3DScene::register_on_instance_moved_callback($self->{canvas3D}, $on_instances_moved);
|
Slic3r::GUI::_3DScene::register_on_instance_moved_callback($self->{canvas3D}, $on_instances_moved);
|
||||||
Slic3r::GUI::_3DScene::register_on_enable_action_buttons_callback($self->{canvas3D}, $enable_action_buttons);
|
Slic3r::GUI::_3DScene::register_on_enable_action_buttons_callback($self->{canvas3D}, $enable_action_buttons);
|
||||||
Slic3r::GUI::_3DScene::register_on_gizmo_scale_uniformly_callback($self->{canvas3D}, $on_gizmo_scale_uniformly);
|
Slic3r::GUI::_3DScene::register_on_gizmo_scale_uniformly_callback($self->{canvas3D}, $on_gizmo_scale_uniformly);
|
||||||
@ -328,7 +330,8 @@ sub new {
|
|||||||
|
|
||||||
if ($self->{htoolbar}) {
|
if ($self->{htoolbar}) {
|
||||||
EVT_TOOL($self, TB_ADD, sub { $self->add; });
|
EVT_TOOL($self, TB_ADD, sub { $self->add; });
|
||||||
EVT_TOOL($self, TB_REMOVE, sub { $self->remove() }); # explicitly pass no argument to remove
|
# EVT_TOOL($self, TB_REMOVE, sub { $self->remove() }); # explicitly pass no argument to remove
|
||||||
|
EVT_TOOL($self, TB_REMOVE, sub { Slic3r::GUI::remove_obj() }); # explicitly pass no argument to remove
|
||||||
EVT_TOOL($self, TB_RESET, sub { $self->reset; });
|
EVT_TOOL($self, TB_RESET, sub { $self->reset; });
|
||||||
EVT_TOOL($self, TB_ARRANGE, sub { $self->arrange; });
|
EVT_TOOL($self, TB_ARRANGE, sub { $self->arrange; });
|
||||||
EVT_TOOL($self, TB_MORE, sub { $self->increase; });
|
EVT_TOOL($self, TB_MORE, sub { $self->increase; });
|
||||||
@ -346,7 +349,8 @@ sub new {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
EVT_BUTTON($self, $self->{btn_add}, sub { $self->add; });
|
EVT_BUTTON($self, $self->{btn_add}, sub { $self->add; });
|
||||||
EVT_BUTTON($self, $self->{btn_remove}, sub { $self->remove() }); # explicitly pass no argument to remove
|
# EVT_BUTTON($self, $self->{btn_remove}, sub { $self->remove() }); # explicitly pass no argument to remove
|
||||||
|
EVT_BUTTON($self, $self->{btn_remove}, sub { Slic3r::GUI::remove_obj() }); # explicitly pass no argument to remove
|
||||||
EVT_BUTTON($self, $self->{btn_reset}, sub { $self->reset; });
|
EVT_BUTTON($self, $self->{btn_reset}, sub { $self->reset; });
|
||||||
EVT_BUTTON($self, $self->{btn_arrange}, sub { $self->arrange; });
|
EVT_BUTTON($self, $self->{btn_arrange}, sub { $self->arrange; });
|
||||||
EVT_BUTTON($self, $self->{btn_increase}, sub { $self->increase; });
|
EVT_BUTTON($self, $self->{btn_increase}, sub { $self->increase; });
|
||||||
@ -446,7 +450,8 @@ sub new {
|
|||||||
my $expert_mode_part_sizer = Wx::BoxSizer->new(wxVERTICAL);
|
my $expert_mode_part_sizer = Wx::BoxSizer->new(wxVERTICAL);
|
||||||
Slic3r::GUI::add_expert_mode_part( $self->{right_panel}, $expert_mode_part_sizer,
|
Slic3r::GUI::add_expert_mode_part( $self->{right_panel}, $expert_mode_part_sizer,
|
||||||
$self->{event_object_selection_changed},
|
$self->{event_object_selection_changed},
|
||||||
$self->{event_object_settings_changed});
|
$self->{event_object_settings_changed},
|
||||||
|
$self->{event_remove_object});
|
||||||
# if ($expert_mode_part_sizer->IsShown(2)==1)
|
# if ($expert_mode_part_sizer->IsShown(2)==1)
|
||||||
# {
|
# {
|
||||||
# $expert_mode_part_sizer->Layout;
|
# $expert_mode_part_sizer->Layout;
|
||||||
|
@ -811,6 +811,10 @@ wxFrame* get_main_frame() {
|
|||||||
return g_wxMainFrame;
|
return g_wxMainFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxNotebook * get_tab_panel() {
|
||||||
|
return g_wxTabPanel;
|
||||||
|
}
|
||||||
|
|
||||||
const int& label_width(){
|
const int& label_width(){
|
||||||
return m_label_width;
|
return m_label_width;
|
||||||
}
|
}
|
||||||
@ -885,15 +889,19 @@ wxString from_u8(const std::string &str)
|
|||||||
|
|
||||||
void add_expert_mode_part( wxWindow* parent, wxBoxSizer* sizer,
|
void add_expert_mode_part( wxWindow* parent, wxBoxSizer* sizer,
|
||||||
int event_object_selection_changed,
|
int event_object_selection_changed,
|
||||||
int event_object_settings_changed)
|
int event_object_settings_changed,
|
||||||
|
int event_remove_object)
|
||||||
{
|
{
|
||||||
set_event_object_selection_changed(event_object_selection_changed);
|
set_event_object_selection_changed(event_object_selection_changed);
|
||||||
set_event_object_settings_changed(event_object_settings_changed);
|
set_event_object_settings_changed(event_object_settings_changed);
|
||||||
|
set_event_remove_object(event_remove_object);
|
||||||
init_mesh_icons();
|
init_mesh_icons();
|
||||||
|
|
||||||
wxWindowUpdateLocker noUpdates(parent);
|
wxWindowUpdateLocker noUpdates(parent);
|
||||||
|
|
||||||
add_collapsible_panes(parent, sizer);
|
add_objects_list(parent, sizer);
|
||||||
|
|
||||||
|
// add_collapsible_panes(parent, sizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
Line add_og_to_object_settings(const std::string& option_name, const std::string& sidetext, int def_value = 0)
|
Line add_og_to_object_settings(const std::string& option_name, const std::string& sidetext, int def_value = 0)
|
||||||
@ -1149,7 +1157,7 @@ void update_mode()
|
|||||||
|
|
||||||
// TODO There is a not the best place of it!
|
// TODO There is a not the best place of it!
|
||||||
// *** Update showing of the collpane_settings
|
// *** Update showing of the collpane_settings
|
||||||
show_collpane_settings(mode == ConfigMenuModeExpert);
|
// show_collpane_settings(mode == ConfigMenuModeExpert);
|
||||||
// *************************
|
// *************************
|
||||||
g_right_panel->GetParent()->Layout();
|
g_right_panel->GetParent()->Layout();
|
||||||
g_right_panel->Layout();
|
g_right_panel->Layout();
|
||||||
|
@ -106,6 +106,7 @@ AppConfig* get_app_config();
|
|||||||
wxApp* get_app();
|
wxApp* get_app();
|
||||||
PresetBundle* get_preset_bundle();
|
PresetBundle* get_preset_bundle();
|
||||||
wxFrame* get_main_frame();
|
wxFrame* get_main_frame();
|
||||||
|
wxNotebook * get_tab_panel();
|
||||||
|
|
||||||
const wxColour& get_label_clr_modified();
|
const wxColour& get_label_clr_modified();
|
||||||
const wxColour& get_label_clr_sys();
|
const wxColour& get_label_clr_sys();
|
||||||
@ -187,7 +188,8 @@ wxString from_u8(const std::string &str);
|
|||||||
|
|
||||||
void add_expert_mode_part( wxWindow* parent, wxBoxSizer* sizer,
|
void add_expert_mode_part( wxWindow* parent, wxBoxSizer* sizer,
|
||||||
int event_object_selection_changed,
|
int event_object_selection_changed,
|
||||||
int event_object_settings_changed);
|
int event_object_settings_changed,
|
||||||
|
int event_remove_object);
|
||||||
void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer);
|
void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer);
|
||||||
// Update view mode according to selected menu
|
// Update view mode according to selected menu
|
||||||
void update_mode();
|
void update_mode();
|
||||||
|
@ -42,6 +42,7 @@ ModelObjectPtrs m_objects;
|
|||||||
|
|
||||||
int m_event_object_selection_changed = 0;
|
int m_event_object_selection_changed = 0;
|
||||||
int m_event_object_settings_changed = 0;
|
int m_event_object_settings_changed = 0;
|
||||||
|
int m_event_remove_object = 0;
|
||||||
|
|
||||||
bool m_parts_changed = false;
|
bool m_parts_changed = false;
|
||||||
bool m_part_settings_changed = false;
|
bool m_part_settings_changed = false;
|
||||||
@ -52,6 +53,9 @@ void set_event_object_selection_changed(const int& event){
|
|||||||
void set_event_object_settings_changed(const int& event){
|
void set_event_object_settings_changed(const int& event){
|
||||||
m_event_object_settings_changed = event;
|
m_event_object_settings_changed = event;
|
||||||
}
|
}
|
||||||
|
void set_event_remove_object(const int& event){
|
||||||
|
m_event_remove_object = event;
|
||||||
|
}
|
||||||
|
|
||||||
void init_mesh_icons(){
|
void init_mesh_icons(){
|
||||||
m_icon_modifiermesh = wxIcon(Slic3r::GUI::from_u8(Slic3r::var("plugin.png")), wxBITMAP_TYPE_PNG);
|
m_icon_modifiermesh = wxIcon(Slic3r::GUI::from_u8(Slic3r::var("plugin.png")), wxBITMAP_TYPE_PNG);
|
||||||
@ -80,15 +84,30 @@ wxBoxSizer* content_objects_list(wxWindow *win)
|
|||||||
#endif // wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
|
#endif // wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
|
||||||
|
|
||||||
// column 0(Icon+Text) of the view control:
|
// column 0(Icon+Text) of the view control:
|
||||||
m_objects_ctrl->AppendIconTextColumn(_(L("Name")), 0, wxDATAVIEW_CELL_INERT, 150,
|
m_objects_ctrl->AppendIconTextColumn(_(L("Name")), 0, wxDATAVIEW_CELL_INERT, 120,
|
||||||
wxALIGN_LEFT, /*wxDATAVIEW_COL_SORTABLE | */wxDATAVIEW_COL_RESIZABLE);
|
wxALIGN_LEFT, /*wxDATAVIEW_COL_SORTABLE | */wxDATAVIEW_COL_RESIZABLE);
|
||||||
|
|
||||||
// column 1 of the view control:
|
// column 1 of the view control:
|
||||||
m_objects_ctrl->AppendTextColumn(_(L("Copy")), 1, wxDATAVIEW_CELL_INERT, 65,
|
m_objects_ctrl->AppendTextColumn(_(L("Copy")), 1, wxDATAVIEW_CELL_INERT, 45,
|
||||||
wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE);
|
wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE);
|
||||||
|
|
||||||
// column 2 of the view control:
|
// column 2 of the view control:
|
||||||
m_objects_ctrl->AppendTextColumn(_(L("Scale")), 2, wxDATAVIEW_CELL_INERT, 70,
|
m_objects_ctrl->AppendTextColumn(_(L("Scale")), 2, wxDATAVIEW_CELL_INERT, 55,
|
||||||
|
wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE);
|
||||||
|
|
||||||
|
// column 2 of the view control:
|
||||||
|
wxArrayString choices;
|
||||||
|
choices.Add("1");
|
||||||
|
choices.Add("2");
|
||||||
|
choices.Add("3");
|
||||||
|
choices.Add("4");
|
||||||
|
wxDataViewChoiceRenderer *c =
|
||||||
|
new wxDataViewChoiceRenderer(choices, wxDATAVIEW_CELL_EDITABLE, wxALIGN_CENTER_HORIZONTAL);
|
||||||
|
wxDataViewColumn *column3 =
|
||||||
|
new wxDataViewColumn(_(L("Extruder")), c, 3, 60, wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE);
|
||||||
|
m_objects_ctrl->AppendColumn(column3);
|
||||||
|
|
||||||
|
m_objects_ctrl->AppendBitmapColumn("", 4, wxDATAVIEW_CELL_INERT, 25,
|
||||||
wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE);
|
wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE);
|
||||||
|
|
||||||
m_objects_ctrl->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [](wxEvent& event)
|
m_objects_ctrl->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [](wxEvent& event)
|
||||||
@ -96,6 +115,13 @@ wxBoxSizer* content_objects_list(wxWindow *win)
|
|||||||
object_ctrl_selection_changed();
|
object_ctrl_selection_changed();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
m_objects_ctrl->Bind(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, [](wxEvent& event)
|
||||||
|
{
|
||||||
|
event.Skip();
|
||||||
|
object_ctrl_context_menu();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
m_objects_ctrl->Bind(wxEVT_KEY_DOWN, [](wxKeyEvent& event)
|
m_objects_ctrl->Bind(wxEVT_KEY_DOWN, [](wxKeyEvent& event)
|
||||||
{
|
{
|
||||||
if (event.GetKeyCode() == WXK_TAB)
|
if (event.GetKeyCode() == WXK_TAB)
|
||||||
@ -305,6 +331,11 @@ wxCollapsiblePane* add_collapsible_pane(wxWindow* parent, wxBoxSizer* sizer_pare
|
|||||||
return collpane;
|
return collpane;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_objects_list(wxWindow* parent, wxBoxSizer* sizer)
|
||||||
|
{
|
||||||
|
sizer->Add(content_objects_list(parent), 1, wxEXPAND | wxALL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void add_collapsible_panes(wxWindow* parent, wxBoxSizer* sizer)
|
void add_collapsible_panes(wxWindow* parent, wxBoxSizer* sizer)
|
||||||
{
|
{
|
||||||
// *** Objects List ***
|
// *** Objects List ***
|
||||||
@ -349,14 +380,14 @@ void delete_object_from_list()
|
|||||||
// m_objects_ctrl->Select(m_objects_model->Delete(item));
|
// m_objects_ctrl->Select(m_objects_model->Delete(item));
|
||||||
m_objects_model->Delete(item);
|
m_objects_model->Delete(item);
|
||||||
|
|
||||||
if (m_objects_model->IsEmpty())
|
// if (m_objects_model->IsEmpty())
|
||||||
m_collpane_settings->Show(false);
|
// m_collpane_settings->Show(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void delete_all_objects_from_list()
|
void delete_all_objects_from_list()
|
||||||
{
|
{
|
||||||
m_objects_model->DeleteAll();
|
m_objects_model->DeleteAll();
|
||||||
m_collpane_settings->Show(false);
|
// m_collpane_settings->Show(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_object_count(int idx, int count)
|
void set_object_count(int idx, int count)
|
||||||
@ -375,6 +406,8 @@ void unselect_objects()
|
|||||||
{
|
{
|
||||||
m_objects_ctrl->UnselectAll();
|
m_objects_ctrl->UnselectAll();
|
||||||
part_selection_changed();
|
part_selection_changed();
|
||||||
|
|
||||||
|
get_optgroup(ogFrequentlyObjectSettings)->disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void select_current_object(int idx)
|
void select_current_object(int idx)
|
||||||
@ -388,6 +421,25 @@ void select_current_object(int idx)
|
|||||||
m_objects_ctrl->Select(m_objects_model->GetItemById(idx));
|
m_objects_ctrl->Select(m_objects_model->GetItemById(idx));
|
||||||
part_selection_changed();
|
part_selection_changed();
|
||||||
g_prevent_list_events = false;
|
g_prevent_list_events = false;
|
||||||
|
|
||||||
|
get_optgroup(ogFrequentlyObjectSettings)->enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove()
|
||||||
|
{
|
||||||
|
auto item = m_objects_ctrl->GetSelection();
|
||||||
|
if (!item)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_objects_model->GetParent(item) == wxDataViewItem(0)) {
|
||||||
|
if (m_event_remove_object > 0) {
|
||||||
|
wxCommandEvent event(m_event_remove_object);
|
||||||
|
get_main_frame()->ProcessWindowEvent(event);
|
||||||
|
}
|
||||||
|
// delete_object_from_list();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
on_btn_del();
|
||||||
}
|
}
|
||||||
|
|
||||||
void object_ctrl_selection_changed()
|
void object_ctrl_selection_changed()
|
||||||
@ -406,6 +458,59 @@ void object_ctrl_selection_changed()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxMenu *CreateAddPartPopupMenu(){
|
||||||
|
wxMenu *menu = new wxMenu;
|
||||||
|
wxWindowID config_id_base = wxWindow::NewControlId(3);
|
||||||
|
|
||||||
|
menu->Append(config_id_base, _(L("Add part")));
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->Append(config_id_base + 1, _(L("Add modifier")));
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->AppendCheckItem(config_id_base + 2, _(L("Add generic")));
|
||||||
|
|
||||||
|
wxWindow* win = get_tab_panel()->GetPage(0);
|
||||||
|
|
||||||
|
menu->Bind(wxEVT_MENU, [config_id_base, win](wxEvent &event){
|
||||||
|
switch (event.GetId() - config_id_base) {
|
||||||
|
case 0:
|
||||||
|
on_btn_load(win);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
on_btn_load(win, true);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
on_btn_load(win, true, true);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
void object_ctrl_context_menu()
|
||||||
|
{
|
||||||
|
// auto cur_column = m_objects_ctrl->GetCurrentColumn();
|
||||||
|
// auto action_column = m_objects_ctrl->GetColumn(4);
|
||||||
|
// if (cur_column == action_column)
|
||||||
|
{
|
||||||
|
auto item = m_objects_ctrl->GetSelection();
|
||||||
|
if (item)
|
||||||
|
{
|
||||||
|
if (m_objects_model->GetParent(item) == wxDataViewItem(0)) {
|
||||||
|
auto menu = CreateAddPartPopupMenu();
|
||||||
|
get_tab_panel()->GetPage(0)->PopupMenu(menu);
|
||||||
|
// wxMessageBox(m_objects_model->GetName(item));
|
||||||
|
}
|
||||||
|
// else {
|
||||||
|
// auto parent = m_objects_model->GetParent(item);
|
||||||
|
// // Take ID of the parent object to "inform" perl-side which object have to be selected on the scene
|
||||||
|
// obj_idx = m_objects_model->GetIdByItem(parent);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ******
|
// ******
|
||||||
|
|
||||||
void load_part( wxWindow* parent, ModelObject* model_object,
|
void load_part( wxWindow* parent, ModelObject* model_object,
|
||||||
@ -643,7 +748,7 @@ void part_selection_changed()
|
|||||||
}
|
}
|
||||||
m_selected_object_id = obj_idx;
|
m_selected_object_id = obj_idx;
|
||||||
|
|
||||||
wxWindowUpdateLocker noUpdates(get_right_panel());
|
/* wxWindowUpdateLocker noUpdates(get_right_panel());
|
||||||
|
|
||||||
m_move_options = Point3(0, 0, 0);
|
m_move_options = Point3(0, 0, 0);
|
||||||
m_last_coords = Point3(0, 0, 0);
|
m_last_coords = Point3(0, 0, 0);
|
||||||
@ -653,7 +758,8 @@ void part_selection_changed()
|
|||||||
for (auto opt_key: opt_keys)
|
for (auto opt_key: opt_keys)
|
||||||
og->set_value(opt_key, int(0));
|
og->set_value(opt_key, int(0));
|
||||||
|
|
||||||
if (/*!item || */m_selected_object_id < 0){
|
// if (!item || m_selected_object_id < 0){
|
||||||
|
if (m_selected_object_id < 0){
|
||||||
m_sizer_object_buttons->Show(false);
|
m_sizer_object_buttons->Show(false);
|
||||||
m_sizer_part_buttons->Show(false);
|
m_sizer_part_buttons->Show(false);
|
||||||
m_sizer_object_movers->Show(false);
|
m_sizer_object_movers->Show(false);
|
||||||
@ -737,5 +843,10 @@ void part_selection_changed()
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_extruder_column_hidden(bool hide)
|
||||||
|
{
|
||||||
|
m_objects_ctrl->GetColumn(3)->SetHidden(hide);
|
||||||
|
}
|
||||||
|
|
||||||
} //namespace GUI
|
} //namespace GUI
|
||||||
} //namespace Slic3r
|
} //namespace Slic3r
|
@ -39,6 +39,7 @@ struct OBJECT_PARAMETERS
|
|||||||
};
|
};
|
||||||
|
|
||||||
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 show_collpane_settings(bool expert_mode);
|
void show_collpane_settings(bool expert_mode);
|
||||||
|
|
||||||
// Add object to the list
|
// Add object to the list
|
||||||
@ -56,12 +57,16 @@ void set_object_scale(int idx, int scale);
|
|||||||
void unselect_objects();
|
void unselect_objects();
|
||||||
// Select current object in the list on c++ side
|
// Select current object in the list on c++ side
|
||||||
void select_current_object(int idx);
|
void select_current_object(int idx);
|
||||||
|
// Remove objects/sub-object from the list
|
||||||
|
void remove();
|
||||||
|
|
||||||
void object_ctrl_selection_changed();
|
void object_ctrl_selection_changed();
|
||||||
|
void object_ctrl_context_menu();
|
||||||
|
|
||||||
void init_mesh_icons();
|
void init_mesh_icons();
|
||||||
void set_event_object_selection_changed(const int& event);
|
void set_event_object_selection_changed(const int& event);
|
||||||
void set_event_object_settings_changed (const int& event);
|
void set_event_object_settings_changed(const int& event);
|
||||||
|
void set_event_remove_object(const int& event);
|
||||||
|
|
||||||
bool is_parts_changed();
|
bool is_parts_changed();
|
||||||
bool is_part_settings_changed();
|
bool is_part_settings_changed();
|
||||||
@ -80,6 +85,9 @@ void on_btn_move_down();
|
|||||||
|
|
||||||
void parts_changed(int obj_idx);
|
void parts_changed(int obj_idx);
|
||||||
void part_selection_changed();
|
void part_selection_changed();
|
||||||
|
|
||||||
|
// show/hide "Extruder" column for Objects List
|
||||||
|
void set_extruder_column_hidden(bool hide);
|
||||||
} //namespace GUI
|
} //namespace GUI
|
||||||
} //namespace Slic3r
|
} //namespace Slic3r
|
||||||
#endif //slic3r_GUI_ObjectParts_hpp_
|
#endif //slic3r_GUI_ObjectParts_hpp_
|
@ -1910,6 +1910,7 @@ void Tab::load_current_preset()
|
|||||||
const Preset* parent_preset = m_presets->get_selected_preset_parent();
|
const Preset* parent_preset = m_presets->get_selected_preset_parent();
|
||||||
static_cast<TabPrinter*>(this)->m_sys_extruders_count = parent_preset == nullptr ? 0 :
|
static_cast<TabPrinter*>(this)->m_sys_extruders_count = parent_preset == nullptr ? 0 :
|
||||||
static_cast<const ConfigOptionFloats*>(parent_preset->config.option("nozzle_diameter"))->values.size();
|
static_cast<const ConfigOptionFloats*>(parent_preset->config.option("nozzle_diameter"))->values.size();
|
||||||
|
set_extruder_column_hidden(static_cast<TabPrinter*>(this)->m_sys_extruders_count <= 1);
|
||||||
}
|
}
|
||||||
m_opt_status_value = (m_presets->get_selected_preset_parent() ? osSystemValue : 0) | osInitValue;
|
m_opt_status_value = (m_presets->get_selected_preset_parent() ? osSystemValue : 0) | osInitValue;
|
||||||
init_options_list();
|
init_options_list();
|
||||||
|
@ -343,6 +343,18 @@ void PrusaCollapsiblePaneMSW::Collapse(bool collapse)
|
|||||||
}
|
}
|
||||||
#endif //__WXMSW__
|
#endif //__WXMSW__
|
||||||
|
|
||||||
|
// *****************************************************************************
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// PrusaObjectDataViewModelNode
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void PrusaObjectDataViewModelNode::set_object_action_icon() {
|
||||||
|
m_action_icon = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("add.png")), wxBITMAP_TYPE_PNG);
|
||||||
|
}
|
||||||
|
void PrusaObjectDataViewModelNode::set_part_action_icon() {
|
||||||
|
m_action_icon = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("cog.png")), wxBITMAP_TYPE_PNG);
|
||||||
|
}
|
||||||
|
|
||||||
// *****************************************************************************
|
// *****************************************************************************
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// PrusaObjectDataViewModel
|
// PrusaObjectDataViewModel
|
||||||
@ -539,6 +551,12 @@ void PrusaObjectDataViewModel::GetValue(wxVariant &variant, const wxDataViewItem
|
|||||||
case 2:
|
case 2:
|
||||||
variant = node->m_scale;
|
variant = node->m_scale;
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
variant = node->m_extruder;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
variant << node->m_action_icon;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -163,19 +163,21 @@ public:
|
|||||||
m_scale = wxString::Format("%d%%", scale);
|
m_scale = wxString::Format("%d%%", scale);
|
||||||
m_type = "object";
|
m_type = "object";
|
||||||
m_volume_id = -1;
|
m_volume_id = -1;
|
||||||
|
set_object_action_icon();
|
||||||
}
|
}
|
||||||
|
|
||||||
PrusaObjectDataViewModelNode( PrusaObjectDataViewModelNode* parent,
|
PrusaObjectDataViewModelNode( PrusaObjectDataViewModelNode* parent,
|
||||||
const wxString& sub_obj,
|
const wxString& sub_obj_name,
|
||||||
const wxIcon& icon,
|
const wxIcon& icon,
|
||||||
int volume_id=-1) {
|
int volume_id=-1) {
|
||||||
m_parent = parent;
|
m_parent = parent;
|
||||||
m_name = sub_obj;
|
m_name = sub_obj_name;
|
||||||
m_copy = wxEmptyString;
|
m_copy = wxEmptyString;
|
||||||
m_scale = wxEmptyString;
|
m_scale = wxEmptyString;
|
||||||
m_icon = icon;
|
m_icon = icon;
|
||||||
m_type = "volume";
|
m_type = "volume";
|
||||||
m_volume_id = volume_id;
|
m_volume_id = volume_id;
|
||||||
|
set_part_action_icon();
|
||||||
}
|
}
|
||||||
|
|
||||||
~PrusaObjectDataViewModelNode()
|
~PrusaObjectDataViewModelNode()
|
||||||
@ -196,6 +198,8 @@ public:
|
|||||||
std::string m_type;
|
std::string m_type;
|
||||||
int m_volume_id;
|
int m_volume_id;
|
||||||
bool m_container = false;
|
bool m_container = false;
|
||||||
|
wxString m_extruder = "default";
|
||||||
|
wxBitmap m_action_icon;
|
||||||
|
|
||||||
bool IsContainer() const
|
bool IsContainer() const
|
||||||
{
|
{
|
||||||
@ -259,6 +263,12 @@ public:
|
|||||||
case 2:
|
case 2:
|
||||||
m_scale = variant.GetString();
|
m_scale = variant.GetString();
|
||||||
return true;
|
return true;
|
||||||
|
case 3:
|
||||||
|
m_extruder = variant.GetString();
|
||||||
|
return true;
|
||||||
|
case 4:
|
||||||
|
m_action_icon << variant;
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
printf("MyObjectTreeModel::SetValue: wrong column");
|
printf("MyObjectTreeModel::SetValue: wrong column");
|
||||||
}
|
}
|
||||||
@ -290,6 +300,7 @@ public:
|
|||||||
m_name = from_node.m_name;
|
m_name = from_node.m_name;
|
||||||
m_icon = from_node.m_icon;
|
m_icon = from_node.m_icon;
|
||||||
m_volume_id = from_node.m_volume_id;
|
m_volume_id = from_node.m_volume_id;
|
||||||
|
m_extruder = from_node.m_extruder;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SwapChildrens(int frst_id, int scnd_id) {
|
bool SwapChildrens(int frst_id, int scnd_id) {
|
||||||
@ -309,6 +320,9 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set action icons for node
|
||||||
|
void set_object_action_icon();
|
||||||
|
void set_part_action_icon();
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -89,11 +89,13 @@ void add_frequently_changed_parameters(SV *ui_parent, SV *ui_sizer, SV *ui_p_siz
|
|||||||
|
|
||||||
void add_expert_mode_part( SV *ui_parent, SV *ui_sizer,
|
void add_expert_mode_part( SV *ui_parent, SV *ui_sizer,
|
||||||
int event_object_selection_changed,
|
int event_object_selection_changed,
|
||||||
int event_object_settings_changed)
|
int event_object_settings_changed,
|
||||||
|
int event_remove_object)
|
||||||
%code%{ Slic3r::GUI::add_expert_mode_part( (wxWindow*)wxPli_sv_2_object(aTHX_ ui_parent, "Wx::Window"),
|
%code%{ Slic3r::GUI::add_expert_mode_part( (wxWindow*)wxPli_sv_2_object(aTHX_ ui_parent, "Wx::Window"),
|
||||||
(wxBoxSizer*)wxPli_sv_2_object(aTHX_ ui_sizer, "Wx::BoxSizer"),
|
(wxBoxSizer*)wxPli_sv_2_object(aTHX_ ui_sizer, "Wx::BoxSizer"),
|
||||||
event_object_selection_changed,
|
event_object_selection_changed,
|
||||||
event_object_settings_changed); %};
|
event_object_settings_changed,
|
||||||
|
event_remove_object); %};
|
||||||
|
|
||||||
void set_objects_from_perl( SV *ui_parent,
|
void set_objects_from_perl( SV *ui_parent,
|
||||||
SV *frequently_changed_parameters_sizer,
|
SV *frequently_changed_parameters_sizer,
|
||||||
@ -149,6 +151,9 @@ void unselect_objects()
|
|||||||
void select_current_object(int idx)
|
void select_current_object(int idx)
|
||||||
%code%{ Slic3r::GUI::select_current_object(idx); %};
|
%code%{ Slic3r::GUI::select_current_object(idx); %};
|
||||||
|
|
||||||
|
void remove_obj()
|
||||||
|
%code%{ Slic3r::GUI::remove(); %};
|
||||||
|
|
||||||
std::string fold_utf8_to_ascii(const char *src)
|
std::string fold_utf8_to_ascii(const char *src)
|
||||||
%code%{ RETVAL = Slic3r::fold_utf8_to_ascii(src); %};
|
%code%{ RETVAL = Slic3r::fold_utf8_to_ascii(src); %};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user