Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authortamasmeszaros <meszaros.q@gmail.com>2018-08-30 16:21:41 +0300
committertamasmeszaros <meszaros.q@gmail.com>2018-08-30 18:35:49 +0300
commit4f53fc2a5f2ed179f857398e9f9ff3fe5956e52f (patch)
treeea6a927058fc7e4fe2095b7a9f89ccd7c7df246d /lib
parent3750bd781eb2b48bc9ac6ac5acf8ce1bf99da0be (diff)
parentf5b1729af3e09ffc5ac64d2540227a0286cdb465 (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.pm1
-rw-r--r--lib/Slic3r/GUI/MainFrame.pm19
-rw-r--r--lib/Slic3r/GUI/Plater.pm4
-rw-r--r--lib/Slic3r/GUI/ProgressStatusBar.pm138
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;