diff --git a/lib/Slic3r/GUI/Controller.pm b/lib/Slic3r/GUI/Controller.pm index c73f2140b..9af8bef4e 100644 --- a/lib/Slic3r/GUI/Controller.pm +++ b/lib/Slic3r/GUI/Controller.pm @@ -5,7 +5,11 @@ use utf8; use Wx qw(wxTheApp :frame :id :misc :sizer :bitmap :button :icon :dialog); use Wx::Event qw(EVT_CLOSE EVT_LEFT_DOWN EVT_MENU); -use base 'Wx::ScrolledWindow'; +use base qw(Wx::ScrolledWindow Class::Accessor); + +__PACKAGE__->mk_accessors(qw(_selected_printer_preset)); + +our @ConfigOptions = qw(bed_shape serial_port serial_speed); sub new { my ($class, $parent) = @_; @@ -105,17 +109,23 @@ sub OnActivate { grep { $_->is_connected || @{$_->jobs} > 0 } $self->print_panels; - # if there are no active panels, use sensible defaults - if (!%active) { - if (keys %presets <= 2) { + if (%presets) { + # if there are no active panels, use sensible defaults + if (!%active && keys %presets <= 2) { # if only one or two presets exist, load them $active{$_} = 1 for keys %presets; - } else { + } + if (!%active) { # enable printers whose port is available my %ports = map { $_ => 1 } wxTheApp->scan_serial_ports; $active{$_} = 1 for grep exists $ports{$presets{$_}->serial_port}, keys %presets; } + if (!%active && $self->_selected_printer_preset) { + # enable currently selected printer if it is configured + $active{$self->_selected_printer_preset} = 1 + if $presets{$self->_selected_printer_preset}; + } } # apply changes @@ -163,4 +173,21 @@ sub print_panels { map $_->GetWindow, $self->{sizer}->GetChildren; } +sub update_presets { + my $self = shift; + my ($group, $presets, $selected, $is_dirty) = @_; + + # update configs of currently loaded print panels + foreach my $panel ($self->print_panels) { + foreach my $preset (@$presets) { + if ($panel->printer_name eq $preset->name) { + my $config = $preset->config(\@ConfigOptions); + $panel->config->apply($config); + } + } + } + + $self->_selected_printer_preset($presets->[$selected]->name); +} + 1; diff --git a/lib/Slic3r/GUI/Controller/PrinterPanel.pm b/lib/Slic3r/GUI/Controller/PrinterPanel.pm index dee150c19..eff99dc4d 100644 --- a/lib/Slic3r/GUI/Controller/PrinterPanel.pm +++ b/lib/Slic3r/GUI/Controller/PrinterPanel.pm @@ -564,7 +564,7 @@ sub new { } { my $filament_stats = join "\n", - map "$_ (" . sprintf("%.2f", $job->filament_stats->{$_}/100) . "m)", + map "$_ (" . sprintf("%.2f", $job->filament_stats->{$_}/1000) . "m)", sort keys %{$job->filament_stats}; my $text = Wx::StaticText->new($self, -1, $filament_stats, wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index bc89eb7c8..9b9d18583 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -136,6 +136,7 @@ sub _init_tabpanel { if ($self->{plater}) { $self->{plater}->update_presets($tab_name, @_); $self->{plater}->on_config_change($tab->config); + $self->{controller}->update_presets($tab_name, @_); } }); $tab->load_presets; @@ -735,7 +736,7 @@ sub check_unsaved_changes { sub select_tab { my ($self, $tab) = @_; - $self->{tabpanel}->ChangeSelection($tab); + $self->{tabpanel}->SetSelection($tab); } sub _append_menu_item {