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-2021 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 
40 #undef pid_t
41 #include <pybind11/embed.h>
42 
43 class wxSingleInstanceChecker;
44 class wxApp;
45 class wxMenu;
46 class wxWindow;
47 
48 class COMMON_SETTINGS;
49 class SETTINGS_MANAGER;
50 class SCRIPTING;
51 
60 {
63 
66 
68  wxString m_Lang_Label;
69 
72 };
73 
74 
79 
93 class PGM_BASE
94 {
95 public:
96  PGM_BASE();
97  virtual ~PGM_BASE();
98 
99 #if 0
100  /*
101 
102  Derived classes must implement these two functions: OnPgmInit() and
103  OnPgmExit(), and since they are only called from same source file as their
104  implementation, these need not be virtual here. In fact, in the case of
105  python project manager's class PGM_PYTHON, these functions are actually
106  written in python. In total there are three implementations, corresponding
107  to the three defines given by kiface.h's KFCTL_* #defines.
108 
109  */
110 
116  virtual bool OnPgmInit() = 0; // call this from wxApp::OnInit()
117 
118  virtual void OnPgmExit() = 0; // call this from wxApp::OnExit()
119 #endif
120 
127  virtual void MacOpenFile( const wxString& aFileName ) = 0;
128 
130 
131  virtual COMMON_SETTINGS* GetCommonSettings() const;
132 
133  virtual void SetTextEditor( const wxString& aFileName );
134 
144  virtual const wxString& GetTextEditor( bool aCanShowFileChooser = true );
145 
153  virtual const wxString AskUserForPreferredEditor(
154  const wxString& aDefaultEditor = wxEmptyString );
155 
156  virtual bool IsKicadEnvVariableDefined() const { return !m_kicad_env.IsEmpty(); }
157 
158  virtual const wxString& GetKicadEnvVariable() const { return m_kicad_env; }
159 
160  virtual const wxString& GetExecutablePath() const { return m_bin_dir; }
161 
162  virtual wxLocale* GetLocale() { return m_locale; }
163 
164  virtual const wxString& GetPdfBrowserName() const { return m_pdf_browser; }
165 
166  virtual void SetPdfBrowserName( const wxString& aFileName ) { m_pdf_browser = aFileName; }
167 
173  virtual bool UseSystemPdfBrowser() const
174  {
175  return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
176  }
177 
181  virtual void ForceSystemPdfBrowser( bool aFlg ) { m_use_system_pdf_browser = aFlg; }
182 
193  virtual bool SetLanguage( wxString& aErrMsg, bool first_time = false );
194 
201  bool SetDefaultLanguage( wxString& aErrMsg );
202 
210  virtual void SetLanguageIdentifier( int menu_id );
211 
215  virtual int GetSelectedLanguageIdentifier() const { return m_language_id; }
216 
217  virtual void SetLanguagePath();
218 
222  virtual void ReadPdfBrowserInfos();
223 
227  virtual void WritePdfBrowserInfos();
228 
241  virtual bool SetLocalEnvVariable( const wxString& aName, const wxString& aValue );
242 
248  virtual void SetLocalEnvVariables();
249 
250  virtual ENV_VAR_MAP& GetLocalEnvVariables() const;
251 
257  virtual wxApp& App();
258 
259  static const wxChar workingDirKey[];
260 
276  bool InitPgm( bool aHeadless = false, bool aSkipPyInit = false );
277 
278  // The PGM_* classes can have difficulties at termination if they
279  // are not destroyed soon enough. Relying on a static destructor can be
280  // too late for contained objects like wxSingleInstanceChecker.
281  void Destroy();
282 
286  void SaveCommonSettings();
287 
292 
294 
295 protected:
297  void loadCommonSettings();
298 
300  void setLanguageId( int aId ) { m_language_id = aId; }
301 
307  bool setExecutablePath();
308 
309 protected:
310  std::unique_ptr<SETTINGS_MANAGER> m_settings_manager;
311 
312  std::unique_ptr<SCRIPTING> m_python_scripting;
313 
314  wxString m_bin_dir;
315  wxString m_kicad_env;
316 
317  wxLocale* m_locale;
319 
321  wxString m_pdf_browser;
322 
323  wxString m_text_editor;
324 };
325 
326 
329 extern PGM_BASE& Pgm();
330 
333 extern PGM_BASE* PgmOrNull();
334 
335 
336 #endif // PGM_BASE_H_
virtual bool IsKicadEnvVariableDefined() const
Definition: pgm_base.h:156
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition: pgm_base.cpp:381
std::unique_ptr< SCRIPTING > m_python_scripting
Definition: pgm_base.h:312
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:129
void loadCommonSettings()
Loads internal settings from COMMON_SETTINGS.
Definition: pgm_base.cpp:345
virtual ~PGM_BASE()
Definition: pgm_base.cpp:118
bool InitPgm(bool aHeadless=false, bool aSkipPyInit=false)
Initialize this program.
Definition: pgm_base.cpp:203
virtual const wxString & GetTextEditor(bool aCanShowFileChooser=true)
Return the path to the preferred text editor application.
Definition: pgm_base.cpp:146
void SaveCommonSettings()
Save the program (process) settings subset which are stored .kicad_common.
Definition: pgm_base.cpp:372
Container for data for KiCad programs.
Definition: pgm_base.h:93
int m_ModalDialogCount
Definition: pgm_base.h:293
virtual void MacOpenFile(const wxString &aFileName)=0
Specific to MacOSX (not used under Linux or Windows).
wxLocale * m_locale
The KICAD system environment variable.
Definition: pgm_base.h:317
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
Definition: pgm_base.h:65
virtual wxApp & App()
Returns a bare naked wxApp which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:132
void Destroy()
Definition: pgm_base.cpp:124
bool setExecutablePath()
Find the path to the executable and stores it in PGM_BASE::m_bin_dir.
Definition: pgm_base.cpp:303
A small class to handle the list of existing translations.
Definition: pgm_base.h:59
bool m_DoNotTranslate
Set to true if the m_Lang_Label must not be translated.
Definition: pgm_base.h:71
virtual void WritePdfBrowserInfos()
Save the PDF browser choice to the common configuration.
Definition: eda_doc.cpp:44
virtual void ForceSystemPdfBrowser(bool aFlg)
Force the use of system PDF browser, even if a preferred PDF browser is set.
Definition: pgm_base.h:181
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:182
bool m_use_system_pdf_browser
Definition: pgm_base.h:320
int m_language_id
Definition: pgm_base.h:318
std::unique_ptr< SETTINGS_MANAGER > m_settings_manager
Definition: pgm_base.h:310
virtual bool UseSystemPdfBrowser() const
Definition: pgm_base.h:173
wxString m_kicad_env
full path to this program
Definition: pgm_base.h:315
static const wxChar workingDirKey[]
Definition: pgm_base.h:259
virtual bool SetLocalEnvVariable(const wxString &aName, const wxString &aValue)
Sets the environment variable aName to aValue.
Definition: pgm_base.cpp:591
virtual const wxString & GetKicadEnvVariable() const
Definition: pgm_base.h:158
virtual void SetLanguageIdentifier(int menu_id)
Set in .m_language_id member the wxWidgets language identifier ID from the KiCad menu id (internal me...
Definition: pgm_base.cpp:520
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:125
virtual int GetSelectedLanguageIdentifier() const
Definition: pgm_base.h:215
virtual void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:166
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:300
int m_WX_Lang_Identifier
wxWidgets locale identifier (See wxWidgets doc)
Definition: pgm_base.h:62
virtual bool SetLanguage(wxString &aErrMsg, bool first_time=false)
Set the dictionary file name for internationalization.
Definition: pgm_base.cpp:387
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.h:68
virtual void SetLanguagePath()
Definition: pgm_base.cpp:536
wxString m_bin_dir
Definition: pgm_base.h:314
virtual const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:164
virtual void ReadPdfBrowserInfos()
Read the PDF browser choice from the common configuration.
Definition: eda_doc.cpp:37
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:291
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
virtual const wxString & GetExecutablePath() const
Definition: pgm_base.h:160
wxString m_text_editor
Filename of the app selected for browsing PDFs.
Definition: pgm_base.h:323
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:620
virtual wxLocale * GetLocale()
Definition: pgm_base.h:162
wxString m_pdf_browser
Definition: pgm_base.h:321
virtual void SetTextEditor(const wxString &aFileName)
Definition: pgm_base.cpp:139
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
Definition: pgm_base.cpp:70
bool SetDefaultLanguage(wxString &aErrMsg)
Set the default language without reference to any preferences.
Definition: pgm_base.cpp:482
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
Definition: pgm_base.cpp:635