KiCad PCB EDA Suite
pgm_base.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@gmail.com>
6  * Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, you may find one here:
20  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21  * or you may search the http://www.gnu.org website for the version 2 license,
22  * or you may write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24  */
25 
31 #ifndef PGM_BASE_H_
32 #define PGM_BASE_H_
33 
34 #include <map>
35 #include <memory>
36 #include <search_stack.h>
37 #include <settings/environment.h>
38 #include <wx/filename.h>
39 #include <wx/gdicmn.h>
40 
41 
42 class wxSingleInstanceChecker;
43 class wxApp;
44 class wxMenu;
45 class wxWindow;
46 
47 class COMMON_SETTINGS;
48 class SETTINGS_MANAGER;
49 
58 {
61 
64 
66  wxString m_Lang_Label;
67 
70 };
71 
72 
77 
91 class PGM_BASE
92 {
93 public:
94  PGM_BASE();
95  virtual ~PGM_BASE();
96 
97 #if 0
98  /*
99 
100  Derived classes must implement these two functions: OnPgmInit() and
101  OnPgmExit(), and since they are only called from same source file as their
102  implementation, these need not be virtual here. In fact, in the case of
103  python project manager's class PGM_PYTHON, these functions are actually
104  written in python. In total there are three implementations, corresponding
105  to the three defines given by kiface.h's KFCTL_* #defines.
106 
107  */
108 
114  virtual bool OnPgmInit() = 0; // call this from wxApp::OnInit()
115 
116  virtual void OnPgmExit() = 0; // call this from wxApp::OnExit()
117 #endif
118 
125  virtual void MacOpenFile( const wxString& aFileName ) = 0;
126 
128 
129  virtual COMMON_SETTINGS* GetCommonSettings() const;
130 
131  virtual void SetEditorName( const wxString& aFileName );
132 
142  virtual const wxString& GetEditorName( bool aCanShowFileChooser = true );
143 
151  virtual const wxString AskUserForPreferredEditor(
152  const wxString& aDefaultEditor = wxEmptyString );
153 
154  virtual bool IsKicadEnvVariableDefined() const { return !m_kicad_env.IsEmpty(); }
155 
156  virtual const wxString& GetKicadEnvVariable() const { return m_kicad_env; }
157 
158  virtual const wxString& GetExecutablePath() const { return m_bin_dir; }
159 
160  virtual wxLocale* GetLocale() { return m_locale; }
161 
162  virtual const wxString& GetPdfBrowserName() const { return m_pdf_browser; }
163 
164  virtual void SetPdfBrowserName( const wxString& aFileName ) { m_pdf_browser = aFileName; }
165 
171  virtual bool UseSystemPdfBrowser() const
172  {
173  return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
174  }
175 
179  virtual void ForceSystemPdfBrowser( bool aFlg ) { m_use_system_pdf_browser = aFlg; }
180 
191  virtual bool SetLanguage( wxString& aErrMsg, bool first_time = false );
192 
199  bool SetDefaultLanguage( wxString& aErrMsg );
200 
208  virtual void SetLanguageIdentifier( int menu_id );
209 
213  virtual int GetSelectedLanguageIdentifier() const { return m_language_id; }
214 
215  virtual void SetLanguagePath();
216 
220  virtual void ReadPdfBrowserInfos();
221 
225  virtual void WritePdfBrowserInfos();
226 
239  virtual bool SetLocalEnvVariable( const wxString& aName, const wxString& aValue );
240 
246  virtual void SetLocalEnvVariables();
247 
248  virtual ENV_VAR_MAP& GetLocalEnvVariables() const;
249 
255  virtual wxApp& App();
256 
257  static const wxChar workingDirKey[];
258 
272  bool InitPgm( bool aHeadless = false );
273 
274  // The PGM_* classes can have difficulties at termination if they
275  // are not destroyed soon enough. Relying on a static destructor can be
276  // too late for contained objects like wxSingleInstanceChecker.
277  void Destroy();
278 
282  void SaveCommonSettings();
283 
288 
290 
291 protected:
293  void loadCommonSettings();
294 
296  void setLanguageId( int aId ) { m_language_id = aId; }
297 
303  bool setExecutablePath();
304 
305  std::unique_ptr<SETTINGS_MANAGER> m_settings_manager;
306 
308  wxSingleInstanceChecker* m_pgm_checker;
309 
311  wxString m_bin_dir;
312 
314  wxString m_kicad_env;
315 
317  wxLocale* m_locale;
318 
321 
324 
326  wxString m_pdf_browser;
327  wxString m_editor_name;
328  wxSize m_help_size;
329 
332 };
333 
334 
337 extern PGM_BASE& Pgm();
338 
341 extern PGM_BASE* PgmOrNull();
342 
343 
344 #endif // PGM_BASE_H_
virtual bool IsKicadEnvVariableDefined() const
Definition: pgm_base.h:154
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition: pgm_base.cpp:391
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:127
void loadCommonSettings()
Loads internal settings from COMMON_SETTINGS.
Definition: pgm_base.cpp:348
virtual void SetEditorName(const wxString &aFileName)
Definition: pgm_base.cpp:140
virtual ~PGM_BASE()
Definition: pgm_base.cpp:116
void SaveCommonSettings()
Save the program (process) settings subset which are stored .kicad_common.
Definition: pgm_base.cpp:379
Container for data for KiCad programs.
Definition: pgm_base.h:91
int m_ModalDialogCount
Definition: pgm_base.h:289
virtual void MacOpenFile(const wxString &aFileName)=0
Specific to MacOSX (not used under Linux or Windows).
wxLocale * m_locale
The current locale.
Definition: pgm_base.h:317
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
Definition: pgm_base.h:63
virtual wxApp & App()
Returns a bare naked wxApp which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:133
bool m_show_env_var_dialog
Flag to indicate if the environment variable overwrite warning dialog should be shown.
Definition: pgm_base.h:331
void Destroy()
Definition: pgm_base.cpp:122
bool setExecutablePath()
Find the path to the executable and stores it in PGM_BASE::m_bin_dir.
Definition: pgm_base.cpp:306
A small class to handle the list of existing translations.
Definition: pgm_base.h:57
wxSingleInstanceChecker * m_pgm_checker
prevents multiple instances of a program from being run at the same time.
Definition: pgm_base.h:308
bool m_DoNotTranslate
Set to true if the m_Lang_Label must not be translated.
Definition: pgm_base.h:69
virtual void WritePdfBrowserInfos()
Save the PDF browser choice to the common configuration.
Definition: eda_doc.cpp:49
virtual void ForceSystemPdfBrowser(bool aFlg)
Force the use of system PDF browser, even if a preferred PDF browser is set.
Definition: pgm_base.h:179
virtual const wxString AskUserForPreferredEditor(const wxString &aDefaultEditor=wxEmptyString)
Shows a dialog that instructs the user to select a new preferred editor.
Definition: pgm_base.cpp:184
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:323
int m_language_id
The current language setting.
Definition: pgm_base.h:320
std::unique_ptr< SETTINGS_MANAGER > m_settings_manager
Definition: pgm_base.h:305
virtual bool UseSystemPdfBrowser() const
Definition: pgm_base.h:171
wxString m_kicad_env
The KICAD system environment variable.
Definition: pgm_base.h:314
static const wxChar workingDirKey[]
Definition: pgm_base.h:257
virtual bool SetLocalEnvVariable(const wxString &aName, const wxString &aValue)
Sets the environment variable aName to aValue.
Definition: pgm_base.cpp:601
virtual const wxString & GetKicadEnvVariable() const
Definition: pgm_base.h:156
virtual void SetLanguageIdentifier(int menu_id)
Set in .m_language_id member the wxWidgets language identifier ID fromthe KiCad menu id (internal men...
Definition: pgm_base.cpp:530
PGM_BASE * PgmOrNull()
similar to PGM_BASE& Pgm(), but return a reference that can be nullptr when running a shared lib from...
Definition: cvpcb.cpp:112
virtual int GetSelectedLanguageIdentifier() const
Definition: pgm_base.h:213
virtual void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:164
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: single_top.cpp:106
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:296
int m_WX_Lang_Identifier
wxWidgets locale identifier (See wxWidgets doc)
Definition: pgm_base.h:60
virtual bool SetLanguage(wxString &aErrMsg, bool first_time=false)
Set the dictionary file name for internationalization.
Definition: pgm_base.cpp:397
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.h:66
virtual void SetLanguagePath()
Definition: pgm_base.cpp:546
wxString m_bin_dir
full path to this program
Definition: pgm_base.h:311
virtual const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:162
bool InitPgm(bool aHeadless=false)
Initialize this program.
Definition: pgm_base.cpp:205
virtual void ReadPdfBrowserInfos()
Read the PDF browser choice from the common configuration.
Definition: eda_doc.cpp:42
bool m_Printing
wxWidgets on MSW tends to crash if you spool up more than one print job at a time.
Definition: pgm_base.h:287
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
virtual const wxString & GetExecutablePath() const
Definition: pgm_base.h:158
virtual void SetLocalEnvVariables()
Updates the local environment with the contents of the current ENV_VAR_MAP stored in the COMMON_SETTI...
Definition: pgm_base.cpp:630
wxSize m_help_size
Definition: pgm_base.h:328
virtual wxLocale * GetLocale()
Definition: pgm_base.h:160
wxString m_pdf_browser
The file name of the the program selected for browsing pdf files.
Definition: pgm_base.h:326
wxString m_editor_name
Definition: pgm_base.h:327
virtual const wxString & GetEditorName(bool aCanShowFileChooser=true)
Return the preferred editor name.
Definition: pgm_base.cpp:148
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
Definition: pgm_base.cpp:68
bool SetDefaultLanguage(wxString &aErrMsg)
Set the default language without reference to any preferences.
Definition: pgm_base.cpp:492
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
Definition: pgm_base.cpp:645