43#include <wx/stdpaths.h>
54 m_program(
aProgram ), m_ctl( aCtlBits ), m_top( nullptr ), m_blockingDialog( wxID_NONE )
76void KIWAY::player_destroy_handler( wxWindowDestroyEvent& event )
89 m_top->Disconnect( wxEVT_DESTROY,
90 wxWindowDestroyEventHandler( KIWAY::player_destroy_handler ),
96 aTop->Connect( wxEVT_DESTROY,
97 wxWindowDestroyEventHandler( KIWAY::player_destroy_handler ),
122 wxASSERT_MSG( 0, wxT(
"caller has a bug, passed a bad aFaceId" ) );
123 return wxEmptyString;
133 path = wxStandardPaths::Get().GetExecutablePath();
136 wxFileName fn =
path;
139 wxFileName fn =
Pgm().GetExecutablePath();
140 fn.AppendDir( wxT(
"Contents" ) );
141 fn.AppendDir( wxT(
"PlugIns" ) );
150 if( wxGetEnv( wxT(
"KICAD_RUN_FROM_BUILD_DIR" ),
nullptr ) )
157 fn = wxStandardPaths::Get().GetExecutablePath();
163 fn.AppendDir( wxT(
"kicad" ) );
164 fn.AppendDir( wxT(
"kicad.app" ) );
165 fn.AppendDir( wxT(
"Contents" ) );
166 fn.AppendDir( wxT(
"PlugIns" ) );
176 default: dirName =
name + 1;
break;
180 fn.AppendDir( dirName );
186 fn.SetExt( &KIFACE_SUFFIX[1] );
188 return fn.GetFullPath();
194 return Pgm().GetSettingsManager().
Prj();
207 wxASSERT_MSG( 0, wxT(
"caller has a bug, passed a bad aFaceId" ) );
223 if( wxGetEnv( wxT(
"KICAD_RUN_FROM_BUILD_DIR" ),
nullptr ) )
225 wxFileName myPath = wxStandardPaths::Get().GetExecutablePath();
227 if( !myPath.GetPath().EndsWith( wxT(
"pcbnew" ) ) )
229 myPath.RemoveLastDir();
230 myPath.AppendDir( wxT(
"pcbnew" ) );
235#ifdef KICAD_WIN32_VERIFY_CODESIGN
239 msg.Printf(
_(
"Failed to verify kiface library '%s' signature." ), dname );
244 wxDynamicLibrary dso;
246 void* addr =
nullptr;
252 int lc_new_type = LC_COLLATE;
253 std::string user_locale = setlocale( lc_new_type,
nullptr );
254 setlocale( lc_new_type,
"C" );
256 bool success = dso.Load( dname, wxDL_VERBATIM | wxDL_NOW | wxDL_GLOBAL );
258 setlocale( lc_new_type, user_locale.c_str() );
268 msg.Printf(
_(
"Failed to load kiface library '%s'." ), dname );
276 msg.Printf(
_(
"Could not read instance name and version from kiface library '%s'." ),
288 wxT(
"attempted DSO has a bug, failed to return a KIFACE*" ) );
310 "'%s'\ncould not be loaded\n" ), dname );
312 if( ! wxFileExists( dname ) )
313 msg <<
_(
"It is missing.\n" );
315 msg <<
_(
"Perhaps a shared library (.dll or .so) file is missing.\n" );
317 msg <<
_(
"From command line: argv[0]:\n'" );
318 msg << wxStandardPaths::Get().GetExecutablePath() << wxT(
"'\n" );
380 if( storedId == wxID_NONE )
383 wxWindow* frame = wxWindow::FindWindowById( storedId );
388 m_playerFrameId[aFrameType].compare_exchange_strong( storedId, wxID_NONE );
403 wxASSERT_MSG( 0, wxT(
"caller has a bug, passed a bad aFrameType" ) );
436 catch(
const std::exception& e)
459 wxASSERT_MSG( 0, wxT(
"caller has a bug, passed a bad aFrameType" ) );
465 if( frame ==
nullptr )
494 KIWAY_EXPRESS mail( aDestination, aCommand, aPayload, aSource );
503 aActions.push_back( action );
516 Pgm().SetLanguageIdentifier( aLanguage );
664 return kiface->HandleJob( job );
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
static std::list< TOOL_ACTION * > & GetActionList()
Return list of TOOL_ACTIONs.
The base frame for deriving all KiCad main window classes.
bool NonUserClose(bool aForce)
virtual void ProjectChanged()
Notification event that the project has changed.
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
bool ProcessEvent(wxEvent &aEvent) override
Override the default process event handler to implement the auto save feature.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
An simple container class that lets us dispatch output jobs to kifaces.
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
FRAME_T Dest()
Return the destination player id of the message.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual void KiwayMailIn(KIWAY_EXPRESS &aEvent)
Receive KIWAY_EXPRESS messages from other players.
virtual void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
const wxString dso_search_path(FACE_T aFaceId)
Get the [path &] name of the DSO holding the requested FACE_T.
int ProcessJob(KIWAY::FACE_T aFace, JOB *job)
void SetBlockingDialog(wxWindow *aWin)
virtual bool PlayerClose(FRAME_T aFrameType, bool doForce)
Call the KIWAY_PLAYER::Close( bool force ) function on the window and if not vetoed,...
static FACE_T KifaceType(FRAME_T aFrameType)
A simple mapping function which returns the FACE_T which is known to implement aFrameType.
wxWindowID m_blockingDialog
KIWAY(PGM_BASE *aProgram, int aCtlBits, wxFrame *aTop=nullptr)
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
static KIFACE * m_kiface[KIWAY_FACE_COUNT]
virtual void SetLanguage(int aLanguage)
Change the language and then calls ShowChangedLanguage() on all #KIWAY_PLAYERs.
virtual KIFACE * KiFACE(FACE_T aFaceId, bool doLoad=true)
Return the KIFACE* given a FACE_T.
FACE_T
Known KIFACE implementations.
static int m_kiface_version[KIWAY_FACE_COUNT]
KIWAY_PLAYER * GetPlayerFrame(FRAME_T aFrameType)
bool ProcessEvent(wxEvent &aEvent) override
virtual bool PlayersClose(bool doForce)
Call the KIWAY_PLAYER::Close( bool force ) function on all the windows and if none are vetoed,...
std::atomic< wxWindowID > m_playerFrameId[KIWAY_PLAYER_COUNT]
virtual void ExpressMail(FRAME_T aDestination, MAIL_T aCommand, std::string &aPayload, wxWindow *aSource=nullptr)
Send aPayload to aDestination from aSource.
virtual void GetActions(std::vector< TOOL_ACTION * > &aActions) const
Append all registered actions to the given list.
void SetTop(wxFrame *aTop)
Tell this KIWAY about the top most frame in the program and optionally allows it to play the role of ...
virtual void ProjectChanged()
Calls ProjectChanged() on all KIWAY_PLAYERs.
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
Container for data for KiCad programs.
Container for project specific data.
A logger class that filters out all log messages that are not generated by wxLogTrace and ignores the...
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
@ FRAME_FOOTPRINT_VIEWER_MODAL
@ FRAME_SCH_SYMBOL_EDITOR
void ignore_unused(const T &)
#define THROW_IO_ERROR(msg)
#define KFCTL_CPP_PROJECT_SUITE
Running under C++ project mgr, possibly with others.
KIFACE * KIFACE_GETTER_FUNC(int *aKIFACEversion, int aKIWAYversion, PGM_BASE *aProgram)
Point to the one and only KIFACE export.
#define KIFACE_INSTANCE_NAME_AND_VERSION
#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.
MAIL_T
The set of mail types sendable via KIWAY::ExpressMail() and supplied as the aCommand parameter to tha...
LANGUAGE_DESCR LanguagesList[]
An array containing all the languages that KiCad supports.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Implement a participant in the KIWAY alchemy.
int m_KI_Lang_Identifier
KiCad identifier used in menu selection (See id.h)
wxString m_Lang_Label
Labels used in menus.