From f38f2f139ee11642a1e922da1a27ff7adbda4fce Mon Sep 17 00:00:00 2001
From: Alessandro Ranellucci <aar@cpan.org>
Date: Mon, 18 Jun 2012 11:26:21 +0200
Subject: [PATCH] Make window resizable

---
 lib/Slic3r/Config.pm           | 14 ++++++++------
 lib/Slic3r/GUI.pm              |  8 ++------
 lib/Slic3r/GUI/OptionsGroup.pm |  6 ++++--
 lib/Slic3r/GUI/Plater.pm       |  2 +-
 lib/Slic3r/GUI/SkeinPanel.pm   |  2 +-
 lib/Slic3r/GUI/Tab.pm          | 17 ++++++++++-------
 6 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/lib/Slic3r/Config.pm b/lib/Slic3r/Config.pm
index 2a413b5f3..c9a4647b2 100644
--- a/lib/Slic3r/Config.pm
+++ b/lib/Slic3r/Config.pm
@@ -16,7 +16,7 @@ our $Options = {
         cli     => 'notes=s',
         type    => 's',
         multiline => 1,
-        width   => 450,
+        full_width => 1,
         height  => 130,
         serialize   => sub { join '\n', split /\R/, $_[0] },
         deserialize => sub { join "\n", split /\\n/, $_[0] },
@@ -33,7 +33,7 @@ our $Options = {
         label   => 'Output filename format',
         cli     => 'output-filename-format=s',
         type    => 's',
-        width   => 300,
+        full_width => 1,
     },
 
     # printer options
@@ -319,7 +319,7 @@ our $Options = {
         cli     => 'start-gcode=s',
         type    => 's',
         multiline => 1,
-        width   => 350,
+        full_width => 1,
         height  => 120,
         serialize   => sub { join '\n', split /\R+/, $_[0] },
         deserialize => sub { join "\n", split /\\n/, $_[0] },
@@ -329,7 +329,7 @@ our $Options = {
         cli     => 'end-gcode=s',
         type    => 's',
         multiline => 1,
-        width   => 350,
+        full_width => 1,
         height  => 120,
         serialize   => sub { join '\n', split /\R+/, $_[0] },
         deserialize => sub { join "\n", split /\\n/, $_[0] },
@@ -339,7 +339,7 @@ our $Options = {
         cli     => 'layer-gcode=s',
         type    => 's',
         multiline => 1,
-        width   => 350,
+        full_width => 1,
         height  => 50,
         serialize   => sub { join '\n', split /\R+/, $_[0] },
         deserialize => sub { join "\n", split /\\n/, $_[0] },
@@ -349,7 +349,7 @@ our $Options = {
         cli     => 'post-process=s@',
         type    => 's@',
         multiline => 1,
-        width   => 350,
+        full_width => 1,
         height  => 60,
         serialize   => sub { join '; ', @{$_[0]} },
         deserialize => sub { [ split /\s*;\s*/, $_[0] ] },
@@ -416,12 +416,14 @@ our $Options = {
         sidetext => 'approximate seconds',
         cli     => 'fan-below-layer-time=i',
         type    => 'i',
+        width   => 60,
     },
     'slowdown_below_layer_time' => {
         label   => 'Slow down if layer print time is below',
         sidetext => 'approximate seconds',
         cli     => 'slowdown-below-layer-time=i',
         type    => 'i',
+        width   => 60,
     },
     'min_print_speed' => {
         label   => 'Min print speed',
diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm
index b6c4c6510..90eac2132 100644
--- a/lib/Slic3r/GUI.pm
+++ b/lib/Slic3r/GUI.pm
@@ -21,14 +21,11 @@ sub OnInit {
     $self->SetAppName('Slic3r');
     Slic3r::debugf "wxWidgets version %s\n", &Wx::wxVERSION_STRING;
     
-    my $frame = Wx::Frame->new( undef, -1, 'Slic3r', [-1, -1], Wx::wxDefaultSize,
-         wxDEFAULT_FRAME_STYLE ^ (wxRESIZE_BORDER | wxMAXIMIZE_BOX) );
+    my $frame = Wx::Frame->new(undef, -1, 'Slic3r', [-1, -1], [760,500], wxDEFAULT_FRAME_STYLE);
     Wx::Image::AddHandler(Wx::PNGHandler->new);
     $frame->SetIcon(Wx::Icon->new("$Slic3r::var/Slic3r_128px.png", &Wx::wxBITMAP_TYPE_PNG) );
     
     my $panel = Slic3r::GUI::SkeinPanel->new($frame);
-    my $box = Wx::BoxSizer->new(wxVERTICAL);
-    $box->Add($panel, 0);
     
     if (eval "use Growl::GNTP; 1") {
         # register growl notifications
@@ -75,8 +72,7 @@ sub OnInit {
     # will not be handled correctly
     $frame->SetMenuBar($menubar);
     
-    $box->SetSizeHints($frame);
-    $frame->SetSizer($box);
+    $frame->SetMinSize($frame->GetSize);
     $frame->Show;
     $frame->Layout;
     
diff --git a/lib/Slic3r/GUI/OptionsGroup.pm b/lib/Slic3r/GUI/OptionsGroup.pm
index a2398e8df..caf9956a0 100644
--- a/lib/Slic3r/GUI/OptionsGroup.pm
+++ b/lib/Slic3r/GUI/OptionsGroup.pm
@@ -19,7 +19,9 @@ sub new {
     my $self = $class->SUPER::new($box, wxVERTICAL);
     
     my $grid_sizer = Wx::FlexGridSizer->new(scalar(@{$p{options}}), 2, ($p{no_labels} ? 1 : 2), 0);
-
+    $grid_sizer->SetFlexibleDirection(&Wx::wxHORIZONTAL);
+    $grid_sizer->AddGrowableCol($p{no_labels} ? 0 : 1);
+    
     # grab the default font, to fix Windows font issues/keep things consistent
     my $bold_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
     $bold_font->SetWeight(&Wx::wxFONTWEIGHT_BOLD);
@@ -101,7 +103,7 @@ sub new {
             $sizer->Add($sidetext, 0, &Wx::wxLEFT, 4);
             $grid_sizer->Add($sizer);
         } else {
-            $grid_sizer->Add($field);
+            $grid_sizer->Add($field, 0, $opt->{full_width} ? &Wx::wxEXPAND : 0);
         }
         $fields{$opt_key} ||= [$field];
     }
diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm
index c9d460f30..42611295b 100644
--- a/lib/Slic3r/GUI/Plater.pm
+++ b/lib/Slic3r/GUI/Plater.pm
@@ -49,7 +49,7 @@ sub new {
     $self->{list} = Wx::ListView->new($self, -1, [-1, -1], [-1, 180], &Wx::wxLC_SINGLE_SEL | &Wx::wxLC_REPORT | &Wx::wxBORDER_DEFAULT);
     $self->{list}->InsertColumn(0, "Name", &Wx::wxLIST_FORMAT_LEFT, 300);
     $self->{list}->InsertColumn(1, "Copies", &Wx::wxLIST_FORMAT_CENTER, 50);
-    $self->{list}->InsertColumn(2, "Scale", &Wx::wxLIST_FORMAT_CENTER, 50);
+    $self->{list}->InsertColumn(2, "Scale", &Wx::wxLIST_FORMAT_CENTER, &Wx::wxLIST_AUTOSIZE_USEHEADER);
     EVT_LIST_ITEM_SELECTED($self, $self->{list}, \&list_item_selected);
     EVT_LIST_ITEM_DESELECTED($self, $self->{list}, \&list_item_deselected);
     
diff --git a/lib/Slic3r/GUI/SkeinPanel.pm b/lib/Slic3r/GUI/SkeinPanel.pm
index d60402ad5..83873d44f 100644
--- a/lib/Slic3r/GUI/SkeinPanel.pm
+++ b/lib/Slic3r/GUI/SkeinPanel.pm
@@ -66,7 +66,7 @@ sub new {
     
     my $sizer = Wx::BoxSizer->new(wxVERTICAL);
     $sizer->Add($buttons_sizer, 0, wxEXPAND | wxALL, 10);
-    $sizer->Add($tabpanel);
+    $sizer->Add($tabpanel, 1, wxEXPAND);
     
     $sizer->SetSizeHints($self);
     $self->SetSizer($sizer);
diff --git a/lib/Slic3r/GUI/Tab.pm b/lib/Slic3r/GUI/Tab.pm
index 4582a5638..70dc33de3 100644
--- a/lib/Slic3r/GUI/Tab.pm
+++ b/lib/Slic3r/GUI/Tab.pm
@@ -101,6 +101,7 @@ sub new {
         },
         {
             title => 'Cooling thresholds',
+            label_width => 250,
             options => [qw(fan_below_layer_time slowdown_below_layer_time min_print_speed)],
         },
     ]);
@@ -132,11 +133,7 @@ sub new {
         {
             title => 'Post-processing scripts',
             no_labels => 1,
-            options => [qw(post_process)],  # this is not the right place for duplicate_distance
-        },
-        {
-            title => 'Other',
-            options => [qw(duplicate_distance)],  # this is not the right place for duplicate_distance
+            options => [qw(post_process)],
         },
     ]);
     
@@ -149,6 +146,10 @@ sub new {
             title => 'Flow',
             options => [qw(bridge_flow_ratio)],
         },
+        {
+            title => 'Other',
+            options => [qw(duplicate_distance)],
+        },
     ]);
     
     return $self;
@@ -227,13 +228,15 @@ package Slic3r::GUI::Tab::Page;
 
 use Wx qw(:sizer :progressdialog);
 use Wx::Event qw();
-use base 'Wx::Panel';
+use base 'Wx::ScrolledWindow';
 
 sub new {
     my $class = shift;
     my ($parent, %params) = @_;
     my $self = $class->SUPER::new($parent, -1);
     
+    $self->SetScrollbars(1, 1, 1, 1);
+    
     $self->{vsizer} = Wx::BoxSizer->new(&Wx::wxVERTICAL);
     $self->SetSizer($self->{vsizer});
     
@@ -247,7 +250,7 @@ sub new {
 sub append_optgroup {
     my $self = shift;
     
-    my $optgroup = Slic3r::GUI::OptionsGroup->new($self, @_, label_width => 200);
+    my $optgroup = Slic3r::GUI::OptionsGroup->new($self, label_width => 200, @_);
     $self->{vsizer}->Add($optgroup, 0, wxEXPAND | wxALL, 5);
 }