From 82db702801d34d88a78928ad53acd63744c482f2 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Wed, 22 Mar 2017 22:19:12 +0100 Subject: [PATCH] List objects in a submenu and allow to select them from it --- lib/Slic3r/GUI/MainFrame.pm | 6 ++++++ lib/Slic3r/GUI/Plater.pm | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 7b21d64c3..2b988cb64 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -176,6 +176,12 @@ sub _init_menubar { my $plater = $self->{plater}; $self->{plater_menu} = Wx::Menu->new; + { + my $selectMenu = $self->{plater_select_menu} = Wx::Menu->new; + my $selectMenuItem = $self->{plater_menu}->AppendSubMenu($selectMenu, "Select", 'Select an object in the plater'); + wxTheApp->set_menu_item_icon($selectMenuItem, 'brick.png'); + } + $self->{plater_menu}->AppendSeparator(); $self->_append_menu_item($self->{plater_menu}, "Export G-code...", 'Export current plate as G-code', sub { $plater->export_gcode; }, undef, 'cog_go.png'); diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index f586c7b43..6ad698e7a 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -1873,6 +1873,23 @@ sub on_thumbnail_made { sub on_model_change { my ($self, $force_autocenter) = @_; + # reload the select submenu (if already initialized) + if (my $menu = $self->GetFrame->{plater_select_menu}) { + $menu->DeleteItem($_) for $menu->GetMenuItems; + for my $i (0..$#{$self->{objects}}) { + my $name = $self->{objects}->[$i]->name; + my $count = $self->{model}->get_object($i)->instances_count; + if ($count > 1) { + $name .= " (${count}x)"; + } + my $item = $self->GetFrame->_append_menu_item($menu, $name, 'Select object', sub { + $self->select_object($i); + $self->refresh_canvases; + }, undef, undef, wxITEM_CHECK); + $item->Check(1) if $self->{objects}->[$i]->selected; + } + } + my $running = $self->pause_background_process; if ($Slic3r::GUI::Settings->{_}{autocenter} || $force_autocenter) { @@ -2061,6 +2078,13 @@ sub selection_changed { my ($obj_idx, $object) = $self->selected_object; my $have_sel = defined $obj_idx; + if (my $menu = $self->GetFrame->{plater_select_menu}) { + $_->Check(0) for $menu->GetMenuItems; + if ($have_sel) { + $menu->FindItemByPosition($obj_idx)->Check(1); + } + } + my $method = $have_sel ? 'Enable' : 'Disable'; $self->{"btn_$_"}->$method for grep $self->{"btn_$_"}, qw(remove increase decrease rotate45cw rotate45ccw changescale split cut settings);