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 <[email protected]>
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>
38#include <wx/filename.h>
39
40#undef pid_t
41#include <pybind11/embed.h>
42
43class wxSingleInstanceChecker;
44class wxApp;
45class wxMenu;
46class wxWindow;
47
48class COMMON_SETTINGS;
50class SCRIPTING;
51
60{
63
66
68 wxString m_Lang_Label;
69
72};
73
74
79
94{
95public:
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
288#ifdef KICAD_USE_SENTRY
289 bool IsSentryOptedIn();
290 void SetSentryOptIn( bool aOptIn );
291 void ResetSentryId();
292 const wxString& GetSentryId();
293#endif
294
299
301
303
304protected:
306 void loadCommonSettings();
307
309 void setLanguageId( int aId ) { m_language_id = aId; }
310
316 bool setExecutablePath();
317
318#ifdef KICAD_USE_SENTRY
319 void sentryInit();
320 void sentryPrompt();
321 wxString sentryCreateUid();
322#endif
323
324protected:
325 std::unique_ptr<SETTINGS_MANAGER> m_settings_manager;
326
327 std::unique_ptr<SCRIPTING> m_python_scripting;
328
329 wxString m_bin_dir;
330 wxString m_kicad_env;
331
332 wxLocale* m_locale;
334
336 wxString m_pdf_browser;
337
339
340#ifdef KICAD_USE_SENTRY
341 wxFileName m_sentry_optin_fn;
342 wxFileName m_sentry_uid_fn;
343 wxString m_sentryUid;
344#endif
345};
346
347
350extern PGM_BASE& Pgm();
351
354extern PGM_BASE* PgmOrNull();
355
356
357#endif // PGM_BASE_H_
Container for data for KiCad programs.
Definition: pgm_base.h:94
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition: pgm_base.cpp:573
virtual wxApp & App()
Returns a bare naked wxApp which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:152
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
Definition: pgm_base.cpp:788
bool setExecutablePath()
Find the path to the executable and stores it in PGM_BASE::m_bin_dir.
Definition: pgm_base.cpp:495
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:298
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:309
virtual void MacOpenFile(const wxString &aFileName)=0
Specific to MacOSX (not used under Linux or Windows).
wxString m_bin_dir
Definition: pgm_base.h:329
std::unique_ptr< SETTINGS_MANAGER > m_settings_manager
Definition: pgm_base.h:325
void loadCommonSettings()
Loads internal settings from COMMON_SETTINGS.
Definition: pgm_base.cpp:537
bool InitPgm(bool aHeadless=false, bool aSkipPyInit=false)
Initialize this program.
Definition: pgm_base.cpp:373
virtual void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:166
wxLocale * m_locale
The KICAD system environment variable.
Definition: pgm_base.h:332
void Destroy()
Definition: pgm_base.cpp:140
virtual const wxString & GetKicadEnvVariable() const
Definition: pgm_base.h:158
virtual bool UseSystemPdfBrowser() const
Definition: pgm_base.h:173
virtual void ReadPdfBrowserInfos()
Read the PDF browser choice from the common configuration.
Definition: eda_doc.cpp:37
bool m_use_system_pdf_browser
Definition: pgm_base.h:335
bool m_Quitting
Definition: pgm_base.h:302
virtual const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:164
virtual void SetTextEditor(const wxString &aFileName)
Definition: pgm_base.cpp:159
virtual const wxString & GetExecutablePath() const
Definition: pgm_base.h:160
virtual int GetSelectedLanguageIdentifier() const
Definition: pgm_base.h:215
wxString m_pdf_browser
Definition: pgm_base.h:336
virtual bool SetLocalEnvVariable(const wxString &aName, const wxString &aValue)
Sets the environment variable aName to aValue.
Definition: pgm_base.cpp:744
wxString m_kicad_env
full path to this program
Definition: pgm_base.h:330
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 void SetLocalEnvVariables()
Updates the local environment with the contents of the current ENV_VAR_MAP stored in the COMMON_SETTI...
Definition: pgm_base.cpp:773
virtual void SetLanguagePath()
Definition: pgm_base.cpp:730
bool SetDefaultLanguage(wxString &aErrMsg)
Set the default language without reference to any preferences.
Definition: pgm_base.cpp:676
wxString m_text_editor
Filename of the app selected for browsing PDFs.
Definition: pgm_base.h:338
virtual ~PGM_BASE()
Definition: pgm_base.cpp:134
std::unique_ptr< SCRIPTING > m_python_scripting
Definition: pgm_base.h:327
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:714
int m_language_id
Definition: pgm_base.h:333
virtual const wxString & GetTextEditor(bool aCanShowFileChooser=true)
Return the path to the preferred text editor application.
Definition: pgm_base.cpp:166
virtual wxLocale * GetLocale()
Definition: pgm_base.h:162
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:129
virtual bool IsKicadEnvVariableDefined() const
Definition: pgm_base.h:156
virtual void WritePdfBrowserInfos()
Save the PDF browser choice to the common configuration.
Definition: eda_doc.cpp:44
void SaveCommonSettings()
Save the program (process) settings subset which are stored .kicad_common.
Definition: pgm_base.cpp:564
static const wxChar workingDirKey[]
Definition: pgm_base.h:259
int m_ModalDialogCount
Definition: pgm_base.h:300
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:202
virtual bool SetLanguage(wxString &aErrMsg, bool first_time=false)
Set the dictionary file name for internationalization.
Definition: pgm_base.cpp:579
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: single_top.cpp:111
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
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
Definition: pgm_base.cpp:83
A small class to handle the list of existing translations.
Definition: pgm_base.h:60
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
Definition: pgm_base.h:65
bool m_DoNotTranslate
Set to true if the m_Lang_Label must not be translated.
Definition: pgm_base.h:71
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.h:68
int m_WX_Lang_Identifier
wxWidgets locale identifier (See wxWidgets doc)
Definition: pgm_base.h:62