From bf8c3885682260ac2171d0a1716071200cb1a9c5 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci <aar@cpan.org> Date: Sun, 23 Mar 2014 13:46:05 +0100 Subject: [PATCH] Use a popup menu for part settings --- .../GUI/Plater/OverrideSettingsPanel.pm | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm b/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm index 3e392d944..b3ea6bb3e 100644 --- a/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm +++ b/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm @@ -5,7 +5,7 @@ use utf8; use File::Basename qw(basename); use Wx qw(:misc :sizer :button wxTAB_TRAVERSAL wxSUNKEN_BORDER wxBITMAP_TYPE_PNG); -use Wx::Event qw(EVT_BUTTON); +use Wx::Event qw(EVT_BUTTON EVT_LEFT_DOWN EVT_MENU); use base 'Wx::ScrolledWindow'; use constant ICON_MATERIAL => 0; @@ -22,20 +22,23 @@ sub new { # option selector { - my $choice = $self->{choice} = Wx::Choice->new($self, -1, wxDefaultPosition, [150, -1], []); - # create the button my $btn = $self->{btn_add} = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new("$Slic3r::var/add.png", wxBITMAP_TYPE_PNG)); - EVT_BUTTON($self, $btn, sub { - my $idx = $choice->GetSelection; - return if $idx == -1; # lack of selected item, can happen on Windows - my $opt_key = $self->{options}[$idx]; - $self->{config}->apply(Slic3r::Config->new_from_defaults($opt_key)); - $self->update_optgroup; + EVT_LEFT_DOWN($btn, sub { + my $menu = Wx::Menu->new; + foreach my $opt_key (@{$self->{options}}) { + my $id = &Wx::NewId(); + $menu->Append($id, $self->{option_labels}{$opt_key}); + EVT_MENU($menu, $id, sub { + $self->{config}->apply(Slic3r::Config->new_from_defaults($opt_key)); + $self->update_optgroup; + }); + } + $self->PopupMenu($menu, $btn->GetPosition); + $menu->Destroy; }); my $h_sizer = Wx::BoxSizer->new(wxHORIZONTAL); - $h_sizer->Add($choice, 1, wxEXPAND | wxALL, 0); $h_sizer->Add($btn, 0, wxEXPAND | wxLEFT, 10); $self->{sizer}->Add($h_sizer, 0, wxEXPAND | wxBOTTOM, 10); } @@ -56,11 +59,10 @@ sub set_opt_keys { my ($self, $opt_keys) = @_; # sort options by category+label - my %settings = map { $_ => sprintf('%s > %s', $Slic3r::Config::Options->{$_}{category}, $Slic3r::Config::Options->{$_}{full_label} // $Slic3r::Config::Options->{$_}{label}) } @$opt_keys; - $self->{options} = [ sort { $settings{$a} cmp $settings{$b} } keys %settings ]; - - $self->{choice}->Clear; - $self->{choice}->Append($_) for map $settings{$_}, @{$self->{options}}; + $self->{option_labels} = { + map { $_ => sprintf('%s > %s', $Slic3r::Config::Options->{$_}{category}, $Slic3r::Config::Options->{$_}{full_label} // $Slic3r::Config::Options->{$_}{label}) } @$opt_keys + }; + $self->{options} = [ sort { $self->{option_labels}{$a} cmp $self->{option_labels}{$b} } @$opt_keys ]; } sub set_config { @@ -108,7 +110,6 @@ sub update_optgroup { sub enable { my ($self) = @_; - $self->{choice}->Enable; $self->{btn_add}->Enable; $self->Enable; } @@ -116,7 +117,6 @@ sub enable { sub disable { my ($self) = @_; - $self->{choice}->Disable; $self->{btn_add}->Disable; $self->Disable; }