2016-09-14 11:22:41 +02:00
# Preferences dialog, opens from Menu: File->Preferences
2013-01-02 20:30:48 +01:00
package Slic3r::GUI::Preferences ;
2014-06-14 19:59:59 +02:00
use Wx qw(:dialog :id :misc :sizer :systemsettings wxTheApp) ;
2013-01-02 20:30:48 +01:00
use Wx::Event qw(EVT_BUTTON EVT_TEXT_ENTER) ;
use base 'Wx::Dialog' ;
sub new {
2014-07-01 16:40:56 +02:00
my ( $class , $parent ) = @_ ;
2014-12-30 13:24:00 +01:00
my $self = $class -> SUPER:: new ( $parent , - 1 , "Preferences" , wxDefaultPosition , wxDefaultSize );
2014-07-01 16:40:56 +02:00
$self -> { values } = {};
2013-01-02 20:30:48 +01:00
2014-07-01 16:40:56 +02:00
my $optgroup ;
$optgroup = Slic3r::GUI::OptionsGroup -> new (
2013-01-02 20:30:48 +01:00
parent => $self ,
title => 'General' ,
2014-07-01 16:40:56 +02:00
on_change => sub {
my ( $opt_id ) = @_ ;
$self -> { values }{ $opt_id } = $optgroup -> get_value ( $opt_id );
},
2014-12-30 13:24:00 +01:00
label_width => 200 ,
2013-01-02 20:30:48 +01:00
);
2014-07-01 16:40:56 +02: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 13:24:00 +01:00
width => 100 ,
2014-07-01 16:40:56 +02: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 18:19:13 +02:00
tooltip => 'If this is enabled, Slic3r will auto-center objects around the print bed center.' ,
2014-07-01 16:40:56 +02: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 23:40:24 +02: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 },
));
2016-10-24 16:07:36 +02:00
$optgroup -> append_single_option_line ( Slic3r::GUI::OptionsGroup::Option -> new (
opt_id => 'no_defaults' ,
type => 'bool' ,
label => 'Suppress "- default -" presets' ,
tooltip => 'Suppress "- default -" presets in the Print / Filament / Printer selections once there are any other valid presets available.' ,
default => $ Slic3r::GUI:: Settings -> { _ }{ no_defaults },
));
2014-07-01 16:40:56 +02:00
2013-01-02 20:30:48 +01: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 15:49:20 +01:00
EVT_BUTTON ( $self , wxID_OK , sub { $self -> _accept });
2013-01-02 20:30:48 +01:00
$sizer -> Add ( $buttons , 0 , wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT , 10 );
$self -> SetSizer ( $sizer );
$sizer -> SetSizeHints ( $self );
return $self ;
}
2013-01-03 15:49:20 +01:00
sub _accept {
my $self = shift ;
2016-05-16 23:40:24 +02:00
if ( $self -> { values }{ mode } || defined ( $self -> { values }{ no_controller })) {
2013-01-03 15:49:20 +01: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 19:59:59 +02:00
wxTheApp -> save_settings ;
2013-11-11 22:02:12 +01:00
$self -> EndModal ( wxID_OK );
$self -> Close ; # needed on Linux
2016-10-25 13:24:42 +02:00
# Nothify the UI to update itself from the ini file.
wxTheApp -> update_ui_from_settings ;
2013-01-03 15:49:20 +01:00
}
2013-01-02 20:30:48 +01:00
1 ;