38#include <wx/cmdline.h> 
   40#include <wx/filename.h> 
   41#include <wx/stdpaths.h> 
   42#include <wx/snglinst.h> 
   43#include <wx/html/htmlwin.h> 
   64#ifdef KICAD_USE_SENTRY 
  104        git_libgit2_shutdown();
 
 
  109        wxFileName  filename( aFileName );
 
  111        if( filename.FileExists() )
 
  123                    blocking_win->Close( 
true );
 
 
 
  142    virtual bool OnInit()
 override { AddDependency( CLASSINFO( wxHtmlWinParser ) ); 
return true; };
 
 
  154void CustomAssertHandler( 
const wxString& file,
 
  156                          const wxString& func,
 
  157                          const wxString& cond,
 
  158                          const wxString& msg )
 
  184        wxSizerFlags::DisableConsistencyChecks();
 
  185        wxDISABLE_DEBUG_SUPPORT();
 
  186        wxSetAssertHandler( CustomAssertHandler );
 
  197        if( wxGetEnv( wxS( 
"KICAD_ENABLE_WXTRACE" ), 
nullptr ) )
 
  199            wxLog::EnableLogging( 
true );
 
  200            wxLog::SetLogLevel( wxLOG_Trace );
 
 
  226        return wxApp::OnExit();
 
 
  235            ret = wxApp::OnRun();
 
 
  247        if( aEvent.GetEventType() == wxEVT_SHOW )
 
  249            wxShowEvent& 
event = 
static_cast<wxShowEvent&
>( aEvent );
 
  250            wxDialog*    dialog = 
dynamic_cast<wxDialog*
>( 
event.GetEventObject() );
 
  256                if( event.IsShown() && dialog->IsModal() )
 
  258                    dlgs.push_back( dialog );
 
  261                else if( !event.IsShown() && !dlgs.empty()  )
 
  264                    if( dlgs.back() == dialog )
 
  267                    else if( 
auto it = std::find( dlgs.begin(), dlgs.end(), dialog ); it != dlgs.end() )
 
  268                        dlgs.erase( it, dlgs.end() );
 
 
  284    virtual bool OnExceptionInMainLoop()
 override 
  308    void MacOpenFile( 
const wxString& aFileName )
 override 
 
  322    wxString absoluteArgv0 = wxStandardPaths::Get().GetExecutablePath();
 
  324    if( !wxIsAbsolutePath( absoluteArgv0 ) )
 
  326        wxLogError( wxT( 
"No meaningful argv[0]" ) );
 
  332    int gitInit = git_libgit2_init();
 
  336        const git_error* err = git_error_last();
 
  337        wxString         msg = wxS( 
"Failed to initialize git library" );
 
  339        if( err && err->message )
 
  340            msg += wxS( 
": " ) + wxString::FromUTF8( err->message );
 
  348    bool skip_python_initialization = 
false;
 
  350#if defined( BITMAP_2_CMP ) || defined( PL_EDITOR ) || defined( GERBVIEW ) || \ 
  351    defined( PCB_CALCULATOR_BUILD ) 
  352    skip_python_initialization = 
true;
 
  355    if( !
InitPgm( 
false, skip_python_initialization ) )
 
  362#if !defined(BUILD_KIWAY_DLL) 
  388    m_api_server = std::make_unique<KICAD_API_SERVER>();
 
  396    if( frame == 
nullptr )
 
  403    Kiway.SetTop( frame );
 
  413        topFrame->PreloadLibraries( &
Kiway );
 
  417    App().SetTopWindow( frame );      
 
  433    std::vector<wxString> fileArgs;
 
  436    static const wxCmdLineEntryDesc desc[] = {
 
  437        { wxCMD_LINE_PARAM, 
nullptr, 
nullptr, 
"File to load", wxCMD_LINE_VAL_STRING,
 
  438          wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
 
  439        { wxCMD_LINE_NONE, 
nullptr, 
nullptr, 
nullptr, wxCMD_LINE_VAL_NONE, 0 }
 
  442    wxCmdLineParser parser( 
App().argc, 
App().argv );
 
  443    parser.SetDesc( desc );
 
  444    parser.Parse( 
false );
 
  446    if( parser.GetParamCount() )
 
  457        for( 
size_t i = 0; i < parser.GetParamCount(); i++ )
 
  458            fileArgs.push_back( parser.GetParam( i ) );
 
  461        if( fileArgs.size() == 1 )
 
  463            wxFileName argv1( fileArgs[0] );
 
  465#if defined(PGM_DATA_FILE_EXT) 
  470            if( !argv1.GetExt() )
 
  471                argv1.SetExt( wxT( PGM_DATA_FILE_EXT ) );
 
  473            argv1.MakeAbsolute();
 
  475            fileArgs[0] = argv1.GetFullPath();
 
  482    m_api_server->SetReadyToReply();
 
 
wxString GetMajorMinorVersion()
Get only the major and minor version in a string major.minor.
 
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...
 
static FACE_T KifaceType(FRAME_T aFrameType)
A simple mapping function which returns the FACE_T which is known to implement aFrameType.
 
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
 
static const wxString & GetExecutablePath()
 
virtual wxApp & App()
Return a bare naked wxApp which may come from wxPython, SINGLE_TOP, or kicad.exe.
 
void PreloadDesignBlockLibraries(KIWAY *aKiway)
Starts a background job to preload the global and project design block libraries.
 
virtual void MacOpenFile(const wxString &aFileName)=0
Specific to MacOSX (not used under Linux or Windows).
 
std::unique_ptr< SETTINGS_MANAGER > m_settings_manager
 
bool InitPgm(bool aHeadless=false, bool aSkipPyInit=false, bool aIsUnitTest=false)
Initialize this program.
 
std::vector< void * > m_ModalDialogs
 
void HandleException(std::exception_ptr aPtr)
A exception handler to be used at the top level if exceptions bubble up that for.
 
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.
 
virtual LIBRARY_MANAGER & GetLibraryManager() const
 
void SaveCommonSettings()
Save the program (process) settings subset which are stored .kicad_common.
 
T * RegisterSettings(T *aSettings, bool aLoadNow=true)
Take ownership of the pointer passed in.
 
void SetKiway(KIWAY *aKiway)
Associate this setting manager with the given Kiway.
 
void CheckAndRun(wxWindow *parent)
 
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 SetPgm(PGM_BASE *pgm)
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
wxIMPLEMENT_DYNAMIC_CLASS(HtmlModule, wxModule)
 
KIWAY Kiway(KFCTL_STANDALONE)
 
Implement a bare naked wxApp (so that we don't become dependent on functionality in a wxApp derivativ...
 
int FilterEvent(wxEvent &aEvent) override
 
Implement a participant in the KIWAY alchemy.
 
Implement PGM_BASE with its own OnPgmInit() and OnPgmExit().
 
void MacOpenFile(const wxString &aFileName) override
Specific to MacOSX (not used under Linux or Windows).
 
IFACE KIFACE_BASE kiface("pcb_test_frame", KIWAY::FACE_PCB)