Browse Source

Descriptive textual feedback for cooling settings

Alessandro Ranellucci 12 years ago
parent
commit
deea02b444
3 changed files with 75 additions and 6 deletions
  1. 1 1
      lib/Slic3r/Config.pm
  2. 35 4
      lib/Slic3r/GUI/OptionsGroup.pm
  3. 39 1
      lib/Slic3r/GUI/Tab.pm

+ 1 - 1
lib/Slic3r/Config.pm

@@ -698,7 +698,7 @@ END
         default => 100,
     },
     'bridge_fan_speed' => {
-        label   => 'Bridges',
+        label   => 'Bridges fan speed',
         tooltip => 'This fan speed is enforced during all bridges.',
         sidetext => '%',
         cli     => 'bridge-fan-speed=i',

+ 35 - 4
lib/Slic3r/GUI/OptionsGroup.pm

@@ -67,11 +67,19 @@ sub BUILD {
     $grid_sizer->SetFlexibleDirection(wxHORIZONTAL);
     $grid_sizer->AddGrowableCol($self->no_labels ? 0 : 1);
     
-    $self->{sidetext_font} = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-    $self->_build_line($_, $grid_sizer) for @{$self->lines};
-    
     # TODO: border size may be related to wxWidgets 2.8.x vs. 2.9.x instead of wxMAC specific
     $self->sizer->Add($grid_sizer, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 5);
+    
+    $self->{sidetext_font} = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+    
+    foreach my $line (@{$self->lines}) {
+        if ($line->{widget}) {
+            my $window = $line->{widget}->GetWindow($self->parent);
+            $self->sizer->Add($window, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 15);
+        } else {
+            $self->_build_line($line, $grid_sizer);
+        }
+    }
 }
 
 # default behavior: one option per line
@@ -107,7 +115,7 @@ sub _build_line {
     
     my $label;
     if (!$self->no_labels) {
-        $label = Wx::StaticText->new($self->parent, -1, "$line->{label}:", wxDefaultPosition, [$self->label_width, -1]);
+        $label = Wx::StaticText->new($self->parent, -1, $line->{label} ? "$line->{label}:" : "", wxDefaultPosition, [$self->label_width, -1]);
         $label->Wrap($self->label_width) ;  # needed to avoid Linux/GTK bug
         $grid_sizer->Add($label, 0, wxALIGN_CENTER_VERTICAL, 0);
         $label->SetToolTipString($line->{tooltip}) if $line->{tooltip};
@@ -363,4 +371,27 @@ sub _config_methods {
         : qw(get 0);
 }
 
+package Slic3r::GUI::OptionsGroup::StaticTextLine;
+use Moo;
+use Wx qw(:misc :systemsettings);
+
+sub GetWindow {
+    my $self = shift;
+    my ($parent) = @_;
+    
+    $self->{statictext} = Wx::StaticText->new($parent, -1, "foo", wxDefaultPosition, wxDefaultSize);
+    my $font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+    $self->{statictext}->SetFont($font);
+    return $self->{statictext};
+}
+
+sub SetText {
+    my $self = shift;
+    my ($value) = @_;
+    
+    $self->{statictext}->SetLabel($value);
+    $self->{statictext}->Wrap(400);
+    $self->{statictext}->GetParent->Layout;
+}
+
 1;

+ 39 - 1
lib/Slic3r/GUI/Tab.pm

@@ -541,6 +541,13 @@ sub build {
         {
             title => 'Enable',
             options => [qw(cooling)],
+            lines => [
+                Slic3r::GUI::OptionsGroup->single_option_line('cooling'),
+                {
+                    label => '',
+                    widget => ($self->{description_line} = Slic3r::GUI::OptionsGroup::StaticTextLine->new),
+                },
+            ],
         },
         {
             title => 'Fan settings',
@@ -548,8 +555,9 @@ sub build {
             lines => [
                 {
                     label   => 'Fan speed',
-                    options => [qw(min_fan_speed max_fan_speed bridge_fan_speed)],
+                    options => [qw(min_fan_speed max_fan_speed)],
                 },
+                Slic3r::GUI::OptionsGroup->single_option_line('bridge_fan_speed'),
                 Slic3r::GUI::OptionsGroup->single_option_line('disable_fan_first_layers'),
                 Slic3r::GUI::OptionsGroup->single_option_line('fan_always_on'),
             ],
@@ -562,6 +570,36 @@ sub build {
     ]);
 }
 
+sub _update_description {
+    my $self = shift;
+    
+    my $config = $self->config;
+    
+    my $msg = "";
+    if ($config->cooling) {
+        $msg = sprintf "If estimated layer time is below ~%ds, fan will run at 100%% and print speed will be reduced so that no less than %ds are spent on that layer (however, speed will never be reduced below %dmm/s).",
+            $config->slowdown_below_layer_time, $config->slowdown_below_layer_time, $config->min_print_speed;
+        if ($config->fan_below_layer_time > $config->slowdown_below_layer_time) {
+            $msg .= sprintf "\nIf estimated layer time is greater, but still below ~%ds, fan will run at a proportionally decreasing speed between %d%% and %d%%.",
+                $config->fan_below_layer_time, $config->max_fan_speed, $config->min_fan_speed;
+        }
+        if ($config->fan_always_on) {
+            $msg .= sprintf "\nDuring the other layers, fan will always run at %d%%.", $config->min_fan_speed;
+        } else {
+            $msg .= "\nDuring the other layers, fan will be turned off."
+        }
+    }
+    $self->{description_line}->SetText($msg);
+}
+
+sub on_value_change {
+    my $self = shift;
+    my ($opt_key) = @_;
+    $self->SUPER::on_value_change(@_);
+    
+    $self->_update_description;
+}
+
 package Slic3r::GUI::Tab::Printer;
 use base 'Slic3r::GUI::Tab';