From 632bf56f2932bc76369381d0bad7a73a440029f9 Mon Sep 17 00:00:00 2001 From: bubnikv <bubnikv@gmail.com> Date: Fri, 4 Aug 2017 15:54:12 +0200 Subject: [PATCH] merged save_window_pos / restore_window_pos from @alexrj Slic3r. --- lib/Slic3r/GUI.pm | 25 +++++++++++++++++++ lib/Slic3r/GUI/MainFrame.pm | 20 +++------------ lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm | 2 +- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm index 56007b44c..1c96962a0 100644 --- a/lib/Slic3r/GUI.pm +++ b/lib/Slic3r/GUI.pm @@ -404,4 +404,29 @@ sub scan_serial_ports { return grep !/Bluetooth|FireFly/, @ports; } +sub save_window_pos { + my ($self, $window, $name) = @_; + + $Settings->{_}{"${name}_pos"} = join ',', $window->GetScreenPositionXY; + $Settings->{_}{"${name}_size"} = join ',', $window->GetSizeWH; + $Settings->{_}{"${name}_maximized"} = $window->IsMaximized; + $self->save_settings; +} + +sub restore_window_pos { + my ($self, $window, $name) = @_; + + if (defined $Settings->{_}{"${name}_pos"}) { + my $size = [ split ',', $Settings->{_}{"${name}_size"}, 2 ]; + $window->SetSize($size); + + my $display = Wx::Display->new->GetClientArea(); + my $pos = [ split ',', $Settings->{_}{"${name}_pos"}, 2 ]; + if (($pos->[0] + $size->[0]/2) < $display->GetRight && ($pos->[1] + $size->[1]/2) < $display->GetBottom) { + $window->Move($pos); + } + $window->Maximize(1) if $Settings->{_}{"${name}_maximized"}; + } +} + 1; diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index b01f3dd4e..1f27a9724 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -60,19 +60,8 @@ sub new { $self->SetSizer($sizer); $self->Fit; $self->SetMinSize([760, 490]); - if (defined $Slic3r::GUI::Settings->{_}{main_frame_size}) { - my $size = [ split ',', $Slic3r::GUI::Settings->{_}{main_frame_size}, 2 ]; - $self->SetSize($size); - - my $display = Wx::Display->new->GetClientArea(); - my $pos = [ split ',', $Slic3r::GUI::Settings->{_}{main_frame_pos}, 2 ]; - if (($pos->[X] + $size->[X]/2) < $display->GetRight && ($pos->[Y] + $size->[Y]/2) < $display->GetBottom) { - $self->Move($pos); - } - $self->Maximize(1) if $Slic3r::GUI::Settings->{_}{main_frame_maximized}; - } else { - $self->SetSize($self->GetMinSize); - } + $self->SetSize($self->GetMinSize); + wxTheApp->restore_window_pos($self, "main_frame"); $self->Show; $self->Layout; } @@ -87,10 +76,7 @@ sub new { } # save window size - $Slic3r::GUI::Settings->{_}{main_frame_pos} = join ',', $self->GetScreenPositionXY; - $Slic3r::GUI::Settings->{_}{main_frame_size} = join ',', $self->GetSizeWH; - $Slic3r::GUI::Settings->{_}{main_frame_maximized} = $self->IsMaximized; - wxTheApp->save_settings; + wxTheApp->save_window_pos($self, "main_frame"); # propagate event $event->Skip; diff --git a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm index bf2e50dcc..971d688cb 100644 --- a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm +++ b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm @@ -7,7 +7,7 @@ use strict; use warnings; use utf8; -use Wx qw(:dialog :id :misc :sizer :systemsettings :notebook wxTAB_TRAVERSAL); +use Wx qw(:dialog :id :misc :sizer :systemsettings :notebook wxTAB_TRAVERSAL wxTheApp); use Wx::Event qw(EVT_BUTTON); use base 'Wx::Dialog';