KiCad PCB EDA Suite
PGM_KICAD Class Reference

Class PGM_KICAD extends PGM_BASE to bring in FileHistory() and PdfBrowser() which were moved from EDA_APP into KIFACE_I. More...

#include <pgm_kicad.h>

Inheritance diagram for PGM_KICAD:
PGM_BASE

Public Member Functions

 PGM_KICAD ()
 
 ~PGM_KICAD () throw ()
 
bool OnPgmInit ()
 
void OnPgmExit ()
 
void MacOpenFile (const wxString &aFileName) override
 Function MacOpenFile is specific to MacOSX (not used under Linux or Windows). More...
 
wxFileHistory & GetFileHistory ()
 
wxConfigBase * PgmSettings ()
 
SEARCH_STACKSysSearch ()
 
wxString GetHelpFileName ()
 
void Destroy ()
 
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 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 SaveCommonSettings ()
 Function saveCommonSettings saves the program (process) settings subset which are stored .kicad_common. More...
 

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

BIN_MOD m_bm
 
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...
 
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_KICAD extends PGM_BASE to bring in FileHistory() and PdfBrowser() which were moved from EDA_APP into KIFACE_I.

KIFACE_I is not applicable in the project manager since it is not a KIFACE. This header is in the kicad directory since nobody else needs to know about it.

Definition at line 40 of file pgm_kicad.h.

Constructor & Destructor Documentation

PGM_KICAD::PGM_KICAD ( )
inline

Definition at line 43 of file pgm_kicad.h.

43  :
44  m_bm( "kicad" ) // indicates a "$HOME/.kicad wxConfig like" config file.
45  {}
BIN_MOD m_bm
Definition: pgm_kicad.h:72
PGM_KICAD::~PGM_KICAD ( )
throw (
)
inline

Definition at line 47 of file pgm_kicad.h.

References Destroy(), MacOpenFile(), OnPgmExit(), and OnPgmInit().

48  {
49  Destroy();
50  }
void Destroy()
Definition: kicad.cpp:200

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

References AddMenuItem(), DIM, ID_LANGUAGE_CHOICE, KiBitmap(), LANGUAGE_DESCR::m_DoNotTranslate, LANGUAGE_DESCR::m_KI_Lang_Identifier, LANGUAGE_DESCR::m_Lang_Icon, LANGUAGE_DESCR::m_Lang_Label, and LANGUAGE_DESCR::m_WX_Lang_Identifier.

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

760 {
761  wxMenu* menu = NULL;
762  wxMenuItem* item = MasterMenu->FindItem( ID_LANGUAGE_CHOICE );
763 
764  if( item ) // This menu exists, do nothing
765  return;
766 
767  menu = new wxMenu;
768 
769  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
770  {
771  wxString label;
772 
773  if( s_Languages[ii].m_DoNotTranslate )
774  label = s_Languages[ii].m_Lang_Label;
775  else
776  label = wxGetTranslation( s_Languages[ii].m_Lang_Label );
777 
778  AddMenuItem( menu, s_Languages[ii].m_KI_Lang_Identifier,
779  label, KiBitmap(s_Languages[ii].m_Lang_Icon ),
780  wxITEM_CHECK );
781  }
782 
783  AddMenuItem( MasterMenu, menu,
785  _( "Set Language" ),
786  _( "Select application language (only for testing)" ),
787  KiBitmap( language_xpm ) );
788 
789  // Set Check mark on current selected language
790  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
791  {
792  if( m_language_id == s_Languages[ii].m_WX_Lang_Identifier )
793  menu->Check( s_Languages[ii].m_KI_Lang_Identifier, true );
794  else
795  menu->Check( s_Languages[ii].m_KI_Lang_Identifier, false );
796  }
797 }
#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:175
int m_language_id
The current language setting.
Definition: pgm_base.h:352
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:78
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.cpp:90
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:103
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 165 of file pgm_base.cpp.

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

166 {
167  wxASSERT( wxTheApp );
168  return *wxTheApp;
169 }
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 217 of file pgm_base.cpp.

References EDA_FILE_SELECTOR(), and name.

Referenced by PANEL_COMMON_SETTINGS::OnTextEditorClick().

218 {
219  // Create a mask representing the executable files in the current platform
220 #ifdef __WINDOWS__
221  wxString mask( _( "Executable file (*.exe)|*.exe" ) );
222 #else
223  wxString mask( _( "Executable file (*)|*" ) );
224 #endif
225 
226  // Extract the path, name and extension from the default editor (even if the editor's
227  // name was empty, this method will succeed and return empty strings).
228  wxString path, name, ext;
229  wxFileName::SplitPath( aDefaultEditor, &path, &name, &ext );
230 
231  // Show the modal editor and return the file chosen (may be empty if the user cancels
232  // the dialog).
233  return EDA_FILE_SELECTOR( _( "Select Preferred Editor" ), path,
234  name, ext, mask,
235  NULL, wxFD_OPEN | wxFD_FILE_MUST_EXIST,
236  true );
237 }
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
Definition: DXF_plotter.cpp:61
void PGM_KICAD::Destroy ( )

Definition at line 200 of file kicad.cpp.

References PGM_BASE::Destroy(), BIN_MOD::End(), KFCTL_CPP_PROJECT_SUITE, Kiway, m_bm, and Pgm().

Referenced by GetHelpFileName(), OnPgmExit(), and ~PGM_KICAD().

201 {
202  // unlike a normal destructor, this is designed to be called more
203  // than once safely:
204 
205  m_bm.End();
206 
208 }
void Destroy()
Definition: pgm_base.cpp:150
BIN_MOD m_bm
Definition: pgm_kicad.h:72
void End()
Definition: bin_mod.cpp:56
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 213 of file pgm_base.h.

References VTBL_ENTRY.

Referenced by PANEL_COMMON_SETTINGS::TransferDataFromWindow().

213 { 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:355
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 180 of file pgm_base.cpp.

References DisplayInfoMessage().

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

181 {
182  wxString editorname = m_editor_name;
183 
184  if( !editorname )
185  {
186  if( !wxGetEnv( wxT( "EDITOR" ), &editorname ) )
187  {
188  // If there is no EDITOR variable set, try the desktop default
189 #ifdef __WXMAC__
190  editorname = "/usr/bin/open";
191 #elif __WXX11__
192  editorname = "/usr/bin/xdg-open";
193 #endif
194  }
195  }
196 
197  // If we still don't have an editor name show a dialog asking the user to select one
198  if( !editorname && aCanShowFileChooser )
199  {
200  DisplayInfoMessage( NULL,
201  _( "No default editor found, you must choose it" ) );
202 
203  editorname = AskUserForPreferredEditor();
204  }
205 
206  // If we finally have a new editor name request it to be copied to m_editor_name and
207  // saved to the preferences file.
208  if( !editorname.IsEmpty() )
209  SetEditorName( editorname );
210 
211  // m_editor_name already has the same value that editorname, or empty if no editor was
212  // found/chosen.
213  return m_editor_name;
214 }
VTBL_ENTRY void SetEditorName(const wxString &aFileName)
Definition: pgm_base.cpp:172
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:217
wxString m_editor_name
Definition: pgm_base.h:369
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Function DisplayInfoMessage displays an informational message box with aMessage.
Definition: confirm.cpp:264
VTBL_ENTRY const wxString& PGM_BASE::GetExecutablePath ( ) const
inlineinherited
wxFileHistory& PGM_KICAD::GetFileHistory ( )
inline

Definition at line 57 of file pgm_kicad.h.

References m_bm, and BIN_MOD::m_history.

Referenced by KICAD_MANAGER_FRAME::LoadProject(), KICAD_MANAGER_FRAME::OnFileHistory(), OnPgmInit(), and KICAD_MANAGER_FRAME::ReCreateMenuBar().

57 { return m_bm.m_history; }
BIN_MOD m_bm
Definition: pgm_kicad.h:72
wxFileHistory m_history
Definition: bin_mod.h:58
wxString PGM_KICAD::GetHelpFileName ( )
inline

Definition at line 63 of file pgm_kicad.h.

References Destroy(), m_bm, and BIN_MOD::m_help_file.

Referenced by KICAD_MANAGER_FRAME::help_name().

63 { return m_bm.m_help_file; }
wxString m_help_file
Definition: bin_mod.h:59
BIN_MOD m_bm
Definition: pgm_kicad.h:72
VTBL_ENTRY const wxString& PGM_BASE::GetKicadEnvVariable ( ) const
inlineinherited

Definition at line 188 of file pgm_base.h.

Referenced by FindKicadFile(), and KicadDatasPath().

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

Definition at line 192 of file pgm_base.h.

Referenced by TEMPLATE_FIELDNAME::GetDefaultFieldName(), LIB_TREE_NODE_UNIT::LIB_TREE_NODE_UNIT(), and SearchHelpFileFullPath().

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

Definition at line 287 of file pgm_base.h.

References VTBL_ENTRY.

Referenced by PANEL_SYM_LIB_TABLE::browseLibrariesHandler(), PANEL_FP_LIB_TABLE::browseLibrariesHandler(), FILENAME_RESOLVER::GetKicadPaths(), KICAD_MANAGER_FRAME::OnCreateProjectFromTemplate(), OnPgmInit(), and DIALOG_CONFIGURE_PATHS::TransferDataToWindow().

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

Definition at line 194 of file pgm_base.h.

Referenced by PANEL_COMMON_SETTINGS::OnPDFViewerClick(), OpenPDF(), and PGM_BASE::WritePdfBrowserInfos().

194 { return m_pdf_browser; }
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:368
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 240 of file pgm_base.cpp.

References SEARCH_STACK::AddPaths(), Format(), GetChars(), GetKicadLockFilePath(), GetNewConfig(), i, IsOK(), KICAD_COMMON, ENV_VAR_ITEM::SetDefinedExternally(), ENV_VAR_ITEM::SetValue(), SystemDirsAppend(), UNIX_STRING_DIR_SEP, and WIN_STRING_DIR_SEP.

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

241 {
242  wxFileName pgm_name( App().argv[0] );
243 
244  wxConfigBase::DontCreateOnDemand();
245 
246  wxInitAllImageHandlers();
247 
248  m_pgm_checker = new wxSingleInstanceChecker( pgm_name.GetName().Lower() + wxT( "-" ) +
249  wxGetUserId(), GetKicadLockFilePath() );
250 
251  if( m_pgm_checker->IsAnotherRunning() )
252  {
253  wxString quiz = wxString::Format(
254  _( "%s is already running. Continue?" ),
255  GetChars( pgm_name.GetName() )
256  );
257 
258  if( !IsOK( NULL, quiz ) )
259  return false;
260  }
261 
262  // Init KiCad environment
263  // the environment variable KICAD (if exists) gives the kicad path:
264  // something like set KICAD=d:\kicad
265  bool isDefined = wxGetEnv( wxT( "KICAD" ), &m_kicad_env );
266 
267  if( isDefined ) // ensure m_kicad_env ends by "/"
268  {
270 
271  if( !m_kicad_env.IsEmpty() && m_kicad_env.Last() != '/' )
273  }
274 
275  // Init parameters for configuration
276  App().SetVendorName( wxT( "KiCad" ) );
277  App().SetAppName( pgm_name.GetName().Lower() );
278 
279  // Install some image handlers, mainly for help
280  if( wxImage::FindHandler( wxBITMAP_TYPE_PNG ) == NULL )
281  wxImage::AddHandler( new wxPNGHandler );
282 
283  if( wxImage::FindHandler( wxBITMAP_TYPE_GIF ) == NULL )
284  wxImage::AddHandler( new wxGIFHandler );
285 
286  if( wxImage::FindHandler( wxBITMAP_TYPE_JPEG ) == NULL )
287  wxImage::AddHandler( new wxJPEGHandler );
288 
289  wxFileSystem::AddHandler( new wxZipFSHandler );
290 
291  // Analyze the command line & initialize the binary path
293 
294  SetLanguagePath();
295 
296  // OS specific instantiation of wxConfigBase derivative:
298 
299  wxString envVarName = wxT( "KIGITHUB" );
300  ENV_VAR_ITEM envVarItem;
301  wxString envValue;
302  wxFileName tmpFileName;
303 
304  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
305  {
306  tmpFileName.AssignDir( envValue );
307  envVarItem.SetDefinedExternally( true );
308  }
309  else
310  {
311  envVarItem.SetValue( wxString( wxT( "https://github.com/KiCad" ) ) );
312  envVarItem.SetDefinedExternally( false );
313  }
314 
315  m_local_env_vars[ envVarName ] = envVarItem;
316 
317  wxFileName baseSharePath;
318 #if defined( __WXMSW__ )
319  // Make the paths relative to the executable dir as KiCad might be installed anywhere
320  // It follows the Windows installer paths scheme, where binaries are installed in
321  // PATH/bin and extra files in PATH/share/kicad
322  baseSharePath.AssignDir( m_bin_dir + "\\.." );
323  baseSharePath.Normalize();
324 #else
325  baseSharePath.AssignDir( wxString( wxT( DEFAULT_INSTALL_PATH ) ) );
326 #endif
327 
328 #if !defined( __WXMAC__ )
329  baseSharePath.AppendDir( wxT( "share" ) );
330  baseSharePath.AppendDir( wxT( "kicad" ) );
331 #endif
332 
333  // KISYSMOD
334  envVarName = wxT( "KISYSMOD" );
335 
336  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
337  {
338  tmpFileName.AssignDir( envValue );
339  envVarItem.SetDefinedExternally( true );
340  }
341  else
342  {
343  tmpFileName = baseSharePath;
344  tmpFileName.AppendDir( wxT( "modules" ) );
345  envVarItem.SetDefinedExternally( false );
346  }
347 
348  envVarItem.SetValue( tmpFileName.GetPath() );
349  m_local_env_vars[ envVarName ] = envVarItem;
350 
351  // KISYS3DMOD
352  envVarName = wxT( "KISYS3DMOD" );
353 
354  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
355  {
356  tmpFileName.AssignDir( envValue );
357  envVarItem.SetDefinedExternally( true );
358  }
359  else
360  {
361  tmpFileName.AppendDir( wxT( "packages3d" ) );
362  envVarItem.SetDefinedExternally( false );
363  }
364 
365  envVarItem.SetValue( tmpFileName.GetFullPath() );
366  m_local_env_vars[ envVarName ] = envVarItem;
367 
368  // KICAD_TEMPLATE_DIR
369  envVarName = "KICAD_TEMPLATE_DIR";
370 
371  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
372  {
373  tmpFileName.AssignDir( envValue );
374  envVarItem.SetDefinedExternally( true );
375  }
376  else
377  {
378  // Attempt to find the best default template path.
379  SEARCH_STACK bases;
380  SEARCH_STACK templatePaths;
381 
382  SystemDirsAppend( &bases );
383 
384  for( unsigned i = 0; i < bases.GetCount(); ++i )
385  {
386  wxFileName fn( bases[i], wxEmptyString );
387 
388  // Add KiCad template file path to search path list.
389  fn.AppendDir( "template" );
390 
391  // Only add path if exists and can be read by the user.
392  if( fn.DirExists() && fn.IsDirReadable() )
393  {
394  wxLogDebug( "Checking template path '%s' exists", fn.GetPath() );
395  templatePaths.AddPaths( fn.GetPath() );
396  }
397  }
398 
399  if( templatePaths.IsEmpty() )
400  {
401  tmpFileName = baseSharePath;
402  tmpFileName.AppendDir( "template" );
403  }
404  else
405  {
406  // Take the first one. There may be more but this will likely be the best option.
407  tmpFileName.AssignDir( templatePaths[0] );
408  }
409 
410  envVarItem.SetDefinedExternally( false );
411  }
412 
413  envVarItem.SetValue( tmpFileName.GetPath() );
414  m_local_env_vars[ envVarName ] = envVarItem;
415 
416  // KICAD_USER_TEMPLATE_DIR
417  envVarName = "KICAD_USER_TEMPLATE_DIR";
418 
419  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
420  {
421  tmpFileName.AssignDir( envValue );
422  envVarItem.SetDefinedExternally( true );
423  }
424  else
425  {
426  // Default user template path.
427  tmpFileName = wxStandardPaths::Get().GetDocumentsDir();
428  tmpFileName.AppendDir( "kicad" );
429  tmpFileName.AppendDir( "template" );
430  envVarItem.SetDefinedExternally( false );
431  }
432 
433  envVarItem.SetValue( tmpFileName.GetPath() );
434  m_local_env_vars[ envVarName ] = envVarItem;
435 
436  // KICAD_SYMBOLS
437  envVarName = wxT( "KICAD_SYMBOL_DIR" );
438 
439  if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
440  {
441  tmpFileName.AssignDir( envValue );
442  envVarItem.SetDefinedExternally( true );
443  }
444  else
445  {
446  tmpFileName = baseSharePath;
447  tmpFileName.AppendDir( wxT( "library" ) );
448  envVarItem.SetDefinedExternally( false );
449  }
450 
451  envVarItem.SetValue( tmpFileName.GetPath() );
452  m_local_env_vars[ envVarName ] = envVarItem;
453 
454  ReadPdfBrowserInfos(); // needs m_common_settings
455 
456  // Init user language *before* calling loadCommonSettings, because
457  // env vars could be incorrectly initialized on Linux
458  // (if the value contains some non ASCII7 chars, the env var is not initialized)
459  SetLanguage( true );
460 
462 
463 #ifdef __WXMAC__
464  // Always show filters on Open dialog to be able to choose plugin
465  wxSystemOptions::SetOption( wxOSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1 );
466 #endif
467 
468  return true;
469 }
void loadCommonSettings()
Function loadCommonSettings loads the program (process) settings subset which are stored in ...
Definition: pgm_base.cpp:514
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:373
#define UNIX_STRING_DIR_SEP
Definition: gestfich.h:43
Class ENV_VAR_ITEM.
Definition: pgm_base.h:75
wxConfigBase * GetNewConfig(const wxString &aProgName)
Create a new wxConfig so we can put configuration files in a more proper place for each platform...
Definition: common.cpp:198
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:165
bool setExecutablePath()
Function setExecutablePath finds the path to the executable and stores it in PGM_BASE::m_bin_dir.
Definition: pgm_base.cpp:472
wxSingleInstanceChecker * m_pgm_checker
prevents multiple instances of a program from being run at the same time.
Definition: pgm_base.h:336
Class SEARCH_STACK looks for files in a number of places.
Definition: search_stack.h:41
#define KICAD_COMMON
Definition: pgm_base.cpp:57
wxString m_kicad_env
The KICAD system environment variable.
Definition: pgm_base.h:346
void SetDefinedExternally(bool aIsDefinedExternally)
Definition: pgm_base.h:87
void SystemDirsAppend(SEARCH_STACK *aSearchStack)
Function SystemDirsAppend appends system places to aSearchStack in a platform specific way...
VTBL_ENTRY void SetLanguagePath()
Definition: pgm_base.cpp:724
VTBL_ENTRY bool SetLanguage(bool first_time=false)
Function SetLanguage sets the dictionary file name for internationalization.
Definition: pgm_base.cpp:616
wxString m_bin_dir
full path to this program
Definition: pgm_base.h:343
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
VTBL_ENTRY void ReadPdfBrowserInfos()
Function ReadPdfBrowserInfos reads the PDF browser choice from the common configuration.
Definition: eda_doc.cpp:42
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:93
size_t i
Definition: json11.cpp:597
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Function IsOK displays a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:281
void AddPaths(const wxString &aPaths, int aIndex=-1)
Function AddPaths insert or append path(s)
VTBL_ENTRY bool PGM_BASE::IsKicadEnvVariableDefined ( ) const
inlineinherited

Definition at line 186 of file pgm_base.h.

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

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

Definition at line 514 of file pgm_base.cpp.

References ENBL_AUTO_PAN_KEY, ENBL_MOUSEWHEEL_PAN_KEY, ENBL_ZOOM_NO_CENTER_KEY, GetChars(), GetNewConfig(), i, ICON_SCALE_KEY, pathEnvVariables, showEnvVarWarningDialog, traceEnvVars, and USE_ICONS_IN_MENUS_KEY.

515 {
516  wxASSERT( m_common_settings );
517 
518  m_help_size.x = 500;
519  m_help_size.y = 400;
520 
521  // This only effect the first time KiCad is run. The user's setting will be used for all
522  // subsequent runs. Menu icons are off by default on OSX and on for all other platforms.
523 #if defined( __WXMAC__ )
524  bool defaultUseIconsInMenus = false;
525 #else
526  bool defaultUseIconsInMenus = true;
527 #endif
528 
530 
531  if( !m_common_settings->HasEntry( USE_ICONS_IN_MENUS_KEY ) )
532  m_common_settings->Write( USE_ICONS_IN_MENUS_KEY, defaultUseIconsInMenus );
533 
534  if( !m_common_settings->HasEntry( ICON_SCALE_KEY ) )
535  {
536  // 5.0 and earlier saved these for each app; we arbitrarily pick pcbnew to fetch them from
537  wxConfigBase* cfg = GetNewConfig( wxString::FromUTF8( "pcbnew" ) );
538  wxString value;
539  bool option;
540 
541  cfg->Read( "PcbIconScale", &value );
542  m_common_settings->Write( ICON_SCALE_KEY, value );
543 
544  cfg->Read( ENBL_MOUSEWHEEL_PAN_KEY, &option, false );
545  m_common_settings->Write( ENBL_MOUSEWHEEL_PAN_KEY, option );
546 
547  cfg->Read( ENBL_ZOOM_NO_CENTER_KEY, &option, false );
548  m_common_settings->Write( ENBL_ZOOM_NO_CENTER_KEY, option );
549 
550  cfg->Read( ENBL_AUTO_PAN_KEY, &option, true );
551  m_common_settings->Write( ENBL_AUTO_PAN_KEY, option );
552  }
553 
554  m_editor_name = m_common_settings->Read( wxT( "Editor" ) );
555 
556  wxString entry, oldPath;
557  wxArrayString entries;
558  long index = 0L;
559 
560  oldPath = m_common_settings->GetPath();
562 
563  while( m_common_settings->GetNextEntry( entry, index ) )
564  {
565  wxLogTrace( traceEnvVars,
566  wxT( "Enumerating over entry %s, %ld." ), GetChars( entry ), index );
567  entries.Add( entry );
568  }
569 
570  for( unsigned i = 0; i < entries.GetCount(); i++ )
571  {
572  wxString val = m_common_settings->Read( entries[i], wxEmptyString );
573 
574  if( m_local_env_vars[ entries[i] ].GetDefinedExternally() )
575  continue;
576 
577  m_local_env_vars[ entries[i] ] = ENV_VAR_ITEM( val, wxGetEnv( entries[i], NULL ) );
578  }
579 
580  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
581  SetLocalEnvVariable( it->first, it->second.GetValue() );
582 
583  m_common_settings->SetPath( oldPath );
584 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:64
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:373
Class ENV_VAR_ITEM.
Definition: pgm_base.h:75
static const wxChar showEnvVarWarningDialog[]
Definition: pgm_base.cpp:65
wxConfigBase * GetNewConfig(const wxString &aProgName)
Create a new wxConfig so we can put configuration files in a more proper place for each platform...
Definition: common.cpp:198
static const wxChar traceEnvVars[]
Definition: pgm_base.cpp:66
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:376
#define ENBL_ZOOM_NO_CENTER_KEY
Definition: pgm_base.h:46
#define ENBL_AUTO_PAN_KEY
Definition: pgm_base.h:49
VTBL_ENTRY bool SetLocalEnvVariable(const wxString &aName, const wxString &aValue)
Function SetLocalEnvVariable.
Definition: pgm_base.cpp:800
#define ENBL_MOUSEWHEEL_PAN_KEY
Definition: pgm_base.h:47
#define ICON_SCALE_KEY
Definition: pgm_base.h:44
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
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:370
size_t i
Definition: json11.cpp:597
#define USE_ICONS_IN_MENUS_KEY
Definition: pgm_base.h:43
wxString m_editor_name
Definition: pgm_base.h:369
std::map< wxString, ENV_VAR_ITEM >::iterator ENV_VAR_MAP_ITER
Definition: pgm_base.h:105
void PGM_KICAD::MacOpenFile ( const wxString &  aFileName)
overridevirtual

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 187 of file kicad.cpp.

References PGM_BASE::App(), and KICAD_MANAGER_FRAME::LoadProject().

Referenced by ~PGM_KICAD().

188 {
189 #if defined(__WXMAC__)
190 
191  KICAD_MANAGER_FRAME* frame = (KICAD_MANAGER_FRAME*) App().GetTopWindow();
192 
193  if( !aFileName.empty() && wxFileExists( aFileName ) )
194  frame->LoadProject( wxFileName( aFileName ) );
195 
196 #endif
197 }
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:165
void LoadProject(const wxFileName &aProjectFileName)
Definition: prjconfig.cpp:61
The main KiCad project manager frame.
Definition: kicad.h:134
void PGM_KICAD::OnPgmExit ( )

Definition at line 174 of file kicad.cpp.

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

Referenced by APP_KICAD::OnExit(), and ~PGM_KICAD().

175 {
176  Kiway.OnKiwayEnd();
177 
179 
180  // write common settings to disk, and destroy everything in PGM_KICAD,
181  // especially wxSingleInstanceCheckerImpl earlier than wxApp and earlier
182  // than static destruction would.
183  Destroy();
184 }
void SaveCommonSettings()
Function saveCommonSettings saves the program (process) settings subset which are stored ...
Definition: pgm_base.cpp:587
void OnKiwayEnd()
Definition: kiway.cpp:484
void Destroy()
Definition: kicad.cpp:200
KIWAY Kiway
bool PGM_KICAD::OnPgmInit ( )

Definition at line 78 of file kicad.cpp.

References SEARCH_STACK::AddPaths(), PGM_BASE::App(), GetFileHistory(), PGM_BASE::GetLocalEnvVariables(), i, BIN_MOD::Init(), PGM_BASE::InitPgm(), KICAD_MANAGER_FRAME_NAME, Kiway, KICAD_MANAGER_FRAME::LoadProject(), m_bm, BIN_MOD::m_search, ReadHotkeyConfig(), KIWAY::SetTop(), and SystemDirsAppend().

Referenced by APP_KICAD::OnInit(), and ~PGM_KICAD().

79 {
80 #if defined(DEBUG)
81  wxString absoluteArgv0 = wxStandardPaths::Get().GetExecutablePath();
82 
83  if( !wxIsAbsolutePath( absoluteArgv0 ) )
84  {
85  wxLogError( wxT( "No meaningful argv[0]" ) );
86  return false;
87  }
88 #endif
89 
90  if( !InitPgm() )
91  return false;
92 
93  m_bm.Init();
94 
95  // Add search paths to feed the PGM_KICAD::SysSearch() function,
96  // currenly limited in support to only look for project templates
97  {
98  SEARCH_STACK bases;
99 
100  SystemDirsAppend( &bases );
101 
102  for( unsigned i = 0; i < bases.GetCount(); ++i )
103  {
104  wxFileName fn( bases[i], wxEmptyString );
105 
106  // Add KiCad template file path to search path list.
107  fn.AppendDir( wxT( "template" ) );
108 
109  // Only add path if exists and can be read by the user.
110  if( fn.DirExists() && fn.IsDirReadable() )
111  m_bm.m_search.AddPaths( fn.GetPath() );
112  }
113 
114  // The KICAD_TEMPLATE_DIR takes precedence over the search stack template path.
115  ENV_VAR_MAP_CITER it = GetLocalEnvVariables().find( "KICAD_TEMPLATE_DIR" );
116 
117  if( it != GetLocalEnvVariables().end() && it->second.GetValue() != wxEmptyString )
118  m_bm.m_search.Insert( it->second.GetValue(), 0 );
119 
120  // The KICAD_USER_TEMPLATE_DIR takes precedence over KICAD_TEMPLATE_DIR and the search
121  // stack template path.
122  it = GetLocalEnvVariables().find( "KICAD_USER_TEMPLATE_DIR" );
123 
124  if( it != GetLocalEnvVariables().end() && it->second.GetValue() != wxEmptyString )
125  m_bm.m_search.Insert( it->second.GetValue(), 0 );
126  }
127 
128  // Must be called before creating the main frame in order to
129  // display the real hotkeys in menus or tool tips
132 
133  KICAD_MANAGER_FRAME* frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ),
134  wxDefaultPosition, wxSize( 775, -1 ) );
135  App().SetTopWindow( frame );
136 
137  Kiway.SetTop( frame );
138 
139  wxString projToLoad;
140 
141  if( App().argc > 1 )
142  {
143  projToLoad = App().argv[1];
144  }
145  else if( GetFileHistory().GetCount() )
146  {
147  wxString last_pro = GetFileHistory().GetHistoryFile( 0 );
148 
149  if( !wxFileExists( last_pro ) )
150  {
151  GetFileHistory().RemoveFileFromHistory( 0 );
152  }
153  else
154  {
155  // Try to open the last opened project,
156  // if a project name is not given when starting Kicad
157  projToLoad = last_pro;
158  }
159  }
160 
161  // Do not attempt to load a non-existent project file.
162  if( !projToLoad.empty() && wxFileExists( projToLoad ) )
163  {
164  frame->LoadProject( projToLoad );
165  }
166 
167  frame->Show( true );
168  frame->Raise();
169 
170  return true;
171 }
Structure EDA_HOTKEY_CONFIG contains the information required to save hot key information to a config...
Definition: hotkeys_basic.h:89
void Init()
Definition: bin_mod.cpp:36
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:165
Class SEARCH_STACK looks for files in a number of places.
Definition: search_stack.h:41
struct EDA_HOTKEY_CONFIG kicad_Manager_Hokeys_Descr[]
VTBL_ENTRY const ENV_VAR_MAP & GetLocalEnvVariables() const
Definition: pgm_base.h:287
std::map< wxString, ENV_VAR_ITEM >::const_iterator ENV_VAR_MAP_CITER
Definition: pgm_base.h:106
void SystemDirsAppend(SEARCH_STACK *aSearchStack)
Function SystemDirsAppend appends system places to aSearchStack in a platform specific way...
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:76
SEARCH_STACK m_search
Definition: bin_mod.h:61
int ReadHotkeyConfig(const wxString &aAppname, struct EDA_HOTKEY_CONFIG *aDescList)
Function ReadHotkeyConfig Read configuration data and fill the current hotkey list with hotkeys...
BIN_MOD m_bm
Definition: pgm_kicad.h:72
size_t i
Definition: json11.cpp:597
bool InitPgm()
Function initPgm initializes this program (process) in a KiCad standard way, using some generalized t...
Definition: pgm_base.cpp:240
void LoadProject(const wxFileName &aProjectFileName)
Definition: prjconfig.cpp:61
wxFileHistory & GetFileHistory()
Definition: pgm_kicad.h:57
The main KiCad project manager frame.
Definition: kicad.h:134
void AddPaths(const wxString &aPaths, int aIndex=-1)
Function AddPaths insert or append path(s)
#define KICAD_MANAGER_FRAME_NAME
Definition: kicad.h:40
KIWAY Kiway
wxConfigBase* PGM_KICAD::PgmSettings ( )
inline

Definition at line 59 of file pgm_kicad.h.

References m_bm, and BIN_MOD::m_config.

Referenced by KICAD_MANAGER_FRAME::config().

59 { return m_bm.m_config; }
BIN_MOD m_bm
Definition: pgm_kicad.h:72
wxConfigBase * m_config
maybe from $HOME/.${m_name}
Definition: bin_mod.h:57
void PGM_BASE::ReadPdfBrowserInfos ( )
inherited

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

Definition at line 42 of file eda_doc.cpp.

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

Referenced by PANEL_COMMON_SETTINGS::OnPDFViewerClick(), and OpenPDF().

43 {
44  wxASSERT( m_common_settings );
45 
46  wxString browser = m_common_settings->Read( wxT( "PdfBrowserName" ), wxEmptyString );
47  SetPdfBrowserName( browser );
48 
49  int tmp;
50  m_common_settings->Read( wxT( "UseSystemBrowser" ), &tmp, 0 );
51  m_use_system_pdf_browser = bool( tmp );
52 }
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:355
VTBL_ENTRY void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:196
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
void PGM_BASE::SaveCommonSettings ( )
inherited

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

Definition at line 587 of file pgm_base.cpp.

References GetChars(), pathEnvVariables, showEnvVarWarningDialog, and traceEnvVars.

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

588 {
589  // m_common_settings is not initialized until fairly late in the
590  // process startup: InitPgm(), so test before using:
591  if( m_common_settings )
592  {
593  wxString cur_dir = wxGetCwd();
594 
595  m_common_settings->Write( workingDirKey, cur_dir );
597 
598  // Save the local environment variables.
600 
601  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
602  {
603  if( it->second.GetDefinedExternally() )
604  continue;
605 
606  wxLogTrace( traceEnvVars, wxT( "Saving environment variable config entry %s as %s" ),
607  GetChars( it->first ), GetChars( it->second.GetValue() ) );
608  m_common_settings->Write( it->first, it->second.GetValue() );
609  }
610 
611  m_common_settings->SetPath( wxT( ".." ) );
612  }
613 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:64
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:373
static const wxChar workingDirKey[]
Definition: pgm_base.h:301
static const wxChar showEnvVarWarningDialog[]
Definition: pgm_base.cpp:65
static const wxChar traceEnvVars[]
Definition: pgm_base.cpp:66
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:376
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
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:105
void PGM_BASE::SetEditorName ( const wxString &  aFileName)
inherited

Definition at line 172 of file pgm_base.cpp.

Referenced by PANEL_COMMON_SETTINGS::TransferDataFromWindow().

173 {
174  m_editor_name = aFileName;
175  wxASSERT( m_common_settings );
176  m_common_settings->Write( wxT( "Editor" ), aFileName );
177 }
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
wxString m_editor_name
Definition: pgm_base.h:369
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 472 of file pgm_base.cpp.

References UNIX_STRING_DIR_SEP, and WIN_STRING_DIR_SEP.

473 {
474  m_bin_dir = wxStandardPaths::Get().GetExecutablePath();
475 
476 #ifdef __WXMAC__
477  // On OSX Pgm().GetExecutablePath() will always point to main
478  // bundle directory, e.g., /Applications/kicad.app/
479 
480  wxFileName fn( m_bin_dir );
481 
482  if( fn.GetName() == wxT( "kicad" ) )
483  {
484  // kicad launcher, so just remove the Contents/MacOS part
485  fn.RemoveLastDir();
486  fn.RemoveLastDir();
487  }
488  else
489  {
490  // standalone binaries live in Contents/Applications/<standalone>.app/Contents/MacOS
491  fn.RemoveLastDir();
492  fn.RemoveLastDir();
493  fn.RemoveLastDir();
494  fn.RemoveLastDir();
495  fn.RemoveLastDir();
496  }
497 
498  m_bin_dir = fn.GetPath() + wxT( "/" );
499 #else
500  // Use unix notation for paths. I am not sure this is a good idea,
501  // but it simplifies compatibility between Windows and Unices.
502  // However it is a potential problem in path handling under Windows.
504 
505  // Remove file name form command line:
506  while( m_bin_dir.Last() != '/' && !m_bin_dir.IsEmpty() )
507  m_bin_dir.RemoveLast();
508 #endif
509 
510  return true;
511 }
#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:343
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 616 of file pgm_base.cpp.

References DIM, GetChars(), languageCfgKey, LANGUAGE_DESCR::m_Lang_Label, and LANGUAGE_DESCR::m_WX_Lang_Identifier.

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

617 {
618  bool retv = true;
619 
620  if( first_time )
621  {
622  setLanguageId( wxLANGUAGE_DEFAULT );
623  // First time SetLanguage is called, the user selected language id is set
624  // from commun user config settings
625  wxString languageSel;
626 
627  m_common_settings->Read( languageCfgKey, &languageSel );
628 
629  // Search for the current selection
630  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
631  {
632  if( s_Languages[ii].m_Lang_Label == languageSel )
633  {
634  setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
635  break;
636  }
637  }
638  }
639 
640  // dictionary file name without extend (full name is kicad.mo)
641  wxString dictionaryName( wxT( "kicad" ) );
642 
643  delete m_locale;
644  m_locale = new wxLocale;
645 
646  if( !m_locale->Init( m_language_id ) )
647  {
648  wxLogDebug( wxT( "This language is not supported by the system." ) );
649 
650  setLanguageId( wxLANGUAGE_DEFAULT );
651  delete m_locale;
652 
653  m_locale = new wxLocale;
654  m_locale->Init();
655  retv = false;
656  }
657  else if( !first_time )
658  {
659  wxLogDebug( wxT( "Search for dictionary %s.mo in %s" ),
660  GetChars( dictionaryName ), GetChars( m_locale->GetName() ) );
661  }
662 
663  if( !first_time )
664  {
665  // If we are here, the user has selected another language.
666  // Therefore the new prefered language name is stored in common config.
667  // Do NOT store the wxWidgets language Id, it can change between wxWidgets
668  // versions, for a given language
669  wxString languageSel;
670 
671  // Search for the current selection language name
672  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
673  {
674  if( s_Languages[ii].m_WX_Lang_Identifier == m_language_id )
675  {
676  languageSel = s_Languages[ii].m_Lang_Label;
677  break;
678  }
679  }
680 
681  m_common_settings->Write( languageCfgKey, languageSel );
682  }
683 
684  // Test if floating point notation is working (bug encountered in cross compilation)
685  // Make a conversion double <=> string
686  double dtst = 0.5;
687  wxString msg;
688 
689  msg << dtst;
690  double result;
691  msg.ToDouble( &result );
692 
693  if( result != dtst )
694  // string to double encode/decode does not work! Bug detected:
695  // Disable floating point localization:
696  setlocale( LC_ALL, "C" );
697 
698  if( !m_locale->IsLoaded( dictionaryName ) )
699  m_locale->AddCatalog( dictionaryName );
700 
701  if( !retv )
702  return retv;
703 
704  return m_locale->IsOk();
705 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
wxLocale * m_locale
The current locale.
Definition: pgm_base.h:349
int m_language_id
The current language setting.
Definition: pgm_base.h:352
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:358
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.cpp:90
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
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:63
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:103
void PGM_BASE::setLanguageId ( int  aId)
inlineprotectedinherited

Trap all changes in here, simplifies debugging.

Definition at line 358 of file pgm_base.h.

358 { m_language_id = aId; }
int m_language_id
The current language setting.
Definition: pgm_base.h:352
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 708 of file pgm_base.cpp.

References DIM, LANGUAGE_DESCR::m_KI_Lang_Identifier, and LANGUAGE_DESCR::m_WX_Lang_Identifier.

Referenced by KIWAY::SetLanguage().

709 {
710  wxLogDebug( wxT( "Select language ID %d from %d possible languages." ),
711  menu_id, DIM( s_Languages ) );
712 
713  for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
714  {
715  if( menu_id == s_Languages[ii].m_KI_Lang_Identifier )
716  {
717  setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
718  break;
719  }
720  }
721 }
#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:358
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:103
void PGM_BASE::SetLanguagePath ( )
inherited

Definition at line 724 of file pgm_base.cpp.

References i, and SystemDirsAppend().

725 {
726  SEARCH_STACK guesses;
727 
728  SystemDirsAppend( &guesses );
729 
730  // Add our internat dir to the wxLocale catalog of paths
731  for( unsigned i = 0; i < guesses.GetCount(); i++ )
732  {
733  wxFileName fn( guesses[i], wxEmptyString );
734 
735  // Append path for Windows and unix KiCad package install
736  fn.AppendDir( wxT( "share" ) );
737  fn.AppendDir( wxT( "internat" ) );
738 
739  if( fn.IsDirReadable() )
740  {
741  wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
742  wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
743  }
744 
745  // Append path for unix standard install
746  fn.RemoveLastDir();
747  fn.AppendDir( wxT( "kicad" ) );
748  fn.AppendDir( wxT( "internat" ) );
749 
750  if( fn.IsDirReadable() )
751  {
752  wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
753  wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
754  }
755  }
756 }
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...
size_t i
Definition: json11.cpp:597
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 800 of file pgm_base.cpp.

References GetChars(), and traceEnvVars.

801 {
802  wxString env;
803 
804  // Check to see if the environment variable is already set.
805  if( wxGetEnv( aName, &env ) )
806  {
807  wxLogTrace( traceEnvVars, wxT( "Environment variable %s already set to %s." ),
808  GetChars( aName ), GetChars( env ) );
809  return env == aValue;
810  }
811 
812  wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
813  GetChars( aName ), GetChars( aValue ) );
814 
815  return wxSetEnv( aName, aValue );
816 }
static const wxChar traceEnvVars[]
Definition: pgm_base.cpp:66
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 819 of file pgm_base.cpp.

References GetChars(), pathEnvVariables, and traceEnvVars.

Referenced by DIALOG_CONFIGURE_PATHS::TransferDataFromWindow().

820 {
821  m_local_env_vars.clear();
822  m_local_env_vars = aEnvVarMap;
823 
824  if( m_common_settings )
825  m_common_settings->DeleteGroup( pathEnvVariables );
826 
828 
829  // Overwrites externally defined environment variable until the next time the application
830  // is run.
831  for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
832  {
833  wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
834  GetChars( it->first ), GetChars( it->second.GetValue() ) );
835  wxSetEnv( it->first, it->second.GetValue() );
836  }
837 }
static const wxChar pathEnvVariables[]
Definition: pgm_base.cpp:64
ENV_VAR_MAP m_local_env_vars
Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
Definition: pgm_base.h:373
void SaveCommonSettings()
Function saveCommonSettings saves the program (process) settings subset which are stored ...
Definition: pgm_base.cpp:587
static const wxChar traceEnvVars[]
Definition: pgm_base.cpp:66
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340
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:105
VTBL_ENTRY void PGM_BASE::SetPdfBrowserName ( const wxString &  aFileName)
inlineinherited

Definition at line 196 of file pgm_base.h.

Referenced by PGM_BASE::ReadPdfBrowserInfos(), and PANEL_COMMON_SETTINGS::TransferDataFromWindow().

196 { m_pdf_browser = aFileName; }
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:368
SEARCH_STACK& PGM_KICAD::SysSearch ( )
inline

Definition at line 61 of file pgm_kicad.h.

References m_bm, and BIN_MOD::m_search.

Referenced by KICAD_MANAGER_FRAME::sys_search().

61 { return m_bm.m_search; }
SEARCH_STACK m_search
Definition: bin_mod.h:61
BIN_MOD m_bm
Definition: pgm_kicad.h:72
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 204 of file pgm_base.h.

205  {
206  return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
207  }
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:355
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:368
void PGM_BASE::WritePdfBrowserInfos ( )
inherited

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

Definition at line 55 of file eda_doc.cpp.

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

Referenced by PANEL_COMMON_SETTINGS::TransferDataFromWindow().

56 {
57  wxASSERT( m_common_settings );
58 
59  m_common_settings->Write( wxT( "PdfBrowserName" ), GetPdfBrowserName() );
60  m_common_settings->Write( wxT( "UseSystemBrowser" ), m_use_system_pdf_browser );
61 }
VTBL_ENTRY const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:194
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:355
wxConfigBase * m_common_settings
Configuration settings common to all KiCad program modules, like as in $HOME/.kicad_common.
Definition: pgm_base.h:340

Member Data Documentation

wxString PGM_BASE::m_bin_dir
protectedinherited

full path to this program

Definition at line 343 of file pgm_base.h.

BIN_MOD PGM_KICAD::m_bm
protected

Definition at line 72 of file pgm_kicad.h.

Referenced by Destroy(), GetFileHistory(), GetHelpFileName(), OnPgmInit(), PgmSettings(), and SysSearch().

wxConfigBase* PGM_BASE::m_common_settings
protectedinherited

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

Definition at line 340 of file pgm_base.h.

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

wxString PGM_BASE::m_editor_name
protectedinherited

Definition at line 369 of file pgm_base.h.

wxSize PGM_BASE::m_help_size
protectedinherited

Definition at line 370 of file pgm_base.h.

wxString PGM_BASE::m_kicad_env
protectedinherited

The KICAD system environment variable.

Definition at line 346 of file pgm_base.h.

int PGM_BASE::m_language_id
protectedinherited

The current language setting.

Definition at line 352 of file pgm_base.h.

ENV_VAR_MAP PGM_BASE::m_local_env_vars
protectedinherited

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

Definition at line 373 of file pgm_base.h.

wxLocale* PGM_BASE::m_locale
protectedinherited

The current locale.

Definition at line 349 of file pgm_base.h.

wxString PGM_BASE::m_pdf_browser
protectedinherited

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

Definition at line 368 of file pgm_base.h.

wxSingleInstanceChecker* PGM_BASE::m_pgm_checker
protectedinherited

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

Definition at line 336 of file pgm_base.h.

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 376 of file pgm_base.h.

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 355 of file pgm_base.h.

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

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

Definition at line 301 of file pgm_base.h.


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