2018-02-23 13:55:27 +00:00
# include "Preferences.hpp"
# include "AppConfig.hpp"
# include "OptionsGroup.hpp"
2018-11-26 13:41:58 +00:00
# include "I18N.hpp"
2018-02-23 13:55:27 +00:00
namespace Slic3r {
namespace GUI {
2018-10-02 11:23:38 +00:00
PreferencesDialog : : PreferencesDialog ( wxWindow * parent ) :
2019-04-18 00:03:40 +00:00
DPIDialog ( parent , wxID_ANY , _ ( L ( " Preferences " ) ) , wxDefaultPosition ,
2019-04-25 13:06:44 +00:00
wxDefaultSize , wxDEFAULT_DIALOG_STYLE )
2019-04-18 00:03:40 +00:00
{
2018-10-02 11:23:38 +00:00
build ( ) ;
}
2018-05-02 11:20:36 +00:00
2018-02-23 13:55:27 +00:00
void PreferencesDialog : : build ( )
{
auto app_config = get_app_config ( ) ;
m_optgroup = std : : make_shared < ConfigOptionsGroup > ( this , _ ( L ( " General " ) ) ) ;
2019-04-18 00:03:40 +00:00
m_optgroup - > label_width = 40 ;
2018-02-23 13:55:27 +00:00
m_optgroup - > m_on_change = [ this ] ( t_config_option_key opt_key , boost : : any value ) {
m_values [ opt_key ] = boost : : any_cast < bool > ( value ) ? " 1 " : " 0 " ;
} ;
2018-03-13 11:39:57 +00:00
// TODO
2018-02-23 13:55:27 +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 = > $app_config->get("version_check") // 1,
// readonly = > !wxTheApp->have_version_check,
// ));
ConfigOptionDef def ;
def . label = L ( " Remember output directory " ) ;
def . type = coBool ;
def . tooltip = L ( " If this is enabled, Slic3r will prompt the last output directory "
" instead of the one containing the input files. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > has ( " remember_output_path " ) ? app_config - > get ( " remember_output_path " ) = = " 1 " : true } ) ;
2018-05-21 09:50:48 +00:00
Option option ( def , " remember_output_path " ) ;
2018-02-23 13:55:27 +00:00
m_optgroup - > append_single_option_line ( option ) ;
def . label = L ( " Auto-center parts " ) ;
def . type = coBool ;
def . tooltip = L ( " If this is enabled, Slic3r will auto-center objects "
" around the print bed center. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > get ( " autocenter " ) = = " 1 " } ) ;
2018-02-23 13:55:27 +00:00
option = Option ( def , " autocenter " ) ;
m_optgroup - > append_single_option_line ( option ) ;
def . label = L ( " Background processing " ) ;
def . type = coBool ;
def . tooltip = L ( " If this is enabled, Slic3r will pre-process objects as soon "
" as they \' re loaded in order to save time when exporting G-code. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > get ( " background_processing " ) = = " 1 " } ) ;
2018-02-23 13:55:27 +00:00
option = Option ( def , " background_processing " ) ;
m_optgroup - > append_single_option_line ( option ) ;
2018-04-18 10:33:07 +00:00
// Please keep in sync with ConfigWizard
def . label = L ( " Check for application updates " ) ;
def . type = coBool ;
2019-05-13 08:05:59 +00:00
def . tooltip = L ( " If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool ( app_config - > get ( " version_check " ) = = " 1 " ) ) ;
2018-04-18 10:33:07 +00:00
option = Option ( def , " version_check " ) ;
m_optgroup - > append_single_option_line ( option ) ;
// Please keep in sync with ConfigWizard
def . label = L ( " Update built-in Presets automatically " ) ;
def . type = coBool ;
def . tooltip = L ( " If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool ( app_config - > get ( " preset_update " ) = = " 1 " ) ) ;
2018-04-18 10:33:07 +00:00
option = Option ( def , " preset_update " ) ;
m_optgroup - > append_single_option_line ( option ) ;
2018-02-23 13:55:27 +00:00
def . label = L ( " Suppress \" - default - \" presets " ) ;
def . type = coBool ;
def . tooltip = L ( " Suppress \" - default - \" presets in the Print / Filament / Printer "
" selections once there are any other valid presets available. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > get ( " no_defaults " ) = = " 1 " } ) ;
2018-02-23 13:55:27 +00:00
option = Option ( def , " no_defaults " ) ;
m_optgroup - > append_single_option_line ( option ) ;
def . label = L ( " Show incompatible print and filament presets " ) ;
def . type = coBool ;
def . tooltip = L ( " When checked, the print and filament presets are shown in the preset editor "
" even if they are marked as incompatible with the active printer " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > get ( " show_incompatible_presets " ) = = " 1 " } ) ;
2018-02-23 13:55:27 +00:00
option = Option ( def , " show_incompatible_presets " ) ;
m_optgroup - > append_single_option_line ( option ) ;
2019-01-24 10:30:29 +00:00
// TODO: remove?
2018-02-23 13:55:27 +00:00
def . label = L ( " Use legacy OpenGL 1.1 rendering " ) ;
def . type = coBool ;
def . tooltip = L ( " If you have rendering issues caused by a buggy OpenGL 2.0 driver, "
" you may try to check this checkbox. This will disable the layer height "
" editing and anti aliasing, so it is likely better to upgrade your graphics driver. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > get ( " use_legacy_opengl " ) = = " 1 " } ) ;
2018-02-23 13:55:27 +00:00
option = Option ( def , " use_legacy_opengl " ) ;
m_optgroup - > append_single_option_line ( option ) ;
2019-01-24 10:30:29 +00:00
# if __APPLE__
def . label = L ( " Use Retina resolution for the 3D scene " ) ;
def . type = coBool ;
def . tooltip = L ( " If enabled, the 3D scene will be rendered in Retina resolution. "
" If you are experiencing 3D performance problems, disabling this option may help. " ) ;
2019-05-03 16:01:39 +00:00
def . set_default_value ( new ConfigOptionBool { app_config - > get ( " use_retina_opengl " ) = = " 1 " } ) ;
2019-01-24 10:30:29 +00:00
option = Option ( def , " use_retina_opengl " ) ;
m_optgroup - > append_single_option_line ( option ) ;
# endif
2018-02-23 13:55:27 +00:00
auto sizer = new wxBoxSizer ( wxVERTICAL ) ;
sizer - > Add ( m_optgroup - > sizer , 0 , wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT , 10 ) ;
2019-04-13 21:46:52 +00:00
SetFont ( wxGetApp ( ) . normal_font ( ) ) ;
2018-02-23 13:55:27 +00:00
auto buttons = CreateStdDialogButtonSizer ( wxOK | wxCANCEL ) ;
wxButton * btn = static_cast < wxButton * > ( FindWindowById ( wxID_OK , this ) ) ;
btn - > Bind ( wxEVT_BUTTON , [ this ] ( wxCommandEvent & ) { accept ( ) ; } ) ;
sizer - > Add ( buttons , 0 , wxALIGN_CENTER_HORIZONTAL | wxBOTTOM , 10 ) ;
SetSizer ( sizer ) ;
sizer - > SetSizeHints ( this ) ;
}
void PreferencesDialog : : accept ( )
{
2019-01-24 10:30:29 +00:00
if ( m_values . find ( " no_defaults " ) ! = m_values . end ( ) | |
2019-01-24 12:16:46 +00:00
m_values . find ( " use_legacy_opengl " ) ! = m_values . end ( ) ) {
2019-04-26 08:52:38 +00:00
warning_catcher ( this , wxString : : Format ( _ ( L ( " You need to restart %s to make the changes effective. " ) ) , SLIC3R_APP_NAME ) ) ;
2018-02-23 13:55:27 +00:00
}
auto app_config = get_app_config ( ) ;
for ( std : : map < std : : string , std : : string > : : iterator it = m_values . begin ( ) ; it ! = m_values . end ( ) ; + + it ) {
app_config - > set ( it - > first , it - > second ) ;
}
EndModal ( wxID_OK ) ;
// Nothify the UI to update itself from the ini file.
2018-10-02 11:23:38 +00:00
wxGetApp ( ) . update_ui_from_settings ( ) ;
2018-02-23 13:55:27 +00:00
}
2019-04-18 00:03:40 +00:00
void PreferencesDialog : : on_dpi_changed ( const wxRect & suggested_rect )
{
2019-04-24 23:45:00 +00:00
m_optgroup - > msw_rescale ( ) ;
2019-04-18 00:03:40 +00:00
2019-04-25 13:06:44 +00:00
const int em = em_unit ( ) ;
msw_buttons_rescale ( this , em , { wxID_OK , wxID_CANCEL } ) ;
const wxSize & size = wxSize ( 47 * em , 28 * em ) ;
2019-04-18 00:03:40 +00:00
SetMinSize ( size ) ;
2019-04-25 13:06:44 +00:00
Fit ( ) ;
2019-04-18 00:03:40 +00:00
Refresh ( ) ;
}
2018-02-23 13:55:27 +00:00
} // GUI
} // Slic3r