Functional
*) void KIWAY::ExpressMail( FRAME_T aDestination, MAIL_T aCommand, const std::string& aPayload, wxWindow* aSource=NULL ); *) virtual void KiwayMailIn( KIWAY_EXPRESS& aEvent ); *) enum MAIL_T expansion into the brave new world if cross KIWAY_PLAYER communications. Let the KIWAY_PLAYING begin..... through well conceived mail from one KIWAY_PLAYER to another. Get thinking now. Add a new MAIL_T value, then send ExpressMail(), and receive it in KiwayMailIn(), it's that easy.
This commit is contained in:
parent
1648d7fd43
commit
7a129e167b
|
@ -37,6 +37,7 @@ KIFACE* KIWAY::m_kiface[KIWAY_FACE_COUNT];
|
||||||
int KIWAY::m_kiface_version[KIWAY_FACE_COUNT];
|
int KIWAY::m_kiface_version[KIWAY_FACE_COUNT];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
KIWAY::KIWAY( PGM_BASE* aProgram, wxFrame* aTop ):
|
KIWAY::KIWAY( PGM_BASE* aProgram, wxFrame* aTop ):
|
||||||
m_program( aProgram ),
|
m_program( aProgram ),
|
||||||
m_top( 0 )
|
m_top( 0 )
|
||||||
|
@ -317,8 +318,7 @@ bool KIWAY::ProcessEvent( wxEvent& aEvent )
|
||||||
|
|
||||||
if( alive )
|
if( alive )
|
||||||
{
|
{
|
||||||
#if 0
|
#if 1
|
||||||
// This is still broken, but is the way to go.
|
|
||||||
return alive->ProcessEvent( aEvent );
|
return alive->ProcessEvent( aEvent );
|
||||||
#else
|
#else
|
||||||
alive->KiwayMailIn( *mail );
|
alive->KiwayMailIn( *mail );
|
||||||
|
|
|
@ -27,7 +27,18 @@
|
||||||
//IMPLEMENT_DYNAMIC_CLASS( KIWAY_EXPRESS, wxEvent )
|
//IMPLEMENT_DYNAMIC_CLASS( KIWAY_EXPRESS, wxEvent )
|
||||||
|
|
||||||
|
|
||||||
|
#if 0 // requires that this code reside in only a single link image, rather than
|
||||||
|
// in each of kicad.exe, _pcbnew.kiface, and _eeschema.kiface as now.
|
||||||
|
// In the current case wxEVENT_ID will get a different value in each link
|
||||||
|
// image. We need to put this into a shared library for common utilization,
|
||||||
|
// I think that library should be libki.so. I am reluctant to do that now
|
||||||
|
// because the cost will be finding libki.so at runtime, and we need infrastructure
|
||||||
|
// to set our LIB_ENV_VAR to the proper place so libki.so can be reliably found.
|
||||||
|
// All things in due course.
|
||||||
const wxEventType KIWAY_EXPRESS::wxEVENT_ID = wxNewEventType();
|
const wxEventType KIWAY_EXPRESS::wxEVENT_ID = wxNewEventType();
|
||||||
|
#else
|
||||||
|
const wxEventType KIWAY_EXPRESS::wxEVENT_ID = 30000; // commmon accross all link images, hopefully unique.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
KIWAY_EXPRESS::KIWAY_EXPRESS( const KIWAY_EXPRESS& anOther ) :
|
KIWAY_EXPRESS::KIWAY_EXPRESS( const KIWAY_EXPRESS& anOther ) :
|
||||||
|
|
|
@ -8,7 +8,9 @@
|
||||||
BEGIN_EVENT_TABLE( KIWAY_PLAYER, EDA_BASE_FRAME )
|
BEGIN_EVENT_TABLE( KIWAY_PLAYER, EDA_BASE_FRAME )
|
||||||
/* have not been able to get this to work yet:
|
/* have not been able to get this to work yet:
|
||||||
EVT_KIWAY_EXPRESS( KIWAY_PLAYER::kiway_express )
|
EVT_KIWAY_EXPRESS( KIWAY_PLAYER::kiway_express )
|
||||||
Use Connect() in constructor until this can be sorted out
|
Use Connect() in constructor until this can be sorted out.
|
||||||
|
|
||||||
|
OK the problem is KIWAY_PLAYER::wxEVENT_ID not being unique accross all link images.
|
||||||
*/
|
*/
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <kiface_i.h>
|
#include <kiface_i.h>
|
||||||
|
#include <kiway_express.h>
|
||||||
#include <macros.h>
|
#include <macros.h>
|
||||||
#include <eda_dde.h>
|
#include <eda_dde.h>
|
||||||
#include <wxEeschemaStruct.h>
|
#include <wxEeschemaStruct.h>
|
||||||
|
@ -176,19 +177,27 @@ void SCH_EDIT_FRAME::SendMessageToPCBNEW( EDA_ITEM* aComponent, SCH_COMPONENT* a
|
||||||
SendCommand( MSG_TO_PCB, packet.c_str() );
|
SendCommand( MSG_TO_PCB, packet.c_str() );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Kiway().ExpressMail( FRAME_PCB, 0, packet, this );
|
// Typically ExpressMail is going to be s-expression packets, but since
|
||||||
|
// we have existing interpreter of the cross probe packet on the other
|
||||||
|
// side in place, we use that here.
|
||||||
|
Kiway().ExpressMail( FRAME_PCB, MAIL_CROSS_PROBE, packet, this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#include <kiway_express.h>
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
|
void SCH_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
|
||||||
{
|
{
|
||||||
// @todo switch on command type
|
const std::string& payload = mail.GetPayload();
|
||||||
std::string payload = mail.GetPayload();
|
|
||||||
|
|
||||||
ExecuteRemoteCommand( payload.c_str() );
|
switch( mail.Command() )
|
||||||
|
{
|
||||||
|
case MAIL_CROSS_PROBE:
|
||||||
|
ExecuteRemoteCommand( payload.c_str() );
|
||||||
|
break;
|
||||||
|
|
||||||
|
// many many others.
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,20 @@
|
||||||
#include <wx/wx.h>
|
#include <wx/wx.h>
|
||||||
#include <frame_type.h>
|
#include <frame_type.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum MAIL_T
|
||||||
|
* is the set of mail types sendable via KIWAY::ExpressMail() and supplied as
|
||||||
|
* the @a aCommand parameter to that function. Such mail will be received in
|
||||||
|
* KIWAY_PLAYER::KiwayMailIn( KIWAY_EXPRESS& aEvent ) and aEvent.Command() will
|
||||||
|
* match aCommand to ExpressMail().
|
||||||
|
*/
|
||||||
|
enum MAIL_T
|
||||||
|
{
|
||||||
|
MAIL_CROSS_PROBE,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class KIWAY_EXPRESS
|
* Class KIWAY_EXPRESS
|
||||||
* carries a payload from one KIWAY_PLAYER to anothing within a PROJECT.
|
* carries a payload from one KIWAY_PLAYER to anothing within a PROJECT.
|
||||||
|
@ -42,6 +56,15 @@ public:
|
||||||
*/
|
*/
|
||||||
FRAME_T Dest() { return m_destination; }
|
FRAME_T Dest() { return m_destination; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function Command
|
||||||
|
* returns the EXPRESS_MAIL_T associated with this mail.
|
||||||
|
*/
|
||||||
|
MAIL_T Command()
|
||||||
|
{
|
||||||
|
return (MAIL_T) GetId(); // re-purposed control id.
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function Payload
|
* Function Payload
|
||||||
* returns the payload, which can be any text but it typicall self
|
* returns the payload, which can be any text but it typicall self
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <kiface_i.h>
|
#include <kiface_i.h>
|
||||||
|
#include <kiway_express.h>
|
||||||
#include <wxPcbStruct.h>
|
#include <wxPcbStruct.h>
|
||||||
#include <eda_dde.h>
|
#include <eda_dde.h>
|
||||||
#include <macros.h>
|
#include <macros.h>
|
||||||
|
@ -206,19 +207,27 @@ void PCB_EDIT_FRAME::SendMessageToEESCHEMA( BOARD_ITEM* aSyncItem )
|
||||||
SendCommand( MSG_TO_SCH, packet.c_str() );
|
SendCommand( MSG_TO_SCH, packet.c_str() );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Kiway().ExpressMail( FRAME_SCH, 0, packet, this );
|
// Typically ExpressMail is going to be s-expression packets, but since
|
||||||
|
// we have existing interpreter of the cross probe packet on the other
|
||||||
|
// side in place, we use that here.
|
||||||
|
Kiway().ExpressMail( FRAME_SCH, MAIL_CROSS_PROBE, packet, this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#include <kiway_express.h>
|
|
||||||
|
|
||||||
void PCB_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
|
void PCB_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
|
||||||
{
|
{
|
||||||
// @todo switch on command type
|
const std::string& payload = mail.GetPayload();
|
||||||
std::string payload = mail.GetPayload();
|
|
||||||
|
|
||||||
ExecuteRemoteCommand( payload.c_str() );
|
switch( mail.Command() )
|
||||||
|
{
|
||||||
|
case MAIL_CROSS_PROBE:
|
||||||
|
ExecuteRemoteCommand( payload.c_str() );
|
||||||
|
break;
|
||||||
|
|
||||||
|
// many many others.
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue