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 <kicommon.h>
35#include <exception>
36#include <map>
37#include <vector>
38#include <memory>
39#include <search_stack.h>
41#include <wx/filename.h>
42#include <wx/snglinst.h>
43
44class wxApp;
45class wxMenu;
46class wxWindow;
47class wxSplashScreen;
48
51class COMMON_SETTINGS;
53class SCRIPTING;
54
63{
66
69
71 wxString m_Lang_Label;
72
75};
76
77
82
97{
98public:
99 PGM_BASE();
100 virtual ~PGM_BASE();
101
102#if 0
103 /*
104
105 Derived classes must implement these two functions: OnPgmInit() and
106 OnPgmExit(), and since they are only called from same source file as their
107 implementation, these need not be virtual here. In fact, in the case of
108 python project manager's class PGM_PYTHON, these functions are actually
109 written in python. In total there are three implementations, corresponding
110 to the three defines given by kiface.h's KFCTL_* #defines.
111
112 */
113
119 virtual bool OnPgmInit() = 0; // call this from wxApp::OnInit()
120
121 virtual void OnPgmExit() = 0; // call this from wxApp::OnExit()
122#endif
123
127 void BuildArgvUtf8();
128
135 virtual void MacOpenFile( const wxString& aFileName ) = 0;
136
137 virtual SETTINGS_MANAGER& GetSettingsManager() const { return *m_settings_manager; }
138
139 virtual COMMON_SETTINGS* GetCommonSettings() const;
140
141 virtual BACKGROUND_JOBS_MONITOR& GetBackgroundJobMonitor() const { return *m_background_jobs_monitor; }
142
143 virtual NOTIFICATIONS_MANAGER& GetNotificationsManager() const { return *m_notifications_manager; }
144
145 virtual void SetTextEditor( const wxString& aFileName );
146
156 virtual const wxString& GetTextEditor( bool aCanShowFileChooser = true );
157
165 virtual const wxString AskUserForPreferredEditor(
166 const wxString& aDefaultEditor = wxEmptyString );
167
168 virtual bool IsKicadEnvVariableDefined() const { return !m_kicad_env.IsEmpty(); }
169
170 virtual const wxString& GetKicadEnvVariable() const { return m_kicad_env; }
171
172 virtual const wxString& GetExecutablePath() const;
173
174 virtual wxLocale* GetLocale() { return m_locale; }
175
176 virtual const wxString& GetPdfBrowserName() const { return m_pdf_browser; }
177
178 virtual void SetPdfBrowserName( const wxString& aFileName ) { m_pdf_browser = aFileName; }
179
185 virtual bool UseSystemPdfBrowser() const
186 {
187 return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
188 }
189
193 virtual void ForceSystemPdfBrowser( bool aFlg ) { m_use_system_pdf_browser = aFlg; }
194
205 virtual bool SetLanguage( wxString& aErrMsg, bool first_time = false );
206
213 bool SetDefaultLanguage( wxString& aErrMsg );
214
222 virtual void SetLanguageIdentifier( int menu_id );
223
227 virtual int GetSelectedLanguageIdentifier() const { return m_language_id; }
228
232 virtual wxString GetLanguageTag();
233
234 virtual void SetLanguagePath();
235
239 virtual void ReadPdfBrowserInfos();
240
244 virtual void WritePdfBrowserInfos();
245
258 virtual bool SetLocalEnvVariable( const wxString& aName, const wxString& aValue );
259
265 virtual void SetLocalEnvVariables();
266
267 virtual ENV_VAR_MAP& GetLocalEnvVariables() const;
268
274 virtual wxApp& App();
275
276 static const wxChar workingDirKey[];
277
293 bool InitPgm( bool aHeadless = false, bool aSkipPyInit = false, bool aIsUnitTest = false );
294
295 // The PGM_* classes can have difficulties at termination if they
296 // are not destroyed soon enough. Relying on a static destructor can be
297 // too late for contained objects like wxSingleInstanceChecker.
298 void Destroy();
299
303 void SaveCommonSettings();
304
305#ifdef KICAD_USE_SENTRY
309 bool IsSentryOptedIn();
310
317 void SetSentryOptIn( bool aOptIn );
318
322 void ResetSentryId();
323
327 const wxString& GetSentryId();
328#endif
329
337 void HandleException( std::exception_ptr aPtr );
338
350 void HandleAssert( const wxString& aFile, int aLine, const wxString& aFunc,
351 const wxString& aCond, const wxString& aMsg );
352
358 bool IsGUI();
359
360
361 void ShowSplash();
362 void HideSplash();
363
367 std::unique_ptr<wxSingleInstanceChecker>& SingleInstance()
368 {
369 return m_pgm_checker;
370 }
371
376
377 std::vector<void*> m_ModalDialogs;
378
380
382
383protected:
385 void loadCommonSettings();
386
388 void setLanguageId( int aId ) { m_language_id = aId; }
389
390#ifdef KICAD_USE_SENTRY
391 void sentryInit();
392 void sentryPrompt();
393 wxString sentryCreateUid();
394#endif
395
396protected:
397 std::unique_ptr<SETTINGS_MANAGER> m_settings_manager;
398 std::unique_ptr<BACKGROUND_JOBS_MONITOR> m_background_jobs_monitor;
399 std::unique_ptr<NOTIFICATIONS_MANAGER> m_notifications_manager;
400
401 std::unique_ptr<SCRIPTING> m_python_scripting;
402
404 std::unique_ptr<wxSingleInstanceChecker> m_pgm_checker;
405
406
407 wxString m_kicad_env;
408
409 wxLocale* m_locale;
411
413 wxString m_pdf_browser;
414
416
417#ifdef KICAD_USE_SENTRY
418 wxFileName m_sentry_optin_fn;
419 wxFileName m_sentry_uid_fn;
420 wxString m_sentryUid;
421#endif
422
423 char** m_argvUtf8;
425
427
428 wxSplashScreen* m_splash;
429};
430
431
434KICOMMON_API extern PGM_BASE& Pgm();
435
439
440KICOMMON_API extern void SetPgm( PGM_BASE* pgm );
441
442
443#endif // PGM_BASE_H_
Container for data for KiCad programs.
Definition: pgm_base.h:97
std::unique_ptr< NOTIFICATIONS_MANAGER > m_notifications_manager
Definition: pgm_base.h:399
int m_argcUtf8
argv parameters converted to utf8 form, because wxwidgets has opinions and will return argv as either...
Definition: pgm_base.h:426
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:375
void setLanguageId(int aId)
Trap all changes in here, simplifies debugging.
Definition: pgm_base.h:388
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:397
virtual void SetPdfBrowserName(const wxString &aFileName)
Definition: pgm_base.h:178
wxLocale * m_locale
The KICAD system environment variable.
Definition: pgm_base.h:409
wxSplashScreen * m_splash
Definition: pgm_base.h:428
std::unique_ptr< wxSingleInstanceChecker > & SingleInstance()
Allows access to the wxSingleInstanceChecker to test for other running KiCads.
Definition: pgm_base.h:367
virtual BACKGROUND_JOBS_MONITOR & GetBackgroundJobMonitor() const
Definition: pgm_base.h:141
virtual const wxString & GetKicadEnvVariable() const
Definition: pgm_base.h:170
char ** m_argvUtf8
Definition: pgm_base.h:423
virtual bool UseSystemPdfBrowser() const
Definition: pgm_base.h:185
bool m_use_system_pdf_browser
Definition: pgm_base.h:412
bool m_Quitting
Definition: pgm_base.h:379
virtual NOTIFICATIONS_MANAGER & GetNotificationsManager() const
Definition: pgm_base.h:143
virtual const wxString & GetPdfBrowserName() const
Definition: pgm_base.h:176
std::unique_ptr< wxSingleInstanceChecker > m_pgm_checker
Checks if there is another copy of Kicad running at the same time.
Definition: pgm_base.h:404
virtual int GetSelectedLanguageIdentifier() const
Definition: pgm_base.h:227
wxString m_pdf_browser
Definition: pgm_base.h:413
std::vector< void * > m_ModalDialogs
Definition: pgm_base.h:377
wxString m_kicad_env
Definition: pgm_base.h:407
virtual void ForceSystemPdfBrowser(bool aFlg)
Force the use of system PDF browser, even if a preferred PDF browser is set.
Definition: pgm_base.h:193
wxString m_text_editor
Filename of the app selected for browsing PDFs.
Definition: pgm_base.h:415
std::unique_ptr< SCRIPTING > m_python_scripting
Definition: pgm_base.h:401
int m_language_id
Definition: pgm_base.h:410
std::unique_ptr< BACKGROUND_JOBS_MONITOR > m_background_jobs_monitor
Definition: pgm_base.h:398
virtual wxLocale * GetLocale()
Definition: pgm_base.h:174
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:137
virtual bool IsKicadEnvVariableDefined() const
Definition: pgm_base.h:168
bool m_PropertyGridInitialized
Definition: pgm_base.h:381
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
#define KICOMMON_API
Definition: kicommon.h:28
KICOMMON_API PGM_BASE * PgmOrNull()
similar to PGM_BASE& Pgm(), but return a reference that can be nullptr when running a shared lib from...
Definition: pgm_base.cpp:1038
KICOMMON_API void SetPgm(PGM_BASE *pgm)
Definition: pgm_base.cpp:1043
KICOMMON_API LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
Definition: pgm_base.cpp:88
KICOMMON_API PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1031
A small class to handle the list of existing translations.
Definition: pgm_base.h:63
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
Definition: pgm_base.h:68
bool m_DoNotTranslate
Set to true if the m_Lang_Label must not be translated.
Definition: pgm_base.h:74
wxString m_Lang_Label
Labels used in menus.
Definition: pgm_base.h:71
int m_WX_Lang_Identifier
wxWidgets locale identifier (See wxWidgets doc)
Definition: pgm_base.h:65