KiCad PCB EDA Suite
PGM_BASE Class Referenceabstract

Class PGM_BASE keeps program (whole process) data for KiCad programs. More...

#include <pgm_base.h>

Inheritance diagram for PGM_BASE:
PGM_KICAD PGM_SINGLE_TOP

Public Member Functions

 PGM_BASE ()
 
virtual ~PGM_BASE ()
 
VTBL_ENTRY void MacOpenFile (const wxString &aFileName)=0
 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

Class PGM_BASE keeps program (whole process) data for KiCad programs.

The VTBL_ENTRY functions are VTBL_ENTRY so we can do cross module calls without linking to them. This used to be a wxApp derivative, but that is difficult under wxPython which shapes the wxApp. So now this is a "side-car" (like a motorcycle side-car) object with a back pointer into the wxApp which initializes it.

OnPgmStart() is virtual, may be overridden, and parallels wxApp::OnInit(), from where it should called.

OnPgmEnd() is virtual, may be overridden, and parallels wxApp::OnExit(), from where it should be called.

Definition at line 107 of file pgm_base.h.

Constructor & Destructor Documentation

PGM_BASE::PGM_BASE ( )

Definition at line 286 of file pgm_base.cpp.

References ForceSystemPdfBrowser(), m_common_settings, m_locale, m_pgm_checker, m_show_env_var_dialog, and setLanguageId().

287 {
288  m_pgm_checker = NULL;
289  m_locale = NULL;
290  m_common_settings = NULL;
291 
292  m_show_env_var_dialog = true;
293 
294  setLanguageId( wxLANGUAGE_DEFAULT );
295 
296  ForceSystemPdfBrowser( false );
297 }
wxLocale * m_locale
The current locale.
Definition: pgm_base.h:353
VTBL_ENTRY void ForceSystemPdfBrowser(bool aFlg)
Function ForceSystemPdfBrowser forces the use of system PDF browser, even if a preferred PDF browser ...
Definition: pgm_base.h:196
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:385
wxSingleInstanceChecker * m_pgm_checker
prevents multiple instances of a program from being run at the same time.
Definition: pgm_base.h:340
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:367
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:344
PGM_BASE::~PGM_BASE ( )
virtual

Definition at line 300 of file pgm_base.cpp.

References Destroy().

301 {
302  Destroy();
303 }
void Destroy()
Definition: pgm_base.cpp:306

Member Function Documentation

void PGM_BASE::AddMenuLanguageList ( wxMenu *  MasterMenu)

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 816 of file pgm_base.cpp.

References AddMenuItem(), DIM, ID_LANGUAGE_CHOICE, KiBitmap(), LANGUAGE_DESCR::m_Lang_Label, and 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().

817 {
818  wxMenu* menu = NULL;
819  wxMenuItem* item = MasterMenu->FindItem( ID_LANGUAGE_CHOICE );
820 
821  if( item ) // This menu exists, do nothing
822  return;
823 
824  menu = new wxMenu;
825 
826  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
827  {
828  wxString label;
829 
830  if( s_Languages[ii].m_DoNotTranslate )
831  label = s_Languages[ii].m_Lang_Label;
832  else
833  label = wxGetTranslation( s_Languages[ii].m_Lang_Label );
834 
835  AddMenuItem( menu, s_Languages[ii].m_KI_Lang_Identifier,
836  label, KiBitmap(s_Languages[ii].m_Lang_Icon ),
837  wxITEM_CHECK );
838  }
839 
840  AddMenuItem( MasterMenu, menu,
842  _( "Set Language" ),
843  _( "Select application language (only for testing)" ),
844  KiBitmap( language_xpm ) );
845 
846  // Set Check mark on current selected language
847  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
848  {
849  if( m_language_id == s_Languages[ii].m_WX_Lang_Identifier )
850  menu->Check( s_Languages[ii].m_KI_Lang_Identifier, true );
851  else
852  menu->Check( s_Languages[ii].m_KI_Lang_Identifier, false );
853  }
854 }
#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 ( )

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 321 of file pgm_base.cpp.

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

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

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 373 of file pgm_base.cpp.

References EDA_FILE_SELECTOR(), and name.

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

374 {
375  // Create a mask representing the executable files in the current platform
376 #ifdef __WINDOWS__
377  wxString mask( _( "Executable file (*.exe)|*.exe" ) );
378 #else
379  wxString mask( _( "Executable file (*)|*" ) );
380 #endif
381 
382  // Extract the path, name and extension from the default editor (even if the editor's
383  // name was empty, this method will succeed and return empty strings).
384  wxString path, name, ext;
385  wxFileName::SplitPath( aDefaultEditor, &path, &name, &ext );
386 
387  // Show the modal editor and return the file chosen (may be empty if the user cancels
388  // the dialog).
389  return EDA_FILE_SELECTOR( _( "Select Preferred Editor" ), path,
390  name, ext, mask,
391  NULL, wxFD_OPEN | wxFD_FILE_MUST_EXIST,
392  true );
393 }
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)

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 897 of file pgm_base.cpp.

References DIALOG_ENV_VAR_CONFIG::ExternalDefsChanged(), GetChars(), DIALOG_ENV_VAR_CONFIG::GetEnvVarMap(), GetLocalEnvVariables(), m_show_env_var_dialog, 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().

898 {
899  DIALOG_ENV_VAR_CONFIG dlg_envvars( aParent, GetLocalEnvVariables() );
900 
901  if( dlg_envvars.ShowModal() == wxID_CANCEL )
902  return;
903 
904  ENV_VAR_MAP envVarMap = dlg_envvars.GetEnvVarMap();
905 
906  for( ENV_VAR_MAP_ITER it = envVarMap.begin(); it != envVarMap.end(); ++it )
907  {
908  wxLogTrace( traceEnvVars, wxT( "Environment variable %s=%s defined externally = %d" ),
909  GetChars( it->first ), GetChars( it->second.GetValue() ),
910  it->second.GetDefinedExternally() );
911  }
912 
913  // If any of the environment variables are defined externally, warn the user that the
914  // next time kicad is run that the externally defined variables will be used instead of
915  // the user's settings. This is by design.
916  if( dlg_envvars.ExternalDefsChanged() && m_show_env_var_dialog )
917  {
918  wxString msg1 = _( "Warning! Some of paths you have configured have been defined \n"
919  "externally to the running process and will be temporarily overwritten." );
920  wxString msg2 = _( "The next time KiCad is launched, any paths that have already\n"
921  "been defined are honored and any settings defined in the path\n"
922  "configuration dialog are ignored. If you did not intend for this\n"
923  "behavior, either rename any conflicting entries or remove the\n"
924  "external environment variable definition(s) from your system." );
925  wxRichMessageDialog dlg( aParent, msg1, _( "Warning" ), wxOK | wxCENTRE );
926  dlg.ShowDetailedText( msg2 );
927  dlg.ShowCheckBox( _( "Do not show this message again." ) );
928  dlg.ShowModal();
929  m_show_env_var_dialog = !dlg.IsCheckBoxChecked();
930  }
931 
932  SetLocalEnvVariables( dlg_envvars.GetEnvVarMap() );
933 }
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:876
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 ( )

Definition at line 306 of file pgm_base.cpp.

References m_common_settings, m_locale, and m_pgm_checker.

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

307 {
308  // unlike a normal destructor, this is designed to be called more than once safely:
309 
310  delete m_common_settings;
311  m_common_settings = 0;
312 
313  delete m_pgm_checker;
314  m_pgm_checker = 0;
315 
316  delete m_locale;
317  m_locale = 0;
318 }
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)
inline

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 m_use_system_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser(), KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), and 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)

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 336 of file pgm_base.cpp.

References AskUserForPreferredEditor(), DisplayInfoMessage(), m_editor_name, and 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().

337 {
338  wxString editorname = m_editor_name;
339 
340  if( !editorname )
341  {
342  if( !wxGetEnv( wxT( "EDITOR" ), &editorname ) )
343  {
344  // If there is no EDITOR variable set, try the desktop default
345 #ifdef __WXMAC__
346  editorname = "/usr/bin/open";
347 #elif __WXX11__
348  editorname = "/usr/bin/xdg-open";
349 #endif
350  }
351  }
352 
353  // If we still don't have an editor name show a dialog asking the user to select one
354  if( !editorname && aCanShowFileChooser )
355  {
356  DisplayInfoMessage( NULL,
357  _( "No default editor found, you must choose it" ) );
358 
359  editorname = AskUserForPreferredEditor();
360  }
361 
362  // If we finally have a new editor name request it to be copied to m_editor_name and
363  // saved to the preferences file.
364  if( !editorname.IsEmpty() )
365  SetEditorName( editorname );
366 
367  // m_editor_name already has the same value that editorname, or empty if no editor was
368  // found/chosen.
369  return m_editor_name;
370 }
VTBL_ENTRY void SetEditorName(const wxString &aFileName)
Definition: pgm_base.cpp:328
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:373
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
inline
double PGM_BASE::GetIconsScale ( )
inline

Definition at line 325 of file pgm_base.h.

References 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
inline

Definition at line 171 of file pgm_base.h.

References 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 ( )
inline

Definition at line 175 of file pgm_base.h.

References 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
inline

Definition at line 270 of file pgm_base.h.

References m_local_env_vars.

Referenced by ConfigurePaths(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), 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
inline

Definition at line 177 of file pgm_base.h.

References m_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), OpenPDF(), and 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 ( )
inline

Definition at line 328 of file pgm_base.h.

References m_useIconsInMenus.

Referenced by AddMenuItem().

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

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 396 of file pgm_base.cpp.

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

Referenced by PGM_KICAD::OnPgmInit(), and PGM_SINGLE_TOP::OnPgmInit().

397 {
398  wxFileName pgm_name( App().argv[0] );
399 
400  wxConfigBase::DontCreateOnDemand();
401 
402  wxInitAllImageHandlers();
403 
404  m_pgm_checker = new wxSingleInstanceChecker( pgm_name.GetName().Lower() + wxT( "-" ) +
405  wxGetUserId(), GetKicadLockFilePath() );
406 
407  if( m_pgm_checker->IsAnotherRunning() )
408  {
409  wxString quiz = wxString::Format(
410  _( "%s is already running, Continue?" ),
411  GetChars( pgm_name.GetName() )
412  );
413 
414  if( !IsOK( NULL, quiz ) )
415  return false;
416  }
417 
418  // Init KiCad environment
419  // the environment variable KICAD (if exists) gives the kicad path:
420  // something like set KICAD=d:\kicad
421  bool isDefined = wxGetEnv( wxT( "KICAD" ), &m_kicad_env );
422 
423  if( isDefined ) // ensure m_kicad_env ends by "/"
424  {
426 
427  if( !m_kicad_env.IsEmpty() && m_kicad_env.Last() != '/' )
429  }
430 
431  // Init parameters for configuration
432  App().SetVendorName( wxT( "KiCad" ) );
433  App().SetAppName( pgm_name.GetName().Lower() );
434 
435  // Install some image handlers, mainly for help
436  if( wxImage::FindHandler( wxBITMAP_TYPE_PNG ) == NULL )
437  wxImage::AddHandler( new wxPNGHandler );
438 
439  if( wxImage::FindHandler( wxBITMAP_TYPE_GIF ) == NULL )
440  wxImage::AddHandler( new wxGIFHandler );
441 
442  if( wxImage::FindHandler( wxBITMAP_TYPE_JPEG ) == NULL )
443  wxImage::AddHandler( new wxJPEGHandler );
444 
445  wxFileSystem::AddHandler( new wxZipFSHandler );
446 
447  // Analyze the command line & initialize the binary path
449 
450  SetLanguagePath();
451 
452  // OS specific instantiation of wxConfigBase derivative:
454 
455  // Only define the default environment variable if they haven't been set in the
456  // .kicad_common configuration file.
458  {
459  wxString envVarName = wxT( "KIGITHUB" );
460  ENV_VAR_ITEM envVarItem;
461  wxString envValue;
462  wxFileName tmpFileName;
463 
464  envVarItem.SetValue( wxString( wxT( "https://github.com/KiCad" ) ) );
465  envVarItem.SetDefinedExternally( wxGetEnv( envVarName, NULL ) );
466  m_local_env_vars[ envVarName ] = envVarItem;
467 
468  wxFileName baseSharePath;
469  baseSharePath.AssignDir( wxString( wxT( DEFAULT_INSTALL_PATH ) ) );
470 
471 #if !defined( __WXMAC__ )
472  baseSharePath.AppendDir( wxT( "share" ) );
473  baseSharePath.AppendDir( wxT( "kicad" ) );
474 #endif
475 
476  // KISYSMOD
477  envVarName = wxT( "KISYSMOD" );
478  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
479  {
480  tmpFileName.AssignDir( envValue );
481  envVarItem.SetDefinedExternally( true );
482  }
483  else
484  {
485  tmpFileName = baseSharePath;
486  tmpFileName.AppendDir( wxT( "modules" ) );
487  envVarItem.SetDefinedExternally( false );
488  }
489  envVarItem.SetValue( tmpFileName.GetFullPath() );
490  m_local_env_vars[ envVarName ] = envVarItem;
491 
492  // KISYS3DMOD
493  envVarName = wxT( "KISYS3DMOD" );
494  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
495  {
496  tmpFileName.AssignDir( envValue );
497  envVarItem.SetDefinedExternally( true );
498  }
499  else
500  {
501  tmpFileName.AppendDir( wxT( "packages3d" ) );
502  envVarItem.SetDefinedExternally( false );
503  }
504  envVarItem.SetValue( tmpFileName.GetFullPath() );
505  m_local_env_vars[ envVarName ] = envVarItem;
506 
507  // KICAD_PTEMPLATES
508  envVarName = wxT( "KICAD_PTEMPLATES" );
509  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
510  {
511  tmpFileName.AssignDir( envValue );
512  envVarItem.SetDefinedExternally( true );
513  }
514  else
515  {
516  tmpFileName = baseSharePath;
517  tmpFileName.AppendDir( wxT( "template" ) );
518  envVarItem.SetDefinedExternally( false );
519  }
520  envVarItem.SetValue( tmpFileName.GetFullPath() );
521  m_local_env_vars[ envVarName ] = envVarItem;
522 
523  // KICAD_SYMBOLS
524  envVarName = wxT( "KICAD_SYMBOL_DIR" );
525  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
526  {
527  tmpFileName.AssignDir( envValue );
528  envVarItem.SetDefinedExternally( true );
529  }
530  else
531  {
532  tmpFileName = baseSharePath;
533  tmpFileName.AppendDir( wxT( "library" ) );
534  envVarItem.SetDefinedExternally( false );
535  }
536  envVarItem.SetValue( tmpFileName.GetFullPath() );
537  m_local_env_vars[ envVarName ] = envVarItem;
538  }
539 
540  ReadPdfBrowserInfos(); // needs m_common_settings
541 
542  // Init user language *before* calling loadCommonSettings, because
543  // env vars could be incorrectly initialized on Linux
544  // (if the value contains some non ASCII7 chars, the env var is not initialized)
545  SetLanguage( true );
546 
548 
549 #ifdef __WXMAC__
550  // Always show filters on Open dialog to be able to choose plugin
551  wxSystemOptions::SetOption( wxOSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1 );
552 #endif
553 
554  return true;
555 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:65
void loadCommonSettings()
Function loadCommonSettings loads the program (process) settings subset which are stored in ...
Definition: pgm_base.cpp:600
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:321
bool setExecutablePath()
Function setExecutablePath finds the path to the executable and stores it in PGM_BASE::m_bin_dir.
Definition: pgm_base.cpp:558
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:781
VTBL_ENTRY bool SetLanguage(bool first_time=false)
Function SetLanguage sets the dictionary file name for internationalization.
Definition: pgm_base.cpp:673
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
inline

Definition at line 169 of file pgm_base.h.

References 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 ( )
protected

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

Definition at line 600 of file pgm_base.cpp.

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

Referenced by InitPgm().

601 {
602  wxASSERT( m_common_settings );
603 
604  m_help_size.x = 500;
605  m_help_size.y = 400;
606  m_iconsScale = 1.0;
607 
608 #if defined( __WXMAC__ )
609  m_useIconsInMenus = false;
610 #else
611  m_useIconsInMenus = true;
612 #endif
613 
616 
617  m_editor_name = m_common_settings->Read( wxT( "Editor" ) );
618 
619  wxString entry, oldPath;
620  wxArrayString entries;
621  long index = 0L;
622 
623  oldPath = m_common_settings->GetPath();
625 
626  while( m_common_settings->GetNextEntry( entry, index ) )
627  {
628  wxLogTrace( traceEnvVars,
629  wxT( "Enumerating over entry %s, %ld." ), GetChars( entry ), index );
630  entries.Add( entry );
631  }
632 
633  for( unsigned i = 0; i < entries.GetCount(); i++ )
634  {
635  wxString val = m_common_settings->Read( entries[i], wxEmptyString );
636  m_local_env_vars[ entries[i] ] = ENV_VAR_ITEM( val, wxGetEnv( entries[i], NULL ) );
637  }
638 
639  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
640  SetLocalEnvVariable( it->first, it->second.GetValue() );
641 
642  m_common_settings->SetPath( oldPath );
643 }
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:857
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
VTBL_ENTRY void PGM_BASE::MacOpenFile ( const wxString &  aFileName)
pure virtual

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

Implemented in PGM_SINGLE_TOP, and PGM_KICAD.

Referenced by APP_KICAD::MacOpenFile().

void PGM_BASE::ReadPdfBrowserInfos ( )

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

Definition at line 41 of file eda_doc.cpp.

References m_common_settings, m_use_system_pdf_browser, and SetPdfBrowserName().

Referenced by 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 ( )

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

Definition at line 646 of file pgm_base.cpp.

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

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

647 {
648  // m_common_settings is not initialized until fairly late in the
649  // process startup: InitPgm(), so test before using:
650  if( m_common_settings )
651  {
652  wxString cur_dir = wxGetCwd();
653 
654  m_common_settings->Write( workingDirKey, cur_dir );
657 
658  // Save the local environment variables.
660 
661  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
662  {
663  wxLogTrace( traceEnvVars, wxT( "Saving environment variable config entry %s as %s" ),
664  GetChars( it->first ), GetChars( it->second.GetValue() ) );
665  m_common_settings->Write( it->first, it->second.GetValue() );
666  }
667 
668  m_common_settings->SetPath( wxT( ".." ) );
669  }
670 }
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)

Definition at line 328 of file pgm_base.cpp.

References m_common_settings, and m_editor_name.

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

329 {
330  m_editor_name = aFileName;
331  wxASSERT( m_common_settings );
332  m_common_settings->Write( wxT( "Editor" ), aFileName );
333 }
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 ( )
protected

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 558 of file pgm_base.cpp.

References m_bin_dir, UNIX_STRING_DIR_SEP, and WIN_STRING_DIR_SEP.

Referenced by InitPgm().

559 {
560  m_bin_dir = wxStandardPaths::Get().GetExecutablePath();
561 
562 #ifdef __WXMAC__
563  // On OSX Pgm().GetExecutablePath() will always point to main
564  // bundle directory, e.g., /Applications/kicad.app/
565 
566  wxFileName fn( m_bin_dir );
567 
568  if( fn.GetName() == wxT( "kicad" ) )
569  {
570  // kicad launcher, so just remove the Contents/MacOS part
571  fn.RemoveLastDir();
572  fn.RemoveLastDir();
573  }
574  else
575  {
576  // standalone binaries live in Contents/Applications/<standalone>.app/Contents/MacOS
577  fn.RemoveLastDir();
578  fn.RemoveLastDir();
579  fn.RemoveLastDir();
580  fn.RemoveLastDir();
581  fn.RemoveLastDir();
582  }
583 
584  m_bin_dir = fn.GetPath() + wxT( "/" );
585 #else
586  // Use unix notation for paths. I am not sure this is a good idea,
587  // but it simplifies compatibility between Windows and Unices.
588  // However it is a potential problem in path handling under Windows.
590 
591  // Remove file name form command line:
592  while( m_bin_dir.Last() != '/' && !m_bin_dir.IsEmpty() )
593  m_bin_dir.RemoveLast();
594 #endif
595 
596  return true;
597 }
#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)
inline

Scaling factor for menus and tool icons.

Definition at line 324 of file pgm_base.h.

References 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)

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 673 of file pgm_base.cpp.

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

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

674 {
675  bool retv = true;
676 
677  if( first_time )
678  {
679  setLanguageId( wxLANGUAGE_DEFAULT );
680  // First time SetLanguage is called, the user selected language id is set
681  // from commun user config settings
682  wxString languageSel;
683 
684  m_common_settings->Read( languageCfgKey, &languageSel );
685 
686  // Search for the current selection
687  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
688  {
689  if( s_Languages[ii].m_Lang_Label == languageSel )
690  {
691  setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
692  break;
693  }
694  }
695  }
696 
697  // dictionary file name without extend (full name is kicad.mo)
698  wxString dictionaryName( wxT( "kicad" ) );
699 
700  delete m_locale;
701  m_locale = new wxLocale;
702 
703  if( !m_locale->Init( m_language_id ) )
704  {
705  wxLogDebug( wxT( "This language is not supported by the system." ) );
706 
707  setLanguageId( wxLANGUAGE_DEFAULT );
708  delete m_locale;
709 
710  m_locale = new wxLocale;
711  m_locale->Init();
712  retv = false;
713  }
714  else if( !first_time )
715  {
716  wxLogDebug( wxT( "Search for dictionary %s.mo in %s" ),
717  GetChars( dictionaryName ), GetChars( m_locale->GetName() ) );
718  }
719 
720  if( !first_time )
721  {
722  // If we are here, the user has selected an other language.
723  // Therefore the new prefered language name is stored in common config.
724  // Do NOT store the wxWidgets language Id, it can change between wxWidgets
725  // versions, for a given language
726  wxString languageSel;
727 
728  // Search for the current selection language name
729  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
730  {
731  if( s_Languages[ii].m_WX_Lang_Identifier == m_language_id )
732  {
733  languageSel = s_Languages[ii].m_Lang_Label;
734  break;
735  }
736  }
737 
738  m_common_settings->Write( languageCfgKey, languageSel );
739  }
740 
741  // Test if floating point notation is working (bug encountered in cross compilation)
742  // Make a conversion double <=> string
743  double dtst = 0.5;
744  wxString msg;
745 
746  msg << dtst;
747  double result;
748  msg.ToDouble( &result );
749 
750  if( result != dtst )
751  // string to double encode/decode does not work! Bug detected:
752  // Disable floating point localization:
753  setlocale( LC_ALL, "C" );
754 
755  if( !m_locale->IsLoaded( dictionaryName ) )
756  m_locale->AddCatalog( dictionaryName );
757 
758  if( !retv )
759  return retv;
760 
761  return m_locale->IsOk();
762 }
#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)
inlineprotected

Trap all changes in here, simplifies debugging.

Definition at line 367 of file pgm_base.h.

Referenced by PGM_BASE(), SetLanguage(), and 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)

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 765 of file pgm_base.cpp.

References DIM, and setLanguageId().

Referenced by KIWAY::SetLanguage().

766 {
767  wxLogDebug( wxT( "Select language ID %d from %d possible languages." ),
768  menu_id, DIM( s_Languages ) );
769 
770  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
771  {
772  if( menu_id == s_Languages[ii].m_KI_Lang_Identifier )
773  {
774  setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
775  break;
776  }
777  }
778 }
#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 ( )

Definition at line 781 of file pgm_base.cpp.

References SystemDirsAppend().

Referenced by InitPgm().

782 {
783  SEARCH_STACK guesses;
784 
785  SystemDirsAppend( &guesses );
786 
787  // Add our internat dir to the wxLocale catalog of paths
788  for( unsigned i = 0; i < guesses.GetCount(); i++ )
789  {
790  wxFileName fn( guesses[i], wxEmptyString );
791 
792  // Append path for Windows and unix KiCad package install
793  fn.AppendDir( wxT( "share" ) );
794  fn.AppendDir( wxT( "internat" ) );
795 
796  if( fn.IsDirReadable() )
797  {
798  wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
799  wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
800  }
801 
802  // Append path for unix standard install
803  fn.RemoveLastDir();
804  fn.AppendDir( wxT( "kicad" ) );
805  fn.AppendDir( wxT( "internat" ) );
806 
807  if( fn.IsDirReadable() )
808  {
809  wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
810  wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
811  }
812  }
813 }
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 
)

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 857 of file pgm_base.cpp.

References GetChars(), and traceEnvVars.

Referenced by loadCommonSettings().

858 {
859  wxString env;
860 
861  // Check to see if the environment variable is already set.
862  if( wxGetEnv( aName, &env ) )
863  {
864  wxLogTrace( traceEnvVars, wxT( "Environment variable %s already set to %s." ),
865  GetChars( aName ), GetChars( env ) );
866  return env == aValue;
867  }
868 
869  wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
870  GetChars( aName ), GetChars( aValue ) );
871 
872  return wxSetEnv( aName, aValue );
873 }
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)

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 876 of file pgm_base.cpp.

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

Referenced by ConfigurePaths().

877 {
878  m_local_env_vars.clear();
879  m_local_env_vars = aEnvVarMap;
880 
881  if( m_common_settings )
882  m_common_settings->DeleteGroup( pathEnvVariables );
883 
885 
886  // Overwrites externally defined environment variable until the next time the application
887  // is run.
888  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
889  {
890  wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
891  GetChars( it->first ), GetChars( it->second.GetValue() ) );
892  wxSetEnv( it->first, it->second.GetValue() );
893  }
894 }
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:646
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)
inline

Definition at line 179 of file pgm_base.h.

References m_pdf_browser.

Referenced by KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser(), and 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)
inline

True to use menu icons.

Definition at line 327 of file pgm_base.h.

References 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
inline

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 m_pdf_browser, and 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 ( )

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

Definition at line 54 of file eda_doc.cpp.

References GetPdfBrowserName(), m_common_settings, and 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
protected

full path to this program

Definition at line 347 of file pgm_base.h.

Referenced by GetExecutablePath(), and setExecutablePath().

wxConfigBase* PGM_BASE::m_common_settings
protected

Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.

Definition at line 344 of file pgm_base.h.

Referenced by CommonSettings(), Destroy(), InitPgm(), loadCommonSettings(), PGM_BASE(), ReadPdfBrowserInfos(), SaveCommonSettings(), SetEditorName(), SetLanguage(), SetLocalEnvVariables(), and WritePdfBrowserInfos().

wxString PGM_BASE::m_editor_name
protected

Definition at line 378 of file pgm_base.h.

Referenced by GetEditorName(), loadCommonSettings(), and SetEditorName().

wxSize PGM_BASE::m_help_size
protected

Definition at line 379 of file pgm_base.h.

Referenced by loadCommonSettings().

double PGM_BASE::m_iconsScale
protected

Scaling factor for menus and tool icons.

Definition at line 362 of file pgm_base.h.

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

wxString PGM_BASE::m_kicad_env
protected

The KICAD system environment variable.

Definition at line 350 of file pgm_base.h.

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

int PGM_BASE::m_language_id
protected

The current language setting.

Definition at line 356 of file pgm_base.h.

Referenced by AddMenuLanguageList(), and SetLanguage().

ENV_VAR_MAP PGM_BASE::m_local_env_vars
protected

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

Definition at line 382 of file pgm_base.h.

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

wxLocale* PGM_BASE::m_locale
protected

The current locale.

Definition at line 353 of file pgm_base.h.

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

wxString PGM_BASE::m_pdf_browser
protected

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

Definition at line 377 of file pgm_base.h.

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

wxSingleInstanceChecker* PGM_BASE::m_pgm_checker
protected

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

Definition at line 340 of file pgm_base.h.

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

bool PGM_BASE::m_show_env_var_dialog
protected

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

Definition at line 385 of file pgm_base.h.

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

bool PGM_BASE::m_use_system_pdf_browser
protected

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 ForceSystemPdfBrowser(), ReadPdfBrowserInfos(), UseSystemPdfBrowser(), and WritePdfBrowserInfos().

bool PGM_BASE::m_useIconsInMenus
protected

True to use menu icons.

Definition at line 364 of file pgm_base.h.

Referenced by GetUseIconsInMenus(), loadCommonSettings(), SaveCommonSettings(), and SetUseIconsInMenus().

const wxChar PGM_BASE::workingDirKey = wxT( "WorkingDir" )
static

Definition at line 297 of file pgm_base.h.

Referenced by SaveCommonSettings().


The documentation for this class was generated from the following files: