KiCad PCB EDA Suite
PGM_SINGLE_TOP Struct Reference

Struct PGM_SINGLE_TOP implements PGM_BASE with its own OnPgmInit() and OnPgmExit(). More...

Inheritance diagram for PGM_SINGLE_TOP:
PGM_BASE

Public Member Functions

bool OnPgmInit ()
 
void OnPgmExit ()
 
void MacOpenFile (const wxString &aFileName) override
 Function MacOpenFile is specific to MacOSX (not used under Linux or Windows). More...
 
VTBL_ENTRY wxConfigBase * CommonSettings () const
 
VTBL_ENTRY void SetEditorName (const wxString &aFileName)
 
VTBL_ENTRY const wxString & GetEditorName (bool aCanShowFileChooser=true)
 Return the preferred editor name. More...
 
VTBL_ENTRY const wxString AskUserForPreferredEditor (const wxString &aDefaultEditor=wxEmptyString)
 Shows a dialog that instructs the user to select a new preferred editor. More...
 
VTBL_ENTRY bool IsKicadEnvVariableDefined () const
 
VTBL_ENTRY const wxString & GetKicadEnvVariable () const
 
VTBL_ENTRY const wxString & GetExecutablePath () const
 
VTBL_ENTRY wxLocale * GetLocale ()
 
VTBL_ENTRY const wxString & GetPdfBrowserName () const
 
VTBL_ENTRY void SetPdfBrowserName (const wxString &aFileName)
 
VTBL_ENTRY bool UseSystemPdfBrowser () const
 Function UseSystemPdfBrowser returns true if the PDF browser is the default (system) PDF browser and false if the PDF browser is the preferred (selected) browser, else returns false if there is no selected browser. More...
 
VTBL_ENTRY void ForceSystemPdfBrowser (bool aFlg)
 Function ForceSystemPdfBrowser forces the use of system PDF browser, even if a preferred PDF browser is set. More...
 
VTBL_ENTRY bool SetLanguage (bool first_time=false)
 Function SetLanguage sets the dictionary file name for internationalization. More...
 
VTBL_ENTRY void AddMenuLanguageList (wxMenu *MasterMenu)
 Function AddMenuLanguageList creates a menu list for language choice, and add it as submenu to MasterMenu. More...
 
VTBL_ENTRY void SetLanguageIdentifier (int menu_id)
 Function SetLanguageIdentifier sets in .m_language_id member the wxWidgets language identifier Id from the KiCad menu id (internal menu identifier). More...
 
VTBL_ENTRY void SetLanguagePath ()
 
VTBL_ENTRY void ReadPdfBrowserInfos ()
 Function ReadPdfBrowserInfos reads the PDF browser choice from the common configuration. More...
 
VTBL_ENTRY void WritePdfBrowserInfos ()
 Function WritePdfBrowserInfos saves the PDF browser choice to the common configuration. More...
 
VTBL_ENTRY bool SetLocalEnvVariable (const wxString &aName, const wxString &aValue)
 Function SetLocalEnvVariable. More...
 
VTBL_ENTRY void SetLocalEnvVariables (const ENV_VAR_MAP &aEnvVarMap)
 Function SetLocalEnvVariables. More...
 
VTBL_ENTRY const ENV_VAR_MAPGetLocalEnvVariables () const
 
VTBL_ENTRY void ConfigurePaths (wxWindow *aParent=NULL)
 Function ConfigurePaths. More...
 
VTBL_ENTRY wxApp & App ()
 Function App returns a bare naked wxApp, which may come from wxPython, SINGLE_TOP, or kicad.exe. More...
 
bool InitPgm ()
 Function initPgm initializes this program (process) in a KiCad standard way, using some generalized techniques. More...
 
void Destroy ()
 
void SaveCommonSettings ()
 Function saveCommonSettings saves the program (process) settings subset which are stored .kicad_common. More...
 
void SetIconsScale (double aValue)
 Scaling factor for menus and tool icons. More...
 
double GetIconsScale ()
 
void SetUseIconsInMenus (bool aUseIcons)
 True to use menu icons. More...
 
bool GetUseIconsInMenus ()
 

Static Public Attributes

static const wxChar workingDirKey [] = wxT( "WorkingDir" )
 

Protected Member Functions

void loadCommonSettings ()
 Function loadCommonSettings loads the program (process) settings subset which are stored in .kicad_common. More...
 
void setLanguageId (int aId)
 Trap all changes in here, simplifies debugging. More...
 
bool setExecutablePath ()
 Function setExecutablePath finds the path to the executable and stores it in PGM_BASE::m_bin_dir. More...
 

Protected Attributes

wxSingleInstanceChecker * m_pgm_checker
 prevents multiple instances of a program from being run at the same time. More...
 
wxConfigBase * m_common_settings
 Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common. More...
 
wxString m_bin_dir
 full path to this program More...
 
wxString m_kicad_env
 The KICAD system environment variable. More...
 
wxLocale * m_locale
 The current locale. More...
 
int m_language_id
 The current language setting. More...
 
bool m_use_system_pdf_browser
 true to use the selected PDF browser, if exists, or false to use the default More...
 
double m_iconsScale
 Scaling factor for menus and tool icons. More...
 
bool m_useIconsInMenus
 True to use menu icons. More...
 
wxString m_pdf_browser
 The file name of the the program selected for browsing pdf files. More...
 
wxString m_editor_name
 
wxSize m_help_size
 
ENV_VAR_MAP m_local_env_vars
 Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD. More...
 
bool m_show_env_var_dialog
 Flag to indicate if the environment variable overwrite warning dialog should be shown. More...
 

Detailed Description

Struct PGM_SINGLE_TOP implements PGM_BASE with its own OnPgmInit() and OnPgmExit().

Definition at line 61 of file single_top.cpp.

Member Function Documentation

void PGM_BASE::AddMenuLanguageList ( wxMenu *  MasterMenu)
inherited

Function AddMenuLanguageList creates a menu list for language choice, and add it as submenu to MasterMenu.

Parameters
MasterMenuThe main menu. The sub menu list will be accessible from the menu item with id ID_LANGUAGE_CHOICE

Definition at line 824 of file pgm_base.cpp.

References AddMenuItem(), DIM, ID_LANGUAGE_CHOICE, KiBitmap(), LANGUAGE_DESCR::m_Lang_Label, and PGM_BASE::m_language_id.

Referenced by preparePreferencesMenu(), CVPCB_MAINFRAME::ReCreateMenuBar(), FOOTPRINT_EDIT_FRAME::ReCreateMenuBar(), PL_EDITOR_FRAME::ReCreateMenuBar(), LIB_EDIT_FRAME::ReCreateMenuBar(), KICAD_MANAGER_FRAME::ReCreateMenuBar(), and GERBVIEW_FRAME::ReCreateMenuBar().

825 {
826  wxMenu* menu = NULL;
827  wxMenuItem* item = MasterMenu->FindItem( ID_LANGUAGE_CHOICE );
828 
829  if( item ) // This menu exists, do nothing
830  return;
831 
832  menu = new wxMenu;
833 
834  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
835  {
836  wxString label;
837 
838  if( s_Languages[ii].m_DoNotTranslate )
839  label = s_Languages[ii].m_Lang_Label;
840  else
841  label = wxGetTranslation( s_Languages[ii].m_Lang_Label );
842 
843  AddMenuItem( menu, s_Languages[ii].m_KI_Lang_Identifier,
844  label, KiBitmap(s_Languages[ii].m_Lang_Icon ),
845  wxITEM_CHECK );
846  }
847 
848  AddMenuItem( MasterMenu, menu,
850  _( "Set Language" ),
851  _( "Select application language (only for testing)" ),
852  KiBitmap( language_xpm ) );
853 
854  // Set Check mark on current selected language
855  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
856  {
857  if( m_language_id == s_Languages[ii].m_WX_Lang_Identifier )
858  menu->Check( s_Languages[ii].m_KI_Lang_Identifier, true );
859  else
860  menu->Check( s_Languages[ii].m_KI_Lang_Identifier, false );
861  }
862 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
wxMenuItem * AddMenuItem(wxMenu *aMenu, int aId, const wxString &aText, const wxBitmap &aImage, wxItemKind aType=wxITEM_NORMAL)
Function AddMenuItem is an inline helper function to create and insert a menu item with an icon into ...
Definition: bitmap.cpp:55
int m_language_id
The current language setting.
Definition: pgm_base.h:356
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:36
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.cpp:92
static LANGUAGE_DESCR s_Languages[]
Variable s_Languages Note: because this list is not created on the fly, wxTranslation must be called ...
Definition: pgm_base.cpp:105
wxApp & PGM_BASE::App ( )
inherited

Function App returns a bare naked wxApp, which may come from wxPython, SINGLE_TOP, or kicad.exe.

Should return what wxGetApp() returns.

Definition at line 323 of file pgm_base.cpp.

Referenced by WS_DRAW_ITEM_LIST::BuildFullText(), DIALOG_SHIM::DIALOG_SHIM(), PCB_EDIT_FRAME::DoGenFootprintsPositionFile(), PCB_EDIT_FRAME::DoGenFootprintsReport(), PGM_BASE::InitPgm(), PGM_KICAD::MacOpenFile(), MacOpenFile(), and PGM_KICAD::OnPgmInit().

324 {
325  wxASSERT( wxTheApp );
326  return *wxTheApp;
327 }
const wxString PGM_BASE::AskUserForPreferredEditor ( const wxString &  aDefaultEditor = wxEmptyString)
inherited

Shows a dialog that instructs the user to select a new preferred editor.

Parameters
aDefaultEditorDefault full path for the default editor this dialog should show by default.
Returns
Returns the full path of the editor, or an empty string if no editor was chosen.

Definition at line 375 of file pgm_base.cpp.

References EDA_FILE_SELECTOR(), and name.

Referenced by PGM_BASE::GetEditorName(), and EDA_BASE_FRAME::OnSelectPreferredEditor().

376 {
377  // Create a mask representing the executable files in the current platform
378 #ifdef __WINDOWS__
379  wxString mask( _( "Executable file (*.exe)|*.exe" ) );
380 #else
381  wxString mask( _( "Executable file (*)|*" ) );
382 #endif
383 
384  // Extract the path, name and extension from the default editor (even if the editor's
385  // name was empty, this method will succeed and return empty strings).
386  wxString path, name, ext;
387  wxFileName::SplitPath( aDefaultEditor, &path, &name, &ext );
388 
389  // Show the modal editor and return the file chosen (may be empty if the user cancels
390  // the dialog).
391  return EDA_FILE_SELECTOR( _( "Select Preferred Editor" ), path,
392  name, ext, mask,
393  NULL, wxFD_OPEN | wxFD_FILE_MUST_EXIST,
394  true );
395 }
wxString EDA_FILE_SELECTOR(const wxString &aTitle, const wxString &aPath, const wxString &aFileName, const wxString &aExtension, const wxString &aWildcard, wxWindow *aParent, int aStyle, const bool aKeepWorkingDirectory, const wxPoint &aPosition, wxString *aMruPath)
Function EDA_FILE_SELECTOR.
Definition: gestfich.cpp:82
const char * name
void PGM_BASE::ConfigurePaths ( wxWindow *  aParent = NULL)
inherited

Function ConfigurePaths.

presents a dialog to the user to edit local environment variable settings for use in the footprint library table and the 3D model importer. It was added to PGM_BASE because it will eventually find use for in schematic I/O design so it needs to accessible by almost every KiCad application.

Parameters
aParent- a pointer the wxWindow parent of the dialog or NULL to use the top level window.

Definition at line 905 of file pgm_base.cpp.

References DIALOG_ENV_VAR_CONFIG::ExternalDefsChanged(), GetChars(), DIALOG_ENV_VAR_CONFIG::GetEnvVarMap(), PGM_BASE::GetLocalEnvVariables(), PGM_BASE::m_show_env_var_dialog, PGM_BASE::SetLocalEnvVariables(), and traceEnvVars.

Referenced by DLG_3D_PATH_CONFIG::OnConfigEnvVar(), CVPCB_MAINFRAME::OnConfigurePaths(), FOOTPRINT_EDIT_FRAME::OnConfigurePaths(), KICAD_MANAGER_FRAME::OnConfigurePaths(), and PCB_EDIT_FRAME::OnConfigurePaths().

906 {
907  DIALOG_ENV_VAR_CONFIG dlg_envvars( aParent, GetLocalEnvVariables() );
908 
909  if( dlg_envvars.ShowModal() == wxID_CANCEL )
910  return;
911 
912  ENV_VAR_MAP envVarMap = dlg_envvars.GetEnvVarMap();
913 
914  for( ENV_VAR_MAP_ITER it = envVarMap.begin(); it != envVarMap.end(); ++it )
915  {
916  wxLogTrace( traceEnvVars, wxT( "Environment variable %s=%s defined externally = %d" ),
917  GetChars( it->first ), GetChars( it->second.GetValue() ),
918  it->second.GetDefinedExternally() );
919  }
920 
921  // If any of the environment variables are defined externally, warn the user that the
922  // next time kicad is run that the externally defined variables will be used instead of
923  // the user's settings. This is by design.
924  if( dlg_envvars.ExternalDefsChanged() && m_show_env_var_dialog )
925  {
926  wxString msg1 = _( "Warning! Some of paths you have configured have been defined \n"
927  "externally to the running process and will be temporarily overwritten." );
928  wxString msg2 = _( "The next time KiCad is launched, any paths that have already\n"
929  "been defined are honored and any settings defined in the path\n"
930  "configuration dialog are ignored. If you did not intend for this\n"
931  "behavior, either rename any conflicting entries or remove the\n"
932  "external environment variable definition(s) from your system." );
933  wxRichMessageDialog dlg( aParent, msg1, _( "Warning" ), wxOK | wxCENTRE );
934  dlg.ShowDetailedText( msg2 );
935  dlg.ShowCheckBox( _( "Do not show this message again." ) );
936  dlg.ShowModal();
937  m_show_env_var_dialog = !dlg.IsCheckBoxChecked();
938  }
939 
940  SetLocalEnvVariables( dlg_envvars.GetEnvVarMap() );
941 }
static const wxChar traceEnvVars[]
enable/disable icons in menus
Definition: pgm_base.cpp:67
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:385
VTBL_ENTRY const ENV_VAR_MAP & GetLocalEnvVariables() const
Definition: pgm_base.h:270
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
Definition: pgm_base.h:87
DIALOG_ENV_VAR_CONFIG class declaration.
VTBL_ENTRY void SetLocalEnvVariables(const ENV_VAR_MAP &aEnvVarMap)
Function SetLocalEnvVariables.
Definition: pgm_base.cpp:884
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
std::map< wxString, ENV_VAR_ITEM >::iterator ENV_VAR_MAP_ITER
Definition: pgm_base.h:88
void PGM_BASE::Destroy ( )
inherited

Definition at line 308 of file pgm_base.cpp.

References PGM_BASE::m_common_settings, PGM_BASE::m_locale, and PGM_BASE::m_pgm_checker.

Referenced by PGM_KICAD::Destroy(), OnPgmExit(), and PGM_BASE::~PGM_BASE().

309 {
310  // unlike a normal destructor, this is designed to be called more than once safely:
311 
312  delete m_common_settings;
313  m_common_settings = 0;
314 
315  delete m_pgm_checker;
316  m_pgm_checker = 0;
317 
318  delete m_locale;
319  m_locale = 0;
320 }
wxLocale * m_locale
The current locale.
Definition: pgm_base.h:353
wxSingleInstanceChecker * m_pgm_checker
prevents multiple instances of a program from being run at the same time.
Definition: pgm_base.h:340
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
VTBL_ENTRY void PGM_BASE::ForceSystemPdfBrowser ( bool  aFlg)
inlineinherited

Function ForceSystemPdfBrowser forces the use of system PDF browser, even if a preferred PDF browser is set.

Definition at line 196 of file pgm_base.h.

References PGM_BASE::m_use_system_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser(), KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), and PGM_BASE::PGM_BASE().

196 { m_use_system_pdf_browser = aFlg; }
bool m_use_system_pdf_browser
true to use the selected PDF browser, if exists, or false to use the default
Definition: pgm_base.h:359
const wxString & PGM_BASE::GetEditorName ( bool  aCanShowFileChooser = true)
inherited

Return the preferred editor name.

Parameters
aCanShowFileChooserIf no editor is currently set and this argument is 'true' then this method will show a file chooser dialog asking for the editor's executable.
Returns
Returns the full path of the editor, or an empty string if no editor has been set.

Definition at line 338 of file pgm_base.cpp.

References PGM_BASE::AskUserForPreferredEditor(), DisplayInfoMessage(), PGM_BASE::m_editor_name, and PGM_BASE::SetEditorName().

Referenced by TREEPROJECT_ITEM::Activate(), DIALOG_CONFIG_EQUFILES::OnEditEquFile(), DIALOG_BOM::OnEditPlugin(), KICAD_MANAGER_FRAME::OnOpenFileInTextEditor(), TREE_PROJECT_FRAME::OnOpenSelectedFileWithTextEditor(), KICAD_MANAGER_FRAME::OnOpenTextEditor(), EDA_BASE_FRAME::OnSelectPreferredEditor(), and GERBVIEW_FRAME::OnShowGerberSourceFile().

339 {
340  wxString editorname = m_editor_name;
341 
342  if( !editorname )
343  {
344  if( !wxGetEnv( wxT( "EDITOR" ), &editorname ) )
345  {
346  // If there is no EDITOR variable set, try the desktop default
347 #ifdef __WXMAC__
348  editorname = "/usr/bin/open";
349 #elif __WXX11__
350  editorname = "/usr/bin/xdg-open";
351 #endif
352  }
353  }
354 
355  // If we still don't have an editor name show a dialog asking the user to select one
356  if( !editorname && aCanShowFileChooser )
357  {
358  DisplayInfoMessage( NULL,
359  _( "No default editor found, you must choose it" ) );
360 
361  editorname = AskUserForPreferredEditor();
362  }
363 
364  // If we finally have a new editor name request it to be copied to m_editor_name and
365  // saved to the preferences file.
366  if( !editorname.IsEmpty() )
367  SetEditorName( editorname );
368 
369  // m_editor_name already has the same value that editorname, or empty if no editor was
370  // found/chosen.
371  return m_editor_name;
372 }
VTBL_ENTRY void SetEditorName(const wxString &aFileName)
Definition: pgm_base.cpp:330
VTBL_ENTRY const wxString AskUserForPreferredEditor(const wxString &aDefaultEditor=wxEmptyString)
Shows a dialog that instructs the user to select a new preferred editor.
Definition: pgm_base.cpp:375
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString aExtraInfo)
Function DisplayInfoMessage displays an informational message box with aMessage.
Definition: confirm.cpp:102
wxString m_editor_name
Definition: pgm_base.h:378
VTBL_ENTRY const wxString& PGM_BASE::GetExecutablePath ( ) const
inlineinherited
double PGM_BASE::GetIconsScale ( )
inlineinherited

Definition at line 325 of file pgm_base.h.

References PGM_BASE::m_iconsScale.

325 { return m_iconsScale; }
double m_iconsScale
Scaling factor for menus and tool icons.
Definition: pgm_base.h:362
VTBL_ENTRY const wxString& PGM_BASE::GetKicadEnvVariable ( ) const
inlineinherited

Definition at line 171 of file pgm_base.h.

References PGM_BASE::m_kicad_env.

Referenced by FindKicadFile(), and KicadDatasPath().

171 { return m_kicad_env; }
wxString m_kicad_env
The KICAD system environment variable.
Definition: pgm_base.h:350
VTBL_ENTRY wxLocale* PGM_BASE::GetLocale ( )
inlineinherited

Definition at line 175 of file pgm_base.h.

References PGM_BASE::m_locale.

Referenced by SearchHelpFileFullPath().

175 { return m_locale; }
wxLocale * m_locale
The current locale.
Definition: pgm_base.h:353
VTBL_ENTRY const ENV_VAR_MAP& PGM_BASE::GetLocalEnvVariables ( ) const
inlineinherited

Definition at line 270 of file pgm_base.h.

References PGM_BASE::m_local_env_vars.

Referenced by PGM_BASE::ConfigurePaths(), and S3D_FILENAME_RESOLVER::GetKicadPaths().

271  {
272  return m_local_env_vars;
273  }
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:382
VTBL_ENTRY const wxString& PGM_BASE::GetPdfBrowserName ( ) const
inlineinherited

Definition at line 177 of file pgm_base.h.

References PGM_BASE::m_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), OpenPDF(), and PGM_BASE::WritePdfBrowserInfos().

177 { return m_pdf_browser; }
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:377
bool PGM_BASE::GetUseIconsInMenus ( )
inlineinherited

Definition at line 328 of file pgm_base.h.

References PGM_BASE::m_useIconsInMenus.

Referenced by AddMenuItem(), CONTEXT_MENU::appendCopy(), and set_wxMenuIcon().

328 { return m_useIconsInMenus; }
bool m_useIconsInMenus
True to use menu icons.
Definition: pgm_base.h:364
bool PGM_BASE::InitPgm ( )
inherited

Function initPgm initializes this program (process) in a KiCad standard way, using some generalized techniques.

  • Default paths (help, libs, bin) and configuration file names
  • Language and locale
  • fonts

But nothing relating to DSOs or projects.

Returns
bool - true if success, false if failure and program is to terminate.

Definition at line 398 of file pgm_base.cpp.

References PGM_BASE::App(), Format(), GetChars(), GetKicadLockFilePath(), GetNewConfig(), IsOK(), KICAD_COMMON, PGM_BASE::loadCommonSettings(), PGM_BASE::m_common_settings, PGM_BASE::m_kicad_env, PGM_BASE::m_local_env_vars, PGM_BASE::m_pgm_checker, PGM_BASE::ReadPdfBrowserInfos(), ENV_VAR_ITEM::SetDefinedExternally(), PGM_BASE::setExecutablePath(), PGM_BASE::SetLanguage(), PGM_BASE::SetLanguagePath(), ENV_VAR_ITEM::SetValue(), UNIX_STRING_DIR_SEP, and WIN_STRING_DIR_SEP.

Referenced by PGM_KICAD::OnPgmInit().

399 {
400  wxFileName pgm_name( App().argv[0] );
401 
402  wxConfigBase::DontCreateOnDemand();
403 
404  wxInitAllImageHandlers();
405 
406  m_pgm_checker = new wxSingleInstanceChecker( pgm_name.GetName().Lower() + wxT( "-" ) +
407  wxGetUserId(), GetKicadLockFilePath() );
408 
409  if( m_pgm_checker->IsAnotherRunning() )
410  {
411  wxString quiz = wxString::Format(
412  _( "%s is already running, Continue?" ),
413  GetChars( pgm_name.GetName() )
414  );
415 
416  if( !IsOK( NULL, quiz ) )
417  return false;
418  }
419 
420  // Init KiCad environment
421  // the environment variable KICAD (if exists) gives the kicad path:
422  // something like set KICAD=d:\kicad
423  bool isDefined = wxGetEnv( wxT( "KICAD" ), &m_kicad_env );
424 
425  if( isDefined ) // ensure m_kicad_env ends by "/"
426  {
428 
429  if( !m_kicad_env.IsEmpty() && m_kicad_env.Last() != '/' )
431  }
432 
433  // Init parameters for configuration
434  App().SetVendorName( wxT( "KiCad" ) );
435  App().SetAppName( pgm_name.GetName().Lower() );
436 
437  // Install some image handlers, mainly for help
438  if( wxImage::FindHandler( wxBITMAP_TYPE_PNG ) == NULL )
439  wxImage::AddHandler( new wxPNGHandler );
440 
441  if( wxImage::FindHandler( wxBITMAP_TYPE_GIF ) == NULL )
442  wxImage::AddHandler( new wxGIFHandler );
443 
444  if( wxImage::FindHandler( wxBITMAP_TYPE_JPEG ) == NULL )
445  wxImage::AddHandler( new wxJPEGHandler );
446 
447  wxFileSystem::AddHandler( new wxZipFSHandler );
448 
449  // Analyze the command line & initialize the binary path
451 
452  SetLanguagePath();
453 
454  // OS specific instantiation of wxConfigBase derivative:
456 
457  wxString envVarName = wxT( "KIGITHUB" );
458  ENV_VAR_ITEM envVarItem;
459  wxString envValue;
460  wxFileName tmpFileName;
461 
462  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
463  {
464  tmpFileName.AssignDir( envValue );
465  envVarItem.SetDefinedExternally( true );
466  }
467  else
468  {
469  envVarItem.SetValue( wxString( wxT( "https://github.com/KiCad" ) ) );
470  envVarItem.SetDefinedExternally( false );
471  }
472 
473  m_local_env_vars[ envVarName ] = envVarItem;
474 
475  wxFileName baseSharePath;
476  baseSharePath.AssignDir( wxString( wxT( DEFAULT_INSTALL_PATH ) ) );
477 
478 #if !defined( __WXMAC__ )
479  baseSharePath.AppendDir( wxT( "share" ) );
480  baseSharePath.AppendDir( wxT( "kicad" ) );
481 #endif
482 
483  // KISYSMOD
484  envVarName = wxT( "KISYSMOD" );
485  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
486  {
487  tmpFileName.AssignDir( envValue );
488  envVarItem.SetDefinedExternally( true );
489  }
490  else
491  {
492  tmpFileName = baseSharePath;
493  tmpFileName.AppendDir( wxT( "modules" ) );
494  envVarItem.SetDefinedExternally( false );
495  }
496  envVarItem.SetValue( tmpFileName.GetPath() );
497  m_local_env_vars[ envVarName ] = envVarItem;
498 
499  // KISYS3DMOD
500  envVarName = wxT( "KISYS3DMOD" );
501  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
502  {
503  tmpFileName.AssignDir( envValue );
504  envVarItem.SetDefinedExternally( true );
505  }
506  else
507  {
508  tmpFileName.AppendDir( wxT( "packages3d" ) );
509  envVarItem.SetDefinedExternally( false );
510  }
511  envVarItem.SetValue( tmpFileName.GetFullPath() );
512  m_local_env_vars[ envVarName ] = envVarItem;
513 
514  // KICAD_PTEMPLATES
515  envVarName = wxT( "KICAD_PTEMPLATES" );
516  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
517  {
518  tmpFileName.AssignDir( envValue );
519  envVarItem.SetDefinedExternally( true );
520  }
521  else
522  {
523  tmpFileName = baseSharePath;
524  tmpFileName.AppendDir( wxT( "template" ) );
525  envVarItem.SetDefinedExternally( false );
526  }
527  envVarItem.SetValue( tmpFileName.GetPath() );
528  m_local_env_vars[ envVarName ] = envVarItem;
529 
530  // KICAD_SYMBOLS
531  envVarName = wxT( "KICAD_SYMBOL_DIR" );
532  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
533  {
534  tmpFileName.AssignDir( envValue );
535  envVarItem.SetDefinedExternally( true );
536  }
537  else
538  {
539  tmpFileName = baseSharePath;
540  tmpFileName.AppendDir( wxT( "library" ) );
541  envVarItem.SetDefinedExternally( false );
542  }
543  envVarItem.SetValue( tmpFileName.GetPath() );
544  m_local_env_vars[ envVarName ] = envVarItem;
545 
546  ReadPdfBrowserInfos(); // needs m_common_settings
547 
548  // Init user language *before* calling loadCommonSettings, because
549  // env vars could be incorrectly initialized on Linux
550  // (if the value contains some non ASCII7 chars, the env var is not initialized)
551  SetLanguage( true );
552 
554 
555 #ifdef __WXMAC__
556  // Always show filters on Open dialog to be able to choose plugin
557  wxSystemOptions::SetOption( wxOSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1 );
558 #endif
559 
560  return true;
561 }
void loadCommonSettings()
Function loadCommonSettings loads the program (process) settings subset which are stored in ...
Definition: pgm_base.cpp:606
wxString GetKicadLockFilePath()
Function GetKicadLockFilePath.
Definition: lockfile.cpp:59
#define WIN_STRING_DIR_SEP
Definition: gestfich.h:44
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:382
#define UNIX_STRING_DIR_SEP
Definition: gestfich.h:43
Class ENV_VAR_ITEM.
Definition: pgm_base.h:58
wxConfigBase * GetNewConfig(const wxString &aProgName)
Function GetNewConfig.
Definition: common.cpp:205
VTBL_ENTRY wxApp & App()
Function App returns a bare naked wxApp, which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:323
bool setExecutablePath()
Function setExecutablePath finds the path to the executable and stores it in PGM_BASE::m_bin_dir.
Definition: pgm_base.cpp:564
wxSingleInstanceChecker * m_pgm_checker
prevents multiple instances of a program from being run at the same time.
Definition: pgm_base.h:340
#define KICAD_COMMON
Definition: pgm_base.cpp:58
wxString m_kicad_env
The KICAD system environment variable.
Definition: pgm_base.h:350
void SetDefinedExternally(bool aIsDefinedExternally)
Definition: pgm_base.h:70
VTBL_ENTRY void SetLanguagePath()
Definition: pgm_base.cpp:789
VTBL_ENTRY bool SetLanguage(bool first_time=false)
Function SetLanguage sets the dictionary file name for internationalization.
Definition: pgm_base.cpp:681
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
VTBL_ENTRY void ReadPdfBrowserInfos()
Function ReadPdfBrowserInfos reads the PDF browser choice from the common configuration.
Definition: eda_doc.cpp:41
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
void SetValue(const wxString &aValue)
Definition: pgm_base.h:76
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Function IsOK displays a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:129
VTBL_ENTRY bool PGM_BASE::IsKicadEnvVariableDefined ( ) const
inlineinherited

Definition at line 169 of file pgm_base.h.

References PGM_BASE::m_kicad_env.

169 { return !m_kicad_env.IsEmpty(); }
wxString m_kicad_env
The KICAD system environment variable.
Definition: pgm_base.h:350
void PGM_BASE::loadCommonSettings ( )
protectedinherited

Function loadCommonSettings loads the program (process) settings subset which are stored in .kicad_common.

Definition at line 606 of file pgm_base.cpp.

References entryUseIconsInMenus, GetChars(), PGM_BASE::m_common_settings, PGM_BASE::m_editor_name, PGM_BASE::m_help_size, PGM_BASE::m_iconsScale, PGM_BASE::m_local_env_vars, PGM_BASE::m_show_env_var_dialog, PGM_BASE::m_useIconsInMenus, pathEnvVariables, PGM_BASE::SetLocalEnvVariable(), showEnvVarWarningDialog, and traceEnvVars.

Referenced by PGM_BASE::InitPgm().

607 {
608  wxASSERT( m_common_settings );
609 
610  m_help_size.x = 500;
611  m_help_size.y = 400;
612  m_iconsScale = 1.0;
613 
614  // This only effect the first time KiCad is run. The user's setting will be used for all
615  // subsequent runs. Menu icons are off by default on OSX and on for all other platforms.
616 #if defined( __WXMAC__ )
617  m_useIconsInMenus = false;
618 #else
619  m_useIconsInMenus = true;
620 #endif
621 
624 
625  m_editor_name = m_common_settings->Read( wxT( "Editor" ) );
626 
627  wxString entry, oldPath;
628  wxArrayString entries;
629  long index = 0L;
630 
631  oldPath = m_common_settings->GetPath();
633 
634  while( m_common_settings->GetNextEntry( entry, index ) )
635  {
636  wxLogTrace( traceEnvVars,
637  wxT( "Enumerating over entry %s, %ld." ), GetChars( entry ), index );
638  entries.Add( entry );
639  }
640 
641  for( unsigned i = 0; i < entries.GetCount(); i++ )
642  {
643  wxString val = m_common_settings->Read( entries[i], wxEmptyString );
644  m_local_env_vars[ entries[i] ] = ENV_VAR_ITEM( val, wxGetEnv( entries[i], NULL ) );
645  }
646 
647  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
648  SetLocalEnvVariable( it->first, it->second.GetValue() );
649 
650  m_common_settings->SetPath( oldPath );
651 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:65
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:382
Class ENV_VAR_ITEM.
Definition: pgm_base.h:58
static const wxChar showEnvVarWarningDialog[]
Definition: pgm_base.cpp:66
static const wxChar traceEnvVars[]
enable/disable icons in menus
Definition: pgm_base.cpp:67
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:385
static const wxChar entryUseIconsInMenus[]
Definition: pgm_base.cpp:69
double m_iconsScale
Scaling factor for menus and tool icons.
Definition: pgm_base.h:362
VTBL_ENTRY bool SetLocalEnvVariable(const wxString &aName, const wxString &aValue)
Function SetLocalEnvVariable.
Definition: pgm_base.cpp:865
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
wxSize m_help_size
Definition: pgm_base.h:379
wxString m_editor_name
Definition: pgm_base.h:378
bool m_useIconsInMenus
True to use menu icons.
Definition: pgm_base.h:364
std::map< wxString, ENV_VAR_ITEM >::iterator ENV_VAR_MAP_ITER
Definition: pgm_base.h:88
void PGM_SINGLE_TOP::MacOpenFile ( const wxString &  aFileName)
inlineoverridevirtual

Function MacOpenFile is specific to MacOSX (not used under Linux or Windows).

MacOSX requires it for file association.

See also
http://wiki.wxwidgets.org/WxMac-specific_topics

Implements PGM_BASE.

Definition at line 76 of file single_top.cpp.

References PGM_BASE::App(), and KIWAY_PLAYER::OpenProjectFiles().

77  {
78  wxFileName filename( aFileName );
79 
80  if( filename.FileExists() )
81  {
82  #if 0
83  // this pulls in EDA_DRAW_FRAME type info, which we don't want in
84  // the single_top link image.
85  KIWAY_PLAYER* frame = dynamic_cast<KIWAY_PLAYER*>( App().GetTopWindow() );
86  #else
87  KIWAY_PLAYER* frame = (KIWAY_PLAYER*) App().GetTopWindow();
88  #endif
89  if( frame )
90  frame->OpenProjectFiles( std::vector<wxString>( 1, aFileName ) );
91  }
92  }
Class KIWAY_PLAYER is a wxFrame capable of the OpenProjectFiles function, meaning it can load a porti...
Definition: kiway_player.h:111
VTBL_ENTRY wxApp & App()
Function App returns a bare naked wxApp, which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:323
VTBL_ENTRY bool OpenProjectFiles(const std::vector< wxString > &aFileList, int aCtl=0)
Function OpenProjectFiles is abstract, and opens a project or set of files given by aFileList...
Definition: kiway_player.h:170
void PGM_SINGLE_TOP::OnPgmExit ( )
inline

Definition at line 65 of file single_top.cpp.

References PGM_BASE::Destroy(), Kiway, KIWAY::OnKiwayEnd(), and PGM_BASE::SaveCommonSettings().

Referenced by APP_SINGLE_TOP::OnExit(), APP_SINGLE_TOP::OnInit(), and APP_SINGLE_TOP::OnRun().

66  {
67  Kiway.OnKiwayEnd();
68 
70 
71  // Destroy everything in PGM_BASE, especially wxSingleInstanceCheckerImpl
72  // earlier than wxApp and earlier than static destruction would.
74  }
void SaveCommonSettings()
Function saveCommonSettings saves the program (process) settings subset which are stored ...
Definition: pgm_base.cpp:654
void Destroy()
Definition: pgm_base.cpp:308
void OnKiwayEnd()
Definition: kiway.cpp:485
KIWAY Kiway
bool PGM_SINGLE_TOP::OnPgmInit ( )

Definition at line 242 of file single_top.cpp.

References FRAME_PCB, FRAME_PCB_MODULE_EDITOR, FRAME_T_COUNT, PGM_BASE::GetExecutablePath(), kiface, KIFACE_GETTER(), KIFACE_VERSION, KIWAY::KifaceType(), Kiway, name, KIWAY_PLAYER::OpenProjectFiles(), KIWAY::Player(), KIWAY::set_kiface(), and KIWAY::SetTop().

Referenced by APP_SINGLE_TOP::OnInit().

243 {
244 #if defined(DEBUG)
245  wxString absoluteArgv0 = wxStandardPaths::Get().GetExecutablePath();
246 
247  if( !wxIsAbsolutePath( absoluteArgv0 ) )
248  {
249  wxLogError( wxT( "No meaningful argv[0]" ) );
250  return false;
251  }
252 #endif
253 
254  if( !InitPgm() )
255  return false;
256 
257 #if !defined(BUILD_KIWAY_DLL)
258 
259  // Only bitmap2component and pcb_calculator use this code currently, as they
260  // are not split to use single_top as a link image separate from a *.kiface.
261  // i.e. they are single part link images so don't need to load a *.kiface.
262 
263  // Get the getter, it is statically linked into this binary image.
265 
266  int kiface_version;
267 
268  // Get the KIFACE.
269  KIFACE* kiface = getter( &kiface_version, KIFACE_VERSION, this );
270 
271  // Trick the KIWAY into thinking it loaded a KIFACE, by recording the KIFACE
272  // in the KIWAY. It needs to be there for KIWAY::OnKiwayEnd() anyways.
273  Kiway.set_kiface( KIWAY::KifaceType( TOP_FRAME ), kiface );
274 #endif
275 
276  // Open project or file specified on the command line:
277  int argc = App().argc;
278 
279  int args_offset = 1;
280 
281  FRAME_T appType = TOP_FRAME;
282 
283  const struct
284  {
285  wxString name;
286  FRAME_T type;
287  } frameTypes[] = {
288  { wxT( "pcb" ), FRAME_PCB },
289  { wxT( "fpedit" ), FRAME_PCB_MODULE_EDITOR },
290  { wxT( "" ), FRAME_T_COUNT }
291  };
292 
293  if( argc > 2 )
294  {
295  if( App().argv[1] == "--frame" )
296  {
297  wxString appName = App().argv[2];
298  appType = FRAME_T_COUNT;
299 
300  for( int i = 0; frameTypes[i].type != FRAME_T_COUNT; i++ )
301  {
302  const auto& frame = frameTypes[i];
303  if(frame.name == appName)
304  {
305  appType = frame.type;
306  }
307  }
308  args_offset += 2;
309 
310  if( appType == FRAME_T_COUNT )
311  {
312  wxLogError( wxT( "Unknown frame: %s" ), appName );
313  return false;
314  }
315  }
316  }
317 
318 
319  // Use KIWAY to create a top window, which registers its existence also.
320  // "TOP_FRAME" is a macro that is passed on compiler command line from CMake,
321  // and is one of the types in FRAME_T.
322  KIWAY_PLAYER* frame = Kiway.Player( appType, true );
323 
324  Kiway.SetTop( frame );
325 
326  App().SetTopWindow( frame ); // wxApp gets a face.
327 
328 
329  if( argc > args_offset )
330  {
331  /*
332  gerbview handles multiple project data files, i.e. gerber files on
333  cmd line. Others currently do not, they handle only one. For common
334  code simplicity we simply pass all the arguments in however, each
335  program module can do with them what they want, ignore, complain
336  whatever. We don't establish policy here, as this is a multi-purpose
337  launcher.
338  */
339 
340  std::vector<wxString> argSet;
341 
342  for( int i = args_offset; i < argc; ++i )
343  {
344  argSet.push_back( App().argv[i] );
345  }
346 
347  // special attention to the first argument: argv[1] (==argSet[0])
348  wxFileName argv1( argSet[0] );
349 
350  if( argc - args_offset > 1 )
351  {
352 #if defined(PGM_DATA_FILE_EXT)
353  // PGM_DATA_FILE_EXT, if present, may be different for each compile,
354  // it may come from CMake on the compiler command line, but often does not.
355  // This facillity is mostly useful for those program modules
356  // supporting a single argv[1].
357  if( !argv1.GetExt() )
358  argv1.SetExt( wxT( PGM_DATA_FILE_EXT ) );
359 #endif
360  argv1.MakeAbsolute();
361 
362  argSet[0] = argv1.GetFullPath();
363  }
364 
365  // Use the KIWAY_PLAYER::OpenProjectFiles() API function:
366  if( !frame->OpenProjectFiles( argSet ) )
367  {
368  // OpenProjectFiles() API asks that it report failure to the UI.
369  // Nothing further to say here.
370 
371  // We've already initialized things at this point, but wx won't call OnExit if
372  // we fail out. Call our own cleanup routine here to ensure the relevant resources
373  // are freed at the right time (if they aren't, segfaults will occur).
374  OnPgmExit();
375 
376  // Fail the process startup if the file could not be opened,
377  // although this is an optional choice, one that can be reversed
378  // also in the KIFACE specific OpenProjectFiles() return value.
379  return false;
380  }
381  }
382 
383  frame->Show();
384 
385  return true;
386 }
Class KIWAY_PLAYER is a wxFrame capable of the OpenProjectFiles function, meaning it can load a porti...
Definition: kiway_player.h:111
static FACE_T KifaceType(FRAME_T aFrameType)
Function KifaceType is a simple mapping function which returns the FACE_T which is known to implement...
Definition: kiway.cpp:252
void OnPgmExit()
Definition: single_top.cpp:65
#define KIFACE_VERSION
Definition: kiway.h:111
FRAME_T
Enum FRAME_T is the set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:34
VTBL_ENTRY wxApp & App()
Function App returns a bare naked wxApp, which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:323
VTBL_ENTRY bool OpenProjectFiles(const std::vector< wxString > &aFileList, int aCtl=0)
Function OpenProjectFiles is abstract, and opens a project or set of files given by aFileList...
Definition: kiway_player.h:170
bool set_kiface(FACE_T aFaceType, KIFACE *aKiface)
Definition: kiway.h:394
VTBL_ENTRY KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, KIWAY_PLAYER *aParent=NULL)
Function Player returns the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:302
KIFACE * KIFACE_GETTER(int *aKIFACEversion, int aKIWAYversion, PGM_BASE *aProgram)
No name mangling. Each KIFACE (DSO/DLL) will implement this once.
KIFACE * KIFACE_GETTER_FUNC(int *aKIFACEversion, int aKIWAYversion, PGM_BASE *aProgram)
Function Pointer KIFACE_GETTER_FUNC points to the one and only KIFACE export.
Definition: kiway.h:450
void SetTop(wxFrame *aTop)
Function SetTop tells this KIWAY about the top most frame in the program and optionally allows it to ...
Definition: kiway.cpp:78
Class KIFACE is used by a participant in the KIWAY alchemy.
Definition: kiway.h:150
bool InitPgm()
Function initPgm initializes this program (process) in a KiCad standard way, using some generalized t...
Definition: pgm_base.cpp:398
const char * name
return & kiface
Definition: pcbnew.cpp:197
KIWAY Kiway
void PGM_BASE::ReadPdfBrowserInfos ( )
inherited

Function ReadPdfBrowserInfos reads the PDF browser choice from the common configuration.

Definition at line 41 of file eda_doc.cpp.

References PGM_BASE::m_common_settings, PGM_BASE::m_use_system_pdf_browser, and PGM_BASE::SetPdfBrowserName().

Referenced by PGM_BASE::InitPgm(), KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), and OpenPDF().

42 {
43  wxASSERT( m_common_settings );
44 
45  wxString browser = m_common_settings->Read( wxT( "PdfBrowserName" ), wxEmptyString );
46  SetPdfBrowserName( browser );
47 
48  int tmp;
49  m_common_settings->Read( wxT( "UseSystemBrowser" ), &tmp, 0 );
50  m_use_system_pdf_browser = bool( tmp );
51 }
bool m_use_system_pdf_browser
true to use the selected PDF browser, if exists, or false to use the default
Definition: pgm_base.h:359
VTBL_ENTRY void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:179
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
void PGM_BASE::SaveCommonSettings ( )
inherited

Function saveCommonSettings saves the program (process) settings subset which are stored .kicad_common.

Definition at line 654 of file pgm_base.cpp.

References entryUseIconsInMenus, GetChars(), PGM_BASE::m_common_settings, PGM_BASE::m_local_env_vars, PGM_BASE::m_show_env_var_dialog, PGM_BASE::m_useIconsInMenus, pathEnvVariables, showEnvVarWarningDialog, traceEnvVars, and PGM_BASE::workingDirKey.

Referenced by PGM_KICAD::OnPgmExit(), OnPgmExit(), and PGM_BASE::SetLocalEnvVariables().

655 {
656  // m_common_settings is not initialized until fairly late in the
657  // process startup: InitPgm(), so test before using:
658  if( m_common_settings )
659  {
660  wxString cur_dir = wxGetCwd();
661 
662  m_common_settings->Write( workingDirKey, cur_dir );
665 
666  // Save the local environment variables.
668 
669  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
670  {
671  wxLogTrace( traceEnvVars, wxT( "Saving environment variable config entry %s as %s" ),
672  GetChars( it->first ), GetChars( it->second.GetValue() ) );
673  m_common_settings->Write( it->first, it->second.GetValue() );
674  }
675 
676  m_common_settings->SetPath( wxT( ".." ) );
677  }
678 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:65
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:382
static const wxChar workingDirKey[]
Definition: pgm_base.h:297
static const wxChar showEnvVarWarningDialog[]
Definition: pgm_base.cpp:66
static const wxChar traceEnvVars[]
enable/disable icons in menus
Definition: pgm_base.cpp:67
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:385
static const wxChar entryUseIconsInMenus[]
Definition: pgm_base.cpp:69
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
bool m_useIconsInMenus
True to use menu icons.
Definition: pgm_base.h:364
std::map< wxString, ENV_VAR_ITEM >::iterator ENV_VAR_MAP_ITER
Definition: pgm_base.h:88
void PGM_BASE::SetEditorName ( const wxString &  aFileName)
inherited

Definition at line 330 of file pgm_base.cpp.

References PGM_BASE::m_common_settings, and PGM_BASE::m_editor_name.

Referenced by PGM_BASE::GetEditorName(), and EDA_BASE_FRAME::OnSelectPreferredEditor().

331 {
332  m_editor_name = aFileName;
333  wxASSERT( m_common_settings );
334  m_common_settings->Write( wxT( "Editor" ), aFileName );
335 }
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
wxString m_editor_name
Definition: pgm_base.h:378
bool PGM_BASE::setExecutablePath ( )
protectedinherited

Function setExecutablePath finds the path to the executable and stores it in PGM_BASE::m_bin_dir.

Returns
bool - true if success, else false.

Definition at line 564 of file pgm_base.cpp.

References PGM_BASE::m_bin_dir, UNIX_STRING_DIR_SEP, and WIN_STRING_DIR_SEP.

Referenced by PGM_BASE::InitPgm().

565 {
566  m_bin_dir = wxStandardPaths::Get().GetExecutablePath();
567 
568 #ifdef __WXMAC__
569  // On OSX Pgm().GetExecutablePath() will always point to main
570  // bundle directory, e.g., /Applications/kicad.app/
571 
572  wxFileName fn( m_bin_dir );
573 
574  if( fn.GetName() == wxT( "kicad" ) )
575  {
576  // kicad launcher, so just remove the Contents/MacOS part
577  fn.RemoveLastDir();
578  fn.RemoveLastDir();
579  }
580  else
581  {
582  // standalone binaries live in Contents/Applications/<standalone>.app/Contents/MacOS
583  fn.RemoveLastDir();
584  fn.RemoveLastDir();
585  fn.RemoveLastDir();
586  fn.RemoveLastDir();
587  fn.RemoveLastDir();
588  }
589 
590  m_bin_dir = fn.GetPath() + wxT( "/" );
591 #else
592  // Use unix notation for paths. I am not sure this is a good idea,
593  // but it simplifies compatibility between Windows and Unices.
594  // However it is a potential problem in path handling under Windows.
596 
597  // Remove file name form command line:
598  while( m_bin_dir.Last() != '/' && !m_bin_dir.IsEmpty() )
599  m_bin_dir.RemoveLast();
600 #endif
601 
602  return true;
603 }
#define WIN_STRING_DIR_SEP
Definition: gestfich.h:44
#define UNIX_STRING_DIR_SEP
Definition: gestfich.h:43
wxString m_bin_dir
full path to this program
Definition: pgm_base.h:347
void PGM_BASE::SetIconsScale ( double  aValue)
inlineinherited

Scaling factor for menus and tool icons.

Definition at line 324 of file pgm_base.h.

References PGM_BASE::m_iconsScale.

324 { m_iconsScale = aValue; }
double m_iconsScale
Scaling factor for menus and tool icons.
Definition: pgm_base.h:362
bool PGM_BASE::SetLanguage ( bool  first_time = false)
inherited

Function SetLanguage sets the dictionary file name for internationalization.

The files are in kicad/internat/xx or kicad/internat/xx_XX and are named kicad.mo

Parameters
first_timemust be set to true the first time this funct is called, false otherwise
Returns
true if the language can be set (i.e. if the locale is available)

Definition at line 681 of file pgm_base.cpp.

References DIM, GetChars(), languageCfgKey, PGM_BASE::m_common_settings, LANGUAGE_DESCR::m_Lang_Label, PGM_BASE::m_language_id, PGM_BASE::m_locale, and PGM_BASE::setLanguageId().

Referenced by PGM_BASE::InitPgm(), and KIWAY::SetLanguage().

682 {
683  bool retv = true;
684 
685  if( first_time )
686  {
687  setLanguageId( wxLANGUAGE_DEFAULT );
688  // First time SetLanguage is called, the user selected language id is set
689  // from commun user config settings
690  wxString languageSel;
691 
692  m_common_settings->Read( languageCfgKey, &languageSel );
693 
694  // Search for the current selection
695  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
696  {
697  if( s_Languages[ii].m_Lang_Label == languageSel )
698  {
699  setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
700  break;
701  }
702  }
703  }
704 
705  // dictionary file name without extend (full name is kicad.mo)
706  wxString dictionaryName( wxT( "kicad" ) );
707 
708  delete m_locale;
709  m_locale = new wxLocale;
710 
711  if( !m_locale->Init( m_language_id ) )
712  {
713  wxLogDebug( wxT( "This language is not supported by the system." ) );
714 
715  setLanguageId( wxLANGUAGE_DEFAULT );
716  delete m_locale;
717 
718  m_locale = new wxLocale;
719  m_locale->Init();
720  retv = false;
721  }
722  else if( !first_time )
723  {
724  wxLogDebug( wxT( "Search for dictionary %s.mo in %s" ),
725  GetChars( dictionaryName ), GetChars( m_locale->GetName() ) );
726  }
727 
728  if( !first_time )
729  {
730  // If we are here, the user has selected an other language.
731  // Therefore the new prefered language name is stored in common config.
732  // Do NOT store the wxWidgets language Id, it can change between wxWidgets
733  // versions, for a given language
734  wxString languageSel;
735 
736  // Search for the current selection language name
737  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
738  {
739  if( s_Languages[ii].m_WX_Lang_Identifier == m_language_id )
740  {
741  languageSel = s_Languages[ii].m_Lang_Label;
742  break;
743  }
744  }
745 
746  m_common_settings->Write( languageCfgKey, languageSel );
747  }
748 
749  // Test if floating point notation is working (bug encountered in cross compilation)
750  // Make a conversion double <=> string
751  double dtst = 0.5;
752  wxString msg;
753 
754  msg << dtst;
755  double result;
756  msg.ToDouble( &result );
757 
758  if( result != dtst )
759  // string to double encode/decode does not work! Bug detected:
760  // Disable floating point localization:
761  setlocale( LC_ALL, "C" );
762 
763  if( !m_locale->IsLoaded( dictionaryName ) )
764  m_locale->AddCatalog( dictionaryName );
765 
766  if( !retv )
767  return retv;
768 
769  return m_locale->IsOk();
770 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
wxLocale * m_locale
The current locale.
Definition: pgm_base.h:353
int m_language_id
The current language setting.
Definition: pgm_base.h:356
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:367
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.cpp:92
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
static const wxChar languageCfgKey[]
Definition: pgm_base.cpp:64
static LANGUAGE_DESCR s_Languages[]
Variable s_Languages Note: because this list is not created on the fly, wxTranslation must be called ...
Definition: pgm_base.cpp:105
void PGM_BASE::setLanguageId ( int  aId)
inlineprotectedinherited

Trap all changes in here, simplifies debugging.

Definition at line 367 of file pgm_base.h.

Referenced by PGM_BASE::PGM_BASE(), PGM_BASE::SetLanguage(), and PGM_BASE::SetLanguageIdentifier().

367 { m_language_id = aId; }
int m_language_id
The current language setting.
Definition: pgm_base.h:356
void PGM_BASE::SetLanguageIdentifier ( int  menu_id)
inherited

Function SetLanguageIdentifier sets in .m_language_id member the wxWidgets language identifier Id from the KiCad menu id (internal menu identifier).

Parameters
menu_idThe KiCad menuitem id (returned by Menu Event, when clicking on a menu item)

Definition at line 773 of file pgm_base.cpp.

References DIM, and PGM_BASE::setLanguageId().

Referenced by KIWAY::SetLanguage().

774 {
775  wxLogDebug( wxT( "Select language ID %d from %d possible languages." ),
776  menu_id, DIM( s_Languages ) );
777 
778  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
779  {
780  if( menu_id == s_Languages[ii].m_KI_Lang_Identifier )
781  {
782  setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
783  break;
784  }
785  }
786 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:367
static LANGUAGE_DESCR s_Languages[]
Variable s_Languages Note: because this list is not created on the fly, wxTranslation must be called ...
Definition: pgm_base.cpp:105
void PGM_BASE::SetLanguagePath ( )
inherited

Definition at line 789 of file pgm_base.cpp.

References SystemDirsAppend().

Referenced by PGM_BASE::InitPgm().

790 {
791  SEARCH_STACK guesses;
792 
793  SystemDirsAppend( &guesses );
794 
795  // Add our internat dir to the wxLocale catalog of paths
796  for( unsigned i = 0; i < guesses.GetCount(); i++ )
797  {
798  wxFileName fn( guesses[i], wxEmptyString );
799 
800  // Append path for Windows and unix KiCad package install
801  fn.AppendDir( wxT( "share" ) );
802  fn.AppendDir( wxT( "internat" ) );
803 
804  if( fn.IsDirReadable() )
805  {
806  wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
807  wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
808  }
809 
810  // Append path for unix standard install
811  fn.RemoveLastDir();
812  fn.AppendDir( wxT( "kicad" ) );
813  fn.AppendDir( wxT( "internat" ) );
814 
815  if( fn.IsDirReadable() )
816  {
817  wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
818  wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
819  }
820  }
821 }
Class SEARCH_STACK looks for files in a number of places.
Definition: search_stack.h:41
void SystemDirsAppend(SEARCH_STACK *aSearchStack)
Function SystemDirsAppend appends system places to aSearchStack in a platform specific way...
bool PGM_BASE::SetLocalEnvVariable ( const wxString &  aName,
const wxString &  aValue 
)
inherited

Function SetLocalEnvVariable.

Sets the environment variable aName to aValue.

This function first checks to see if the environment variable aName is already defined. If it is not defined, then the environment variable aName is set to a value. Otherwise, the environment variable is left unchanged. This allows the user to override environment variables for testing purposes.

Parameters
aNameis a wxString containing the environment variable name.
aValueis a wxString containing the environment variable value.
Returns
true if the environment variable Name was set to aValue.

Definition at line 865 of file pgm_base.cpp.

References GetChars(), and traceEnvVars.

Referenced by PGM_BASE::loadCommonSettings().

866 {
867  wxString env;
868 
869  // Check to see if the environment variable is already set.
870  if( wxGetEnv( aName, &env ) )
871  {
872  wxLogTrace( traceEnvVars, wxT( "Environment variable %s already set to %s." ),
873  GetChars( aName ), GetChars( env ) );
874  return env == aValue;
875  }
876 
877  wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
878  GetChars( aName ), GetChars( aValue ) );
879 
880  return wxSetEnv( aName, aValue );
881 }
static const wxChar traceEnvVars[]
enable/disable icons in menus
Definition: pgm_base.cpp:67
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void PGM_BASE::SetLocalEnvVariables ( const ENV_VAR_MAP aEnvVarMap)
inherited

Function SetLocalEnvVariables.

sets the internal local environment variable map to aEnvVarMap, updates the entries in the .kicad_common configuration file, and sets the environment variable to the new settings.

Parameters
aEnvVarMapis a ENV_VAR_MAP object containing the new environment variables.

Definition at line 884 of file pgm_base.cpp.

References GetChars(), PGM_BASE::m_common_settings, PGM_BASE::m_local_env_vars, pathEnvVariables, PGM_BASE::SaveCommonSettings(), and traceEnvVars.

Referenced by PGM_BASE::ConfigurePaths(), and DIALOG_ENV_VAR_CONFIG::TransferDataFromWindow().

885 {
886  m_local_env_vars.clear();
887  m_local_env_vars = aEnvVarMap;
888 
889  if( m_common_settings )
890  m_common_settings->DeleteGroup( pathEnvVariables );
891 
893 
894  // Overwrites externally defined environment variable until the next time the application
895  // is run.
896  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
897  {
898  wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
899  GetChars( it->first ), GetChars( it->second.GetValue() ) );
900  wxSetEnv( it->first, it->second.GetValue() );
901  }
902 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:65
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:382
void SaveCommonSettings()
Function saveCommonSettings saves the program (process) settings subset which are stored ...
Definition: pgm_base.cpp:654
static const wxChar traceEnvVars[]
enable/disable icons in menus
Definition: pgm_base.cpp:67
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
std::map< wxString, ENV_VAR_ITEM >::iterator ENV_VAR_MAP_ITER
Definition: pgm_base.h:88
VTBL_ENTRY void PGM_BASE::SetPdfBrowserName ( const wxString &  aFileName)
inlineinherited

Definition at line 179 of file pgm_base.h.

References PGM_BASE::m_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), and PGM_BASE::ReadPdfBrowserInfos().

179 { m_pdf_browser = aFileName; }
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:377
void PGM_BASE::SetUseIconsInMenus ( bool  aUseIcons)
inlineinherited

True to use menu icons.

Definition at line 327 of file pgm_base.h.

References PGM_BASE::m_useIconsInMenus.

Referenced by EDA_BASE_FRAME::OnChangeIconsOptions().

327 { m_useIconsInMenus = aUseIcons; }
bool m_useIconsInMenus
True to use menu icons.
Definition: pgm_base.h:364
VTBL_ENTRY bool PGM_BASE::UseSystemPdfBrowser ( ) const
inlineinherited

Function UseSystemPdfBrowser returns true if the PDF browser is the default (system) PDF browser and false if the PDF browser is the preferred (selected) browser, else returns false if there is no selected browser.

Definition at line 187 of file pgm_base.h.

References PGM_BASE::m_pdf_browser, and PGM_BASE::m_use_system_pdf_browser.

188  {
189  return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
190  }
bool m_use_system_pdf_browser
true to use the selected PDF browser, if exists, or false to use the default
Definition: pgm_base.h:359
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:377
void PGM_BASE::WritePdfBrowserInfos ( )
inherited

Function WritePdfBrowserInfos saves the PDF browser choice to the common configuration.

Definition at line 54 of file eda_doc.cpp.

References PGM_BASE::GetPdfBrowserName(), PGM_BASE::m_common_settings, and PGM_BASE::m_use_system_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser(), and KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser().

55 {
56  wxASSERT( m_common_settings );
57 
58  m_common_settings->Write( wxT( "PdfBrowserName" ), GetPdfBrowserName() );
59  m_common_settings->Write( wxT( "UseSystemBrowser" ), m_use_system_pdf_browser );
60 }
VTBL_ENTRY const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:177
bool m_use_system_pdf_browser
true to use the selected PDF browser, if exists, or false to use the default
Definition: pgm_base.h:359
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344

Member Data Documentation

wxString PGM_BASE::m_bin_dir
protectedinherited

full path to this program

Definition at line 347 of file pgm_base.h.

Referenced by PGM_BASE::GetExecutablePath(), and PGM_BASE::setExecutablePath().

wxConfigBase* PGM_BASE::m_common_settings
protectedinherited
wxString PGM_BASE::m_editor_name
protectedinherited
wxSize PGM_BASE::m_help_size
protectedinherited

Definition at line 379 of file pgm_base.h.

Referenced by PGM_BASE::loadCommonSettings().

double PGM_BASE::m_iconsScale
protectedinherited

Scaling factor for menus and tool icons.

Definition at line 362 of file pgm_base.h.

Referenced by PGM_BASE::GetIconsScale(), PGM_BASE::loadCommonSettings(), PGM_BASE::PGM_BASE(), and PGM_BASE::SetIconsScale().

wxString PGM_BASE::m_kicad_env
protectedinherited

The KICAD system environment variable.

Definition at line 350 of file pgm_base.h.

Referenced by PGM_BASE::GetKicadEnvVariable(), PGM_BASE::InitPgm(), and PGM_BASE::IsKicadEnvVariableDefined().

int PGM_BASE::m_language_id
protectedinherited

The current language setting.

Definition at line 356 of file pgm_base.h.

Referenced by PGM_BASE::AddMenuLanguageList(), and PGM_BASE::SetLanguage().

ENV_VAR_MAP PGM_BASE::m_local_env_vars
protectedinherited

Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.

Definition at line 382 of file pgm_base.h.

Referenced by PGM_BASE::GetLocalEnvVariables(), PGM_BASE::InitPgm(), PGM_BASE::loadCommonSettings(), PGM_BASE::SaveCommonSettings(), and PGM_BASE::SetLocalEnvVariables().

wxLocale* PGM_BASE::m_locale
protectedinherited

The current locale.

Definition at line 353 of file pgm_base.h.

Referenced by PGM_BASE::Destroy(), PGM_BASE::GetLocale(), PGM_BASE::PGM_BASE(), and PGM_BASE::SetLanguage().

wxString PGM_BASE::m_pdf_browser
protectedinherited

The file name of the the program selected for browsing pdf files.

Definition at line 377 of file pgm_base.h.

Referenced by PGM_BASE::GetPdfBrowserName(), PGM_BASE::SetPdfBrowserName(), and PGM_BASE::UseSystemPdfBrowser().

wxSingleInstanceChecker* PGM_BASE::m_pgm_checker
protectedinherited

prevents multiple instances of a program from being run at the same time.

Definition at line 340 of file pgm_base.h.

Referenced by PGM_BASE::Destroy(), PGM_BASE::InitPgm(), and PGM_BASE::PGM_BASE().

bool PGM_BASE::m_show_env_var_dialog
protectedinherited

Flag to indicate if the environment variable overwrite warning dialog should be shown.

Definition at line 385 of file pgm_base.h.

Referenced by PGM_BASE::ConfigurePaths(), PGM_BASE::loadCommonSettings(), PGM_BASE::PGM_BASE(), and PGM_BASE::SaveCommonSettings().

bool PGM_BASE::m_use_system_pdf_browser
protectedinherited

true to use the selected PDF browser, if exists, or false to use the default

Definition at line 359 of file pgm_base.h.

Referenced by PGM_BASE::ForceSystemPdfBrowser(), PGM_BASE::ReadPdfBrowserInfos(), PGM_BASE::UseSystemPdfBrowser(), and PGM_BASE::WritePdfBrowserInfos().

bool PGM_BASE::m_useIconsInMenus
protectedinherited
const wxChar PGM_BASE::workingDirKey = wxT( "WorkingDir" )
staticinherited

Definition at line 297 of file pgm_base.h.

Referenced by PGM_BASE::SaveCommonSettings().


The documentation for this struct was generated from the following file: