14PANEL_COMMON_SETTINGS_BASE::PANEL_COMMON_SETTINGS_BASE( wxWindow* parent, wxWindowID 
id, 
const wxPoint& pos, 
const wxSize& size, 
long style, 
const wxString& 
name ) : 
RESETTABLE_PANEL( parent, id, pos, size, style, 
name )
 
   16    wxBoxSizer* bPanelSizer;
 
   17    bPanelSizer = 
new wxBoxSizer( wxHORIZONTAL );
 
   21    m_staticText20 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Rendering Engine"), wxDefaultPosition, wxDefaultSize, 0 );
 
   25    m_staticline3 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
   35    m_rbAccelerated = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Accelerated Graphics"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
 
   36    m_rbAccelerated->SetToolTip( 
_(
"Hardware-accelerated graphics (recommended)") );
 
   40    m_rbFallback = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Fallback Graphics"), wxDefaultPosition, wxDefaultSize, 0 );
 
   41    m_rbFallback->SetToolTip( 
_(
"Software graphics (for computers which do not support KiCad's hardware acceleration requirements)") );
 
   51    wxGridBagSizer* gbSizer11;
 
   52    gbSizer11 = 
new wxGridBagSizer( 0, 6 );
 
   53    gbSizer11->SetFlexibleDirection( wxBOTH );
 
   54    gbSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
   55    gbSizer11->SetEmptyCellSize( wxSize( -1,2 ) );
 
   57    wxStaticText* antialiasingLabel;
 
   58    antialiasingLabel = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Antialiasing:"), wxDefaultPosition, wxDefaultSize, 0 );
 
   59    antialiasingLabel->Wrap( -1 );
 
   60    gbSizer11->Add( antialiasingLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
   62    wxString m_antialiasingChoices[] = { 
_(
"No Antialiasing"), 
_(
"Fast Antialiasing"), 
_(
"High Quality Antialiasing") };
 
   63    int m_antialiasingNChoices = 
sizeof( m_antialiasingChoices ) / 
sizeof( wxString );
 
   64    m_antialiasing = 
new wxChoice( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_antialiasingNChoices, m_antialiasingChoices, 0 );
 
   66    gbSizer11->Add( 
m_antialiasing, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
   69    gbSizer11->AddGrowableCol( 1 );
 
   73    wxBoxSizer* bAntialiasingSizer;
 
   74    bAntialiasingSizer = 
new wxBoxSizer( wxVERTICAL );
 
   77    bLeftSizer->Add( bAntialiasingSizer, 0, wxTOP|wxLEFT|wxEXPAND, 5 );
 
   82    m_staticText21 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Helper Applications"), wxDefaultPosition, wxDefaultSize, 0 );
 
   86    m_staticline2 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
   89    wxBoxSizer* bHelperAppsSizer;
 
   90    bHelperAppsSizer = 
new wxBoxSizer( wxVERTICAL );
 
   93    bSizer61 = 
new wxBoxSizer( wxHORIZONTAL );
 
   95    wxStaticText* textEditorLabel;
 
   96    textEditorLabel = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Text editor:"), wxDefaultPosition, wxDefaultSize, 0 );
 
   97    textEditorLabel->Wrap( -1 );
 
   98    bSizer61->Add( textEditorLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
  100    m_textEditorPath = 
new wxTextCtrl( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  107    bHelperAppsSizer->Add( bSizer61, 0, wxTOP|wxRIGHT|wxEXPAND, 5 );
 
  110    bHelperAppsSizer->Add( 0, 4, 0, wxEXPAND, 5 );
 
  114    m_staticTextFileManager = 
new wxStaticText( 
this, wxID_ANY, 
_(
"File manager:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  118    m_textCtrlFileManager = 
new wxTextCtrl( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  125    bHelperAppsSizer->Add( 0, 12, 1, wxEXPAND, 5 );
 
  128    bSizer8 = 
new wxBoxSizer( wxVERTICAL );
 
  130    m_defaultPDFViewer = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"System default PDF viewer"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
 
  134    bHelperAppsSizer->Add( bSizer8, 0, wxBOTTOM|wxEXPAND, 2 );
 
  137    bSizer7 = 
new wxBoxSizer( wxHORIZONTAL );
 
  139    m_otherPDFViewer = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Other:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  140    bSizer7->Add( 
m_otherPDFViewer, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
  142    m_PDFViewerPath = 
new wxTextCtrl( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  149    bHelperAppsSizer->Add( bSizer7, 0, wxBOTTOM|wxRIGHT|wxEXPAND, 5 );
 
  152    bLeftSizer->Add( bHelperAppsSizer, 0, wxTOP|wxLEFT|wxEXPAND, 5 );
 
  157    m_staticText22 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"User Interface"), wxDefaultPosition, wxDefaultSize, 0 );
 
  161    m_staticline1 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  164    wxBoxSizer* bUserInterfaceSizer;
 
  165    bUserInterfaceSizer = 
new wxBoxSizer( wxVERTICAL );
 
  167    wxBoxSizer* bSizer14;
 
  168    bSizer14 = 
new wxBoxSizer( wxVERTICAL );
 
  170    m_checkBoxIconsInMenus = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Show icons in menus"), wxDefaultPosition, wxDefaultSize, 0 );
 
  173    m_showScrollbars = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Show scrollbars in editors"), wxDefaultPosition, wxDefaultSize, 0 );
 
  175    m_showScrollbars->SetToolTip( 
_(
"This change takes effect when relaunching the editor.") );
 
  179    m_focusFollowSchPcb = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Focus follows mouse between schematic and PCB editors"), wxDefaultPosition, wxDefaultSize, 0 );
 
  180    m_focusFollowSchPcb->SetToolTip( 
_(
"If the mouse cursor is moved over the canvas of a schematic or PCB editor window, that window is raised.") );
 
  184    m_hotkeyFeedback = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Show popup indicator when toggling settings with hotkeys"), wxDefaultPosition, wxDefaultSize, 0 );
 
  185    m_hotkeyFeedback->SetToolTip( 
_(
"When enabled, certain hotkeys that cycle between settings will show a popup indicator briefly to indicate the change in settings.") );
 
  189    m_gridStriping = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Use alternating row colors in tables"), wxDefaultPosition, wxDefaultSize, 0 );
 
  190    m_gridStriping->SetToolTip( 
_(
"When enabled, use a different color for every other table row") );
 
  195    bUserInterfaceSizer->Add( bSizer14, 0, wxEXPAND, 5 );
 
  197    m_disableCustomCursors = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Disable custom cursors"), wxDefaultPosition, wxDefaultSize, 0 );
 
  198    m_disableCustomCursors->SetToolTip( 
_(
"When enabled, KiCad will use default system cursors instead of custom ones") );
 
  202    wxBoxSizer* bSizerIconsTheme;
 
  203    bSizerIconsTheme = 
new wxBoxSizer( wxHORIZONTAL );
 
  205    m_stIconTheme = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Icon theme:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  209    m_rbIconThemeLight = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Light"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
 
  214    m_rbIconThemeDark = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Dark"), wxDefaultPosition, wxDefaultSize, 0 );
 
  219    m_rbIconThemeAuto = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Automatic"), wxDefaultPosition, wxDefaultSize, 0 );
 
  221    m_rbIconThemeAuto->SetToolTip( 
_(
"Automatically choose light or dark icons based on the system color theme") );
 
  226    bUserInterfaceSizer->Add( bSizerIconsTheme, 0, wxEXPAND|wxTOP, 5 );
 
  228    wxBoxSizer* bSizerToolbarSize;
 
  229    bSizerToolbarSize = 
new wxBoxSizer( wxHORIZONTAL );
 
  231    m_stToolbarIconSize = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Toolbar icon size:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  235    m_rbIconSizeSmall = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Small"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
 
  240    m_rbIconSizeNormal = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Normal"), wxDefaultPosition, wxDefaultSize, 0 );
 
  245    m_rbIconSizeLarge = 
new wxRadioButton( 
this, wxID_ANY, 
_(
"Large"), wxDefaultPosition, wxDefaultSize, 0 );
 
  251    bUserInterfaceSizer->Add( bSizerToolbarSize, 0, wxEXPAND, 5 );
 
  253    m_scaleFonts = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Apply icon scaling to fonts"), wxDefaultPosition, wxDefaultSize, 0 );
 
  254    bUserInterfaceSizer->Add( 
m_scaleFonts, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
 
  256    m_fontScalingHelp = 
new wxStaticText( 
this, wxID_ANY, 
_(
"(This workaround will improve some GTK HiDPI font scaling issues.)"), wxDefaultPosition, wxDefaultSize, 0 );
 
  264    m_staticTextCanvasScale = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Canvas scale:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  268    m_canvasScaleCtrl = 
new wxSpinCtrlDouble( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 0, 1 );
 
  272    m_canvasScaleAuto = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Automatic"), wxDefaultPosition, wxDefaultSize, 0 );
 
  276    bUserInterfaceSizer->Add( 
m_gbUserInterface, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
 
  278    wxBoxSizer* bSizerHighContrast;
 
  279    bSizerHighContrast = 
new wxBoxSizer( wxHORIZONTAL );
 
  281    m_highContrastLabel = 
new wxStaticText( 
this, wxID_ANY, 
_(
"High-contrast mode dimming factor:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  283    bSizerHighContrast->Add( 
m_highContrastLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
  285    m_highContrastCtrl = 
new wxTextCtrl( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  288    m_highContrastUnits = 
new wxStaticText( 
this, wxID_ANY, 
_(
"%"), wxDefaultPosition, wxDefaultSize, 0 );
 
  290    bSizerHighContrast->Add( 
m_highContrastUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
  293    bUserInterfaceSizer->Add( bSizerHighContrast, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
 
  296    bLeftSizer->Add( bUserInterfaceSizer, 0, wxTOP|wxLEFT|wxEXPAND, 5 );
 
  301    m_staticText251 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Scaling"), wxDefaultPosition, wxDefaultSize, 0 );
 
  305    m_staticline7 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  309    bPanelSizer->Add( 
bLeftSizer, 0, wxRIGHT, 35 );
 
  311    wxBoxSizer* rightSizer;
 
  312    rightSizer = 
new wxBoxSizer( wxVERTICAL );
 
  314    m_staticText23 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Editing"), wxDefaultPosition, wxDefaultSize, 0 );
 
  316    rightSizer->Add( 
m_staticText23, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 13 );
 
  318    m_staticline6 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  319    rightSizer->Add( 
m_staticline6, 0, wxEXPAND|wxTOP|wxBOTTOM, 2 );
 
  321    wxBoxSizer* bEditingSizer;
 
  322    bEditingSizer = 
new wxBoxSizer( wxVERTICAL );
 
  324    m_warpMouseOnMove = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Warp mouse to anchor of moved object"), wxDefaultPosition, wxDefaultSize, 0 );
 
  328    m_NonImmediateActions = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"First hotkey selects tool"), wxDefaultPosition, wxDefaultSize, 0 );
 
  329    m_NonImmediateActions->SetToolTip( 
_(
"If not checked, hotkeys will immediately perform an action even if the relevant tool was not previously selected.") );
 
  334    rightSizer->Add( bEditingSizer, 0, wxEXPAND|wxTOP|wxLEFT, 5 );
 
  337    rightSizer->Add( 0, 15, 0, wxEXPAND, 5 );
 
  339    m_staticText24 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Session"), wxDefaultPosition, wxDefaultSize, 0 );
 
  341    rightSizer->Add( 
m_staticText24, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 13 );
 
  343    m_staticline5 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  344    rightSizer->Add( 
m_staticline5, 0, wxEXPAND|wxTOP|wxBOTTOM, 2 );
 
  346    wxBoxSizer* bSessionSizer;
 
  347    bSessionSizer = 
new wxBoxSizer( wxVERTICAL );
 
  349    m_cbRememberOpenFiles = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Remember open files for next project launch"), wxDefaultPosition, wxDefaultSize, 0 );
 
  351    m_cbRememberOpenFiles->SetToolTip( 
_(
"If checked, launching a project will also launch tools such as the schematic and board editors with previously open files") );
 
  356    bSessionSizer->Add( 0, 5, 0, 0, 5 );
 
  358    wxGridBagSizer* gbSizer1;
 
  359    gbSizer1 = 
new wxGridBagSizer( 5, 5 );
 
  360    gbSizer1->SetFlexibleDirection( wxBOTH );
 
  361    gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  362    gbSizer1->SetEmptyCellSize( wxSize( -1,2 ) );
 
  368    m_fileHistorySize = 
new wxSpinCtrl( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 100, 0 );
 
  369    gbSizer1->Add( 
m_fileHistorySize, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
 
  372    gbSizer1->AddGrowableCol( 1 );
 
  374    bSessionSizer->Add( gbSizer1, 0, wxALL, 5 );
 
  377    rightSizer->Add( bSessionSizer, 0, wxTOP|wxLEFT|wxEXPAND, 5 );
 
  380    rightSizer->Add( 0, 15, 0, wxEXPAND, 5 );
 
  382    m_staticText25 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Project Backup"), wxDefaultPosition, wxDefaultSize, 0 );
 
  384    rightSizer->Add( 
m_staticText25, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 13 );
 
  386    m_staticline4 = 
new wxStaticLine( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  387    rightSizer->Add( 
m_staticline4, 0, wxEXPAND|wxTOP|wxBOTTOM, 2 );
 
  389    wxBoxSizer* bProjectBackupSizer;
 
  390    bProjectBackupSizer = 
new wxBoxSizer( wxVERTICAL );
 
  392    wxGridBagSizer* gbSizer3;
 
  393    gbSizer3 = 
new wxGridBagSizer( 2, 0 );
 
  394    gbSizer3->SetFlexibleDirection( wxBOTH );
 
  395    gbSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  397    m_cbBackupEnabled = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Automatically backup projects"), wxDefaultPosition, wxDefaultSize, 0 );
 
  398    m_cbBackupEnabled->SetToolTip( 
_(
"Automatically create backup archives of the current project when saving files") );
 
  400    gbSizer3->Add( 
m_cbBackupEnabled, wxGBPosition( 0, 0 ), wxGBSpan( 1, 3 ), wxBOTTOM|wxRIGHT, 5 );
 
  402    m_staticText16 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"Maximum total backup size:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  404    m_staticText16->SetToolTip( 
_(
"If the total size of backup files grows above this limit, old backups will be deleted (set to 0 for no limit)") );
 
  406    gbSizer3->Add( 
m_staticText16, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 3 );
 
  408    m_backupLimitTotalSize = 
new wxSpinCtrl( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1000, 0 );
 
  409    gbSizer3->Add( 
m_backupLimitTotalSize, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 3 );
 
  411    m_staticText17 = 
new wxStaticText( 
this, wxID_ANY, 
_(
"MB"), wxDefaultPosition, wxDefaultSize, 0 );
 
  413    gbSizer3->Add( 
m_staticText17, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
 
  416    gbSizer3->AddGrowableCol( 1 );
 
  418    bProjectBackupSizer->Add( gbSizer3, 0, wxALL, 5 );
 
  421    rightSizer->Add( bProjectBackupSizer, 0, wxEXPAND|wxTOP|wxLEFT, 5 );
 
  424    bPanelSizer->Add( rightSizer, 0, wxRIGHT|wxLEFT, 5 );
 
  427    this->SetSizer( bPanelSizer );
 
  429    bPanelSizer->Fit( 
this );