diff options
author | tamasmeszaros <meszaros.q@gmail.com> | 2018-08-30 16:21:41 +0300 |
---|---|---|
committer | tamasmeszaros <meszaros.q@gmail.com> | 2018-08-30 18:35:49 +0300 |
commit | 4f53fc2a5f2ed179f857398e9f9ff3fe5956e52f (patch) | |
tree | ea6a927058fc7e4fe2095b7a9f89ccd7c7df246d /lib | |
parent | 3750bd781eb2b48bc9ac6ac5acf8ce1bf99da0be (diff) | |
parent | f5b1729af3e09ffc5ac64d2540227a0286cdb465 (diff) |
Merge remote-tracking branch 'origin/cpp_progress_status_bar' into dev
# Conflicts:
# lib/Slic3r/GUI/MainFrame.pm
# xs/src/slic3r/AppController.cpp
# xs/src/slic3r/AppControllerWx.cpp
# xs/src/slic3r/GUI/GUI.hpp
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Slic3r.pm | 1 | ||||
-rw-r--r-- | lib/Slic3r/GUI/MainFrame.pm | 19 | ||||
-rw-r--r-- | lib/Slic3r/GUI/Plater.pm | 4 | ||||
-rw-r--r-- | lib/Slic3r/GUI/ProgressStatusBar.pm | 138 |
4 files changed, 13 insertions, 149 deletions
diff --git a/lib/Slic3r.pm b/lib/Slic3r.pm index 46627311f..4a178682c 100644 --- a/lib/Slic3r.pm +++ b/lib/Slic3r.pm @@ -166,6 +166,7 @@ sub thread_cleanup { *Slic3r::GUI::Tab::DESTROY = sub {}; *Slic3r::GUI::PresetHints::DESTROY = sub {}; *Slic3r::GUI::TabIface::DESTROY = sub {}; + *Slic3r::GUI::ProgressStatusBar::DESTROY= sub {}; *Slic3r::OctoPrint::DESTROY = sub {}; *Slic3r::Duet::DESTROY = sub {}; *Slic3r::PresetUpdater::DESTROY = sub {}; diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 315bf2f45..2c3d12b88 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -70,24 +70,11 @@ sub new { eval { Wx::ToolTip::SetAutoPop(32767) }; # initialize status bar - $self->{statusbar} = Slic3r::GUI::ProgressStatusBar->new($self, Wx::NewId); + $self->{statusbar} = Slic3r::GUI::ProgressStatusBar->new(); + $self->{statusbar}->Embed; $self->{statusbar}->SetStatusText(L("Version ").$Slic3r::VERSION.L(" - Remember to check for updates at http://github.com/prusa3d/slic3r/releases")); - $self->SetStatusBar($self->{statusbar}); - - # Make the global status bar and its progress indicator available in C++ - $appController->set_global_progress_indicator( - $self->{statusbar}->{prog}->GetId(), - $self->{statusbar}->GetId(), - ); - - $appController->set_model($self->{plater}->{model}); - $appController->set_print($self->{plater}->{print}); - # Make the global status bar and its progress indicator available in C++ - $appController->set_global_progress_indicator( - $self->{statusbar}->{prog}->GetId(), - $self->{statusbar}->GetId(), - ); + $appController->set_global_progress_indicator($self->{statusbar}); $appController->set_model($self->{plater}->{model}); $appController->set_print($self->{plater}->{print}); diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index 1a769a87e..00267fe63 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -1656,7 +1656,9 @@ sub on_progress_event { my ($self, $percent, $message) = @_; $self->statusbar->SetProgress($percent); - $self->statusbar->SetStatusText("$messageā¦"); + # TODO: three dot character is not properly translated into C++ + # $self->statusbar->SetStatusText("$messageā¦"); + $self->statusbar->SetStatusText("$message..."); } # Called when the G-code export finishes, either successfully or with an error. diff --git a/lib/Slic3r/GUI/ProgressStatusBar.pm b/lib/Slic3r/GUI/ProgressStatusBar.pm index 32fd52680..edc0c0ce3 100644 --- a/lib/Slic3r/GUI/ProgressStatusBar.pm +++ b/lib/Slic3r/GUI/ProgressStatusBar.pm @@ -1,144 +1,18 @@ # Status bar at the bottom of the main screen. +# Now it just implements cancel cb on perl side, every other functionality is +# in C++ -package Slic3r::GUI::ProgressStatusBar; +package Slic3r::GUI::ProgressStatusBar; use strict; use warnings; -use Wx qw(:gauge :misc); -use base 'Wx::StatusBar'; - -sub new { - my $class = shift; - my $self = $class->SUPER::new(@_); - - $self->{busy} = 0; - $self->{timer} = Wx::Timer->new($self); - $self->{prog} = Wx::Gauge->new($self, wxGA_HORIZONTAL, 100, wxDefaultPosition, wxDefaultSize); - $self->{prog}->Hide; - $self->{cancelbutton} = Wx::Button->new($self, -1, "Cancel", wxDefaultPosition, wxDefaultSize); - $self->{cancelbutton}->Hide; - - $self->SetFieldsCount(3); - $self->SetStatusWidths(-1, 150, 155); - - Wx::Event::EVT_TIMER($self, \&OnTimer, $self->{timer}); - Wx::Event::EVT_SIZE($self, \&OnSize); - Wx::Event::EVT_BUTTON($self, $self->{cancelbutton}, sub { - $self->{cancel_cb}->(); - $self->{cancelbutton}->Hide; - }); - - return $self; -} - -sub DESTROY { - my $self = shift; - $self->{timer}->Stop if $self->{timer} && $self->{timer}->IsRunning; -} - -sub OnSize { - my ($self, $event) = @_; - - my %fields = ( - # 0 is reserved for status text - 1 => $self->{cancelbutton}, - 2 => $self->{prog}, - ); - - foreach (keys %fields) { - my $rect = $self->GetFieldRect($_); - my $offset = &Wx::wxGTK ? 1 : 0; # add a cosmetic 1 pixel offset on wxGTK - my $pos = [$rect->GetX + $offset, $rect->GetY + $offset]; - $fields{$_}->Move($pos); - $fields{$_}->SetSize($rect->GetWidth - $offset, $rect->GetHeight); - } - - $event->Skip; -} - -sub OnTimer { - my ($self, $event) = @_; - - if ($self->{prog}->IsShown) { - $self->{timer}->Stop; - } - $self->{prog}->Pulse if $self->{_busy}; -} +our $cancel_cb; sub SetCancelCallback { my $self = shift; my ($cb) = @_; - $self->{cancel_cb} = $cb; - $cb ? $self->{cancelbutton}->Show : $self->{cancelbutton}->Hide; -} - -sub Run { - my $self = shift; - my $rate = shift || 100; - if (!$self->{timer}->IsRunning) { - $self->{timer}->Start($rate); - } -} - -sub GetProgress { - my $self = shift; - return $self->{prog}->GetValue; -} - -sub SetProgress { - my $self = shift; - my ($val) = @_; - if (!$self->{prog}->IsShown) { - $self->ShowProgress(1); - } - if ($val == $self->{prog}->GetRange) { - $self->{prog}->SetValue(0); - $self->ShowProgress(0); - } else { - $self->{prog}->SetValue($val); - } -} - -sub SetRange { - my $self = shift; - my ($val) = @_; - - if ($val != $self->{prog}->GetRange) { - $self->{prog}->SetRange($val); - } -} - -sub ShowProgress { - my $self = shift; - my ($show) = @_; - - $self->{prog}->Show($show); - $self->{prog}->Pulse; -} - -sub StartBusy { - my $self = shift; - my $rate = shift || 100; - - $self->{_busy} = 1; - $self->ShowProgress(1); - if (!$self->{timer}->IsRunning) { - $self->{timer}->Start($rate); - } -} - -sub StopBusy { - my $self = shift; - - $self->{timer}->Stop; - $self->ShowProgress(0); - $self->{prog}->SetValue(0); - $self->{_busy} = 0; -} - -sub IsBusy { - my $self = shift; - return $self->{_busy}; + $cancel_cb = $cb; + $cb ? $self->ShowCancelButton : $self->HideCancelButton; } 1; |