KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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 <exception>
35#include <map>
36#include <vector>
37#include <memory>
38#include <search_stack.h>
40#include <wx/filename.h>
41#include <wx/snglinst.h>
42
43class wxApp;
44class wxMenu;
45class wxWindow;
46class wxSplashScreen;
47
50class COMMON_SETTINGS;
52class SCRIPTING;
53
62{
65
68
70 wxString m_Lang_Label;
71
74};
75
76
81
96{
97public:
98 PGM_BASE();
99 virtual ~PGM_BASE();
100
101#if 0
102 /*
103
104 Derived classes must implement these two functions: OnPgmInit() and
105 OnPgmExit(), and since they are only called from same source file as their
106 implementation, these need not be virtual here. In fact, in the case of
107 python project manager's class PGM_PYTHON, these functions are actually
108 written in python. In total there are three implementations, corresponding
109 to the three defines given by kiface.h's KFCTL_* #defines.
110
111 */
112
118 virtual bool OnPgmInit() = 0; // call this from wxApp::OnInit()
119
120 virtual void OnPgmExit() = 0; // call this from wxApp::OnExit()
121#endif
122
126 void BuildArgvUtf8();
127
134 virtual void MacOpenFile( const wxString& aFileName ) = 0;
135
137
138 virtual COMMON_SETTINGS* GetCommonSettings() const;
139
141
143
144 virtual void SetTextEditor( const wxString& aFileName );
145
155 virtual const wxString& GetTextEditor( bool aCanShowFileChooser = true );
156
164 virtual const wxString AskUserForPreferredEditor(
165 const wxString& aDefaultEditor = wxEmptyString );
166
167 virtual bool IsKicadEnvVariableDefined() const { return !m_kicad_env.IsEmpty(); }
168
169 virtual const wxString& GetKicadEnvVariable() const { return m_kicad_env; }
170
171 virtual const wxString& GetExecutablePath() const;
172
173 virtual wxLocale* GetLocale() { return m_locale; }
174
175 virtual const wxString& GetPdfBrowserName() const { return m_pdf_browser; }
176
177 virtual void SetPdfBrowserName( const wxString& aFileName ) { m_pdf_browser = aFileName; }
178
184 virtual bool UseSystemPdfBrowser() const
185 {
186 return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
187 }
188
192 virtual void ForceSystemPdfBrowser( bool aFlg ) { m_use_system_pdf_browser = aFlg; }
193
204 virtual bool SetLanguage( wxString& aErrMsg, bool first_time = false );
205
212 bool SetDefaultLanguage( wxString& aErrMsg );
213
221 virtual void SetLanguageIdentifier( int menu_id );
222
226 virtual int GetSelectedLanguageIdentifier() const { return m_language_id; }
227
231 virtual wxString GetLanguageTag();
232
233 virtual void SetLanguagePath();
234
238 virtual void ReadPdfBrowserInfos();
239
243 virtual void WritePdfBrowserInfos();
244
257 virtual bool SetLocalEnvVariable( const wxString& aName, const wxString& aValue );
258
264 virtual void SetLocalEnvVariables();
265
266 virtual ENV_VAR_MAP& GetLocalEnvVariables() const;
267
273 virtual wxApp& App();
274
275 static const wxChar workingDirKey[];
276
292 bool InitPgm( bool aHeadless = false, bool aSkipPyInit = false, bool aIsUnitTest = false );
293
294 // The PGM_* classes can have difficulties at termination if they
295 // are not destroyed soon enough. Relying on a static destructor can be
296 // too late for contained objects like wxSingleInstanceChecker.
297 void Destroy();
298
302 void SaveCommonSettings();
303
304#ifdef KICAD_USE_SENTRY
308 bool IsSentryOptedIn();
309
316 void SetSentryOptIn( bool aOptIn );
317
321 void ResetSentryId();
322
326 const wxString& GetSentryId();
327#endif
328
336 void HandleException( std::exception_ptr aPtr );
337
349 void HandleAssert( const wxString& aFile, int aLine, const wxString& aFunc,
350 const wxString& aCond, const wxString& aMsg );
351
357 bool IsGUI();
358
359
360 void ShowSplash();
361 void HideSplash();
362
366 std::unique_ptr<wxSingleInstanceChecker>& SingleInstance()
367 {
368 return m_pgm_checker;
369 }
370
375
376 std::vector<void*> m_ModalDialogs;
377
379
381
382protected:
384 void loadCommonSettings();
385
387 void setLanguageId( int aId ) { m_language_id = aId; }
388
389#ifdef KICAD_USE_SENTRY
390 void sentryInit();
391 void sentryPrompt();
392 wxString sentryCreateUid();
393#endif
394
395protected:
396 std::unique_ptr<SETTINGS_MANAGER> m_settings_manager;
397 std::unique_ptr<BACKGROUND_JOBS_MONITOR> m_background_jobs_monitor;
398 std::unique_ptr<NOTIFICATIONS_MANAGER> m_notifications_manager;
399
400 std::unique_ptr<SCRIPTING> m_python_scripting;
401
403 std::unique_ptr<wxSingleInstanceChecker> m_pgm_checker;
404
405
406 wxString m_kicad_env;
407
408 wxLocale* m_locale;
410
412 wxString m_pdf_browser;
413
415
416#ifdef KICAD_USE_SENTRY
417 wxFileName m_sentry_optin_fn;
418 wxFileName m_sentry_uid_fn;
419 wxString m_sentryUid;
420#endif
421
422 char** m_argvUtf8;
424
426
427 wxSplashScreen* m_splash;
428};
429
430
433extern PGM_BASE& Pgm();
434
437extern PGM_BASE* PgmOrNull();
438
439
440#endif // PGM_BASE_H_
Container for data for KiCad programs.
Definition: pgm_base.h:96
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition: pgm_base.cpp:650
virtual wxApp & App()
Returns a bare naked wxApp which may come from wxPython, SINGLE_TOP, or kicad.exe.
Definition: pgm_base.cpp:175
std::unique_ptr< NOTIFICATIONS_MANAGER > m_notifications_manager
Definition: pgm_base.h:398
int m_argcUtf8
argv parameters converted to utf8 form, because wxwidgets has opinions and will return argv as either...
Definition: pgm_base.h:425
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
Definition: pgm_base.cpp:895
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:374
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:387
virtual void MacOpenFile(const wxString &aFileName)=0
Specific to MacOSX (not used under Linux or Windows).
std::unique_ptr< SETTINGS_MANAGER > m_settings_manager
Definition: pgm_base.h:396
void loadCommonSettings()
Loads internal settings from COMMON_SETTINGS.
Definition: pgm_base.cpp:614
virtual void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:177
wxLocale * m_locale
The KICAD system environment variable.
Definition: pgm_base.h:408
void Destroy()
Definition: pgm_base.cpp:159
wxSplashScreen * m_splash
Definition: pgm_base.h:427
std::unique_ptr< wxSingleInstanceChecker > & SingleInstance()
Allows access to the wxSingleInstanceChecker to test for other running KiCads.
Definition: pgm_base.h:366
virtual BACKGROUND_JOBS_MONITOR & GetBackgroundJobMonitor() const
Definition: pgm_base.h:140
bool InitPgm(bool aHeadless=false, bool aSkipPyInit=false, bool aIsUnitTest=false)
Initialize this program.
Definition: pgm_base.cpp:450
virtual const wxString & GetKicadEnvVariable() const
Definition: pgm_base.h:169
char ** m_argvUtf8
Definition: pgm_base.h:422
virtual bool UseSystemPdfBrowser() const
Definition: pgm_base.h:184
virtual void ReadPdfBrowserInfos()
Read the PDF browser choice from the common configuration.
Definition: pgm_base.cpp:1016
bool IsGUI()
Determine if the application is running with a GUI.
Definition: pgm_base.cpp:901
bool m_use_system_pdf_browser
Definition: pgm_base.h:411
bool m_Quitting
Definition: pgm_base.h:378
virtual NOTIFICATIONS_MANAGER & GetNotificationsManager() const
Definition: pgm_base.h:142
void BuildArgvUtf8()
Builds the UTF8 based argv variable.
Definition: pgm_base.cpp:405
virtual const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:175
virtual void SetTextEditor(const wxString &aFileName)
Definition: pgm_base.cpp:182
std::unique_ptr< wxSingleInstanceChecker > m_pgm_checker
Checks if there is another copy of Kicad running at the same time.
Definition: pgm_base.h:403
virtual int GetSelectedLanguageIdentifier() const
Definition: pgm_base.h:226
wxString m_pdf_browser
Definition: pgm_base.h:412
std::vector< void * > m_ModalDialogs
Definition: pgm_base.h:376
virtual bool SetLocalEnvVariable(const wxString &aName, const wxString &aValue)
Sets the environment variable aName to aValue.
Definition: pgm_base.cpp:848
wxString m_kicad_env
Definition: pgm_base.h:406
virtual void ForceSystemPdfBrowser(bool aFlg)
Force the use of system PDF browser, even if a preferred PDF browser is set.
Definition: pgm_base.h:192
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:879
virtual void SetLanguagePath()
Definition: pgm_base.cpp:830
bool SetDefaultLanguage(wxString &aErrMsg)
Set the default language without reference to any preferences.
Definition: pgm_base.cpp:757
void ShowSplash()
Definition: pgm_base.cpp:420
wxString m_text_editor
Filename of the app selected for browsing PDFs.
Definition: pgm_base.h:414
virtual ~PGM_BASE()
Definition: pgm_base.cpp:145
std::unique_ptr< SCRIPTING > m_python_scripting
Definition: pgm_base.h:400
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:798
int m_language_id
Definition: pgm_base.h:409
std::unique_ptr< BACKGROUND_JOBS_MONITOR > m_background_jobs_monitor
Definition: pgm_base.h:397
void HandleException(std::exception_ptr aPtr)
A exception handler to be used at the top level if exceptions bubble up that for.
Definition: pgm_base.cpp:910
void HandleAssert(const wxString &aFile, int aLine, const wxString &aFunc, const wxString &aCond, const wxString &aMsg)
A common assert handler to be used between single_top and kicad.
Definition: pgm_base.cpp:967
virtual wxString GetLanguageTag()
Definition: pgm_base.cpp:814
virtual const wxString & GetTextEditor(bool aCanShowFileChooser=true)
Return the path to the preferred text editor application.
Definition: pgm_base.cpp:189
virtual wxLocale * GetLocale()
Definition: pgm_base.h:173
virtual const wxString & GetExecutablePath() const
Definition: pgm_base.cpp:1010
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:136
void HideSplash()
Definition: pgm_base.cpp:439
virtual bool IsKicadEnvVariableDefined() const
Definition: pgm_base.h:167
virtual void WritePdfBrowserInfos()
Save the PDF browser choice to the common configuration.
Definition: pgm_base.cpp:1023
void SaveCommonSettings()
Save the program (process) settings subset which are stored .kicad_common.
Definition: pgm_base.cpp:641
bool m_PropertyGridInitialized
Definition: pgm_base.h:380
static const wxChar workingDirKey[]
Definition: pgm_base.h:275
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:225
virtual bool SetLanguage(wxString &aErrMsg, bool first_time=false)
Set the dictionary file name for internationalization.
Definition: pgm_base.cpp:656
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: single_top.cpp:119
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:160
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
Definition: pgm_base.cpp:88
A small class to handle the list of existing translations.
Definition: pgm_base.h:62
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
Definition: pgm_base.h:67
bool m_DoNotTranslate
Set to true if the m_Lang_Label must not be translated.
Definition: pgm_base.h:73
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.h:70
int m_WX_Lang_Identifier
wxWidgets locale identifier (See wxWidgets doc)
Definition: pgm_base.h:64