List objects in a submenu and allow to select them from it

This commit is contained in:
Alessandro Ranellucci 2017-03-22 22:19:12 +01:00
parent ce64cb05a1
commit 82db702801
2 changed files with 30 additions and 0 deletions

View File

@ -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');

View File

@ -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);