38#include <wx/cmdline.h>
39#include <wx/filename.h>
40#include <wx/stdpaths.h>
41#include <wx/snglinst.h>
42#include <wx/html/htmlwin.h>
55#ifdef KICAD_USE_SENTRY
91 wxFileName filename( aFileName );
93 if( filename.FileExists() )
105 blocking_win->Close(
true );
129 virtual bool OnInit()
override { AddDependency( CLASSINFO( wxHtmlWinParser ) );
return true; };
139 const wxString& func,
140 const wxString& cond,
143 Pgm().HandleAssert( file, line, func, cond, msg );
162 wxDISABLE_DEBUG_SUPPORT();
180 Pgm().HandleException( std::current_exception() );
191 return wxApp::OnExit();
200 ret = wxApp::OnRun();
204 Pgm().HandleException( std::current_exception() );
212 if( aEvent.GetEventType() == wxEVT_SHOW )
214 wxShowEvent&
event =
static_cast<wxShowEvent&
>( aEvent );
215 wxDialog* dialog =
dynamic_cast<wxDialog*
>(
event.GetEventObject() );
217 std::vector<void*>& dlgs =
Pgm().m_ModalDialogs;
221 if( event.IsShown() && dialog->IsModal() )
223 dlgs.push_back( dialog );
226 else if( !event.IsShown() && !dlgs.empty() )
229 if( dlgs.back() == dialog )
232 else if(
auto it = std::find( dlgs.begin(), dlgs.end(), dialog ) ; it != dlgs.end() )
233 dlgs.erase( it, dlgs.end() );
249 virtual bool OnExceptionInMainLoop()
override
257 Pgm().HandleException( std::current_exception() );
272 void MacOpenFile(
const wxString& aFileName )
override
274 Pgm().MacOpenFile( aFileName );
288 if( !wxIsAbsolutePath( absoluteArgv0 ) )
290 wxLogError( wxT(
"No meaningful argv[0]" ) );
297 bool skip_python_initialization =
false;
298#if defined( BITMAP_2_CMP ) || defined( PL_EDITOR ) || defined( GERBVIEW ) ||\
299 defined( PCB_CALCULATOR_BUILD )
300 skip_python_initialization =
true;
303 if( !InitPgm(
false, skip_python_initialization ) )
310#if !defined(BUILD_KIWAY_DLL)
339 if( frame ==
nullptr )
346 App().SetTopWindow( frame );
358 std::vector<wxString> fileArgs;
361 static const wxCmdLineEntryDesc desc[] = {
362 { wxCMD_LINE_PARAM,
nullptr,
nullptr,
"File to load", wxCMD_LINE_VAL_STRING,
363 wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
364 { wxCMD_LINE_NONE,
nullptr,
nullptr,
nullptr, wxCMD_LINE_VAL_NONE, 0 }
367 wxCmdLineParser parser( App().argc, App().argv );
368 parser.SetDesc( desc );
369 parser.Parse(
false );
370 if( parser.GetParamCount() )
381 for(
size_t i = 0; i < parser.GetParamCount(); i++ )
382 fileArgs.push_back( parser.GetParam( i ) );
385 if( fileArgs.size() == 1 )
387 wxFileName argv1( fileArgs[0] );
389#if defined(PGM_DATA_FILE_EXT)
394 if( !argv1.GetExt() )
395 argv1.SetExt( wxT( PGM_DATA_FILE_EXT ) );
397 argv1.MakeAbsolute();
399 fileArgs[0] = argv1.GetFullPath();
const wxString & GetAboutTitle() const
virtual bool OnInit() override
virtual void OnExit() override
wxDECLARE_DYNAMIC_CLASS(HtmlModule)
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual bool OpenProjectFiles(const std::vector< wxString > &aFileList, int aCtl=0)
Open a project or set of files given by aFileList.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
static FACE_T KifaceType(FRAME_T aFrameType)
A simple mapping function which returns the FACE_T which is known to implement aFrameType.
bool set_kiface(FACE_T aFaceType, KIFACE *aKiface)
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
void SetTop(wxFrame *aTop)
Tell this KIWAY about the top most frame in the program and optionally allows it to play the role of ...
Container for data for KiCad programs.
virtual wxApp & App()
Returns a bare naked wxApp which may come from wxPython, SINGLE_TOP, or kicad.exe.
std::unique_ptr< SETTINGS_MANAGER > m_settings_manager
virtual const wxString & GetExecutablePath() const
void SaveCommonSettings()
Save the program (process) settings subset which are stored .kicad_common.
T * RegisterSettings(T *aSettings, bool aLoadNow=true)
Takes ownership of the pointer passed in.
void SetKiway(KIWAY *aKiway)
Associate this setting manager with the given Kiway.
This file is part of the common library.
KIFACE * KIFACE_GETTER_FUNC(int *aKIFACEversion, int aKIWAYversion, PGM_BASE *aProgram)
Point to the one and only KIFACE export.
#define KIFACE_VERSION
The KIWAY and KIFACE classes are used to communicate between various process modules,...
#define KFCTL_STANDALONE
Running as a standalone Top.
This file contains miscellaneous commonly used macros and functions.
SETTINGS_MANAGER * GetSettingsManager()
void CustomAssertHandler(const wxString &file, int line, const wxString &func, const wxString &cond, const wxString &msg)
wxIMPLEMENT_DYNAMIC_CLASS(HtmlModule, wxModule)
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Struct APP_SINGLE_TOP implements a bare naked wxApp (so that we don't become dependent on functionali...
int FilterEvent(wxEvent &aEvent) override
Implement a participant in the KIWAY alchemy.
Struct PGM_SINGLE_TOP implements PGM_BASE with its own OnPgmInit() and OnPgmExit().
void MacOpenFile(const wxString &aFileName) override
Specific to MacOSX (not used under Linux or Windows).