2016-09-14 09:22:41 +00:00
# Preferences dialog, opens from Menu: File->Preferences
2013-01-02 19:30:48 +00:00
package Slic3r::GUI::Preferences ;
2014-06-14 17:59:59 +00:00
use Wx qw( :dialog :id :misc :sizer :systemsettings wxTheApp ) ;
2013-01-02 19:30:48 +00:00
use Wx::Event qw( EVT_BUTTON EVT_TEXT_ENTER ) ;
use base 'Wx::Dialog' ;
sub new {
2014-07-01 14:40:56 +00:00
my ( $ class , $ parent ) = @ _ ;
2014-12-30 12:24:00 +00:00
my $ self = $ class - > SUPER:: new ( $ parent , - 1 , "Preferences" , wxDefaultPosition , wxDefaultSize ) ;
2014-07-01 14:40:56 +00:00
$ self - > { values } = { } ;
2013-01-02 19:30:48 +00:00
2014-07-01 14:40:56 +00:00
my $ optgroup ;
$ optgroup = Slic3r::GUI::OptionsGroup - > new (
2013-01-02 19:30:48 +00:00
parent = > $ self ,
title = > 'General' ,
2014-07-01 14:40:56 +00:00
on_change = > sub {
my ( $ opt_id ) = @ _ ;
$ self - > { values } { $ opt_id } = $ optgroup - > get_value ( $ opt_id ) ;
} ,
2014-12-30 12:24:00 +00:00
label_width = > 200 ,
2013-01-02 19:30:48 +00:00
) ;
2014-07-01 14:40:56 +00:00
$ optgroup - > append_single_option_line ( Slic3r::GUI::OptionsGroup::Option - > new (
opt_id = > 'mode' ,
type = > 'select' ,
label = > 'Mode' ,
tooltip = > 'Choose between a simpler, basic mode and an expert mode with more options and more complicated interface.' ,
labels = > [ 'Simple' , 'Expert' ] ,
values = > [ 'simple' , 'expert' ] ,
default = > $ Slic3r:: GUI:: Settings - > { _ } { mode } ,
2014-12-30 12:24:00 +00:00
width = > 100 ,
2014-07-01 14:40:56 +00:00
) ) ;
$ optgroup - > append_single_option_line ( Slic3r::GUI::OptionsGroup::Option - > new (
opt_id = > 'version_check' ,
type = > 'bool' ,
label = > 'Check for updates' ,
tooltip = > 'If this is enabled, Slic3r will check for updates daily and display a reminder if a newer version is available.' ,
default = > $ Slic3r:: GUI:: Settings - > { _ } { version_check } // 1 ,
readonly = > ! wxTheApp - > have_version_check ,
) ) ;
$ optgroup - > append_single_option_line ( Slic3r::GUI::OptionsGroup::Option - > new (
opt_id = > 'remember_output_path' ,
type = > 'bool' ,
label = > 'Remember output directory' ,
tooltip = > 'If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files.' ,
default = > $ Slic3r:: GUI:: Settings - > { _ } { remember_output_path } ,
) ) ;
$ optgroup - > append_single_option_line ( Slic3r::GUI::OptionsGroup::Option - > new (
opt_id = > 'autocenter' ,
type = > 'bool' ,
label = > 'Auto-center parts' ,
2014-07-01 16:19:13 +00:00
tooltip = > 'If this is enabled, Slic3r will auto-center objects around the print bed center.' ,
2014-07-01 14:40:56 +00:00
default = > $ Slic3r:: GUI:: Settings - > { _ } { autocenter } ,
) ) ;
$ optgroup - > append_single_option_line ( Slic3r::GUI::OptionsGroup::Option - > new (
opt_id = > 'background_processing' ,
type = > 'bool' ,
label = > 'Background processing' ,
tooltip = > 'If this is enabled, Slic3r will pre-process objects as soon as they\'re loaded in order to save time when exporting G-code.' ,
default = > $ Slic3r:: GUI:: Settings - > { _ } { background_processing } ,
readonly = > ! $ Slic3r:: have_threads ,
) ) ;
2016-05-16 21:40:24 +00:00
$ optgroup - > append_single_option_line ( Slic3r::GUI::OptionsGroup::Option - > new (
opt_id = > 'no_controller' ,
type = > 'bool' ,
label = > 'Disable USB/serial connection' ,
tooltip = > 'Disable communication with the printer over a serial / USB cable. This simplifies the user interface in case the printer is never attached to the computer.' ,
default = > $ Slic3r:: GUI:: Settings - > { _ } { no_controller } ,
) ) ;
2014-07-01 14:40:56 +00:00
2013-01-02 19:30:48 +00:00
my $ sizer = Wx::BoxSizer - > new ( wxVERTICAL ) ;
$ sizer - > Add ( $ optgroup - > sizer , 0 , wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT , 10 ) ;
my $ buttons = $ self - > CreateStdDialogButtonSizer ( wxOK | wxCANCEL ) ;
2013-01-03 14:49:20 +00:00
EVT_BUTTON ( $ self , wxID_OK , sub { $ self - > _accept } ) ;
2013-01-02 19:30:48 +00:00
$ sizer - > Add ( $ buttons , 0 , wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT , 10 ) ;
$ self - > SetSizer ( $ sizer ) ;
$ sizer - > SetSizeHints ( $ self ) ;
return $ self ;
}
2013-01-03 14:49:20 +00:00
sub _accept {
my $ self = shift ;
2016-05-16 21:40:24 +00:00
if ( $ self - > { values } { mode } || defined ( $ self - > { values } { no_controller } ) ) {
2013-01-03 14:49:20 +00:00
Slic3r::GUI:: warning_catcher ( $ self ) - > ( "You need to restart Slic3r to make the changes effective." ) ;
}
$ Slic3r:: GUI:: Settings - > { _ } { $ _ } = $ self - > { values } { $ _ } for keys % { $ self - > { values } } ;
2014-06-14 17:59:59 +00:00
wxTheApp - > save_settings ;
2013-11-11 21:02:12 +00:00
$ self - > EndModal ( wxID_OK ) ;
$ self - > Close ; # needed on Linux
2013-01-03 14:49:20 +00:00
}
2013-01-02 19:30:48 +00:00
1 ;