1 changed files with 185 additions and 185 deletions
@ -1,185 +1,185 @@ |
|||
/*****************************************************************/ |
|||
/* Cross probing function: handle communication to/from eeschema */ |
|||
/*****************************************************************/ |
|||
|
|||
/* cross-probing.cpp */ |
|||
|
|||
#include "fctsys.h"
|
|||
|
|||
#include "common.h"
|
|||
#include "pcbnew.h"
|
|||
#include "eda_dde.h"
|
|||
|
|||
#include "id.h"
|
|||
#include "collectors.h"
|
|||
|
|||
#include "protos.h"
|
|||
|
|||
|
|||
/*******************************************/ |
|||
void RemoteCommand( const char* cmdline ) |
|||
/*******************************************/ |
|||
|
|||
/** Read a remote command send by eeschema via a socket,
|
|||
* port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242) |
|||
* @param cmdline = received command from eeschema |
|||
* Commands are |
|||
* $PART: "reference" put cursor on component |
|||
* $PIN: "pin name" $PART: "reference" put cursor on the footprint pin |
|||
*/ |
|||
{ |
|||
char line[1024]; |
|||
wxString msg; |
|||
char* idcmd; |
|||
char* text; |
|||
MODULE* module = 0; |
|||
WinEDA_PcbFrame* frame = EDA_Appl->m_PcbFrame; |
|||
|
|||
strncpy( line, cmdline, sizeof(line) - 1 ); |
|||
|
|||
idcmd = strtok( line, " \n\r" ); |
|||
text = strtok( NULL, " \n\r" ); |
|||
if( (idcmd == NULL) || (text == NULL) ) |
|||
return; |
|||
|
|||
if( strcmp( idcmd, "$PART:" ) == 0 ) |
|||
{ |
|||
msg = CONV_FROM_UTF8( text ); |
|||
|
|||
module = ReturnModule( frame->m_Pcb, msg ); |
|||
|
|||
msg.Printf( _( "Locate module %s %s" ), msg.GetData(), |
|||
module ? wxT( "Ok" ) : wxT( "not found" ) ); |
|||
|
|||
frame->Affiche_Message( msg ); |
|||
if( module ) |
|||
{ |
|||
wxClientDC dc( frame->DrawPanel ); |
|||
|
|||
frame->DrawPanel->PrepareGraphicContext( &dc ); |
|||
frame->DrawPanel->CursorOff( &dc ); |
|||
frame->GetScreen()->m_Curseur = module->m_Pos; |
|||
frame->DrawPanel->CursorOn( &dc ); |
|||
} |
|||
} |
|||
|
|||
if( idcmd && strcmp( idcmd, "$PIN:" ) == 0 ) |
|||
{ |
|||
wxString pinName, modName; |
|||
D_PAD* pad = NULL; |
|||
int netcode = -1; |
|||
|
|||
pinName = CONV_FROM_UTF8( text ); |
|||
|
|||
text = strtok( NULL, " \n\r" ); |
|||
if( text && strcmp( text, "$PART:" ) == 0 ) |
|||
text = strtok( NULL, "\n\r" ); |
|||
|
|||
wxClientDC dc( frame->DrawPanel ); |
|||
|
|||
frame->DrawPanel->PrepareGraphicContext( &dc ); |
|||
|
|||
modName = CONV_FROM_UTF8( text ); |
|||
module = ReturnModule( frame->m_Pcb, modName ); |
|||
if( module ) |
|||
pad = ReturnPad( module, pinName ); |
|||
|
|||
if( pad ) |
|||
netcode = pad->m_NetCode; |
|||
|
|||
if( netcode > 0 ) /* hightlighted the net selected net*/ |
|||
{ |
|||
if( g_HightLigt_Status ) /* erase the old hightlighted net */ |
|||
frame->Hight_Light( &dc ); |
|||
|
|||
g_HightLigth_NetCode = netcode; |
|||
frame->Hight_Light( &dc ); /* hightlighted the new one */ |
|||
|
|||
frame->DrawPanel->CursorOff( &dc ); |
|||
frame->GetScreen()->m_Curseur = pad->m_Pos; |
|||
frame->DrawPanel->CursorOn( &dc ); |
|||
} |
|||
|
|||
if( module == NULL ) |
|||
msg.Printf( _( "module %s not found" ), text ); |
|||
else if( pad == NULL ) |
|||
msg.Printf( _( "Pin %s (module %s) not found" ), pinName.GetData(), modName.GetData() ); |
|||
else |
|||
msg.Printf( _( "Locate Pin %s (module %s)" ), pinName.GetData(), modName.GetData() ); |
|||
|
|||
frame->Affiche_Message( msg ); |
|||
} |
|||
|
|||
if( module ) // if found, center the module on screen.
|
|||
frame->Recadre_Trace( false ); |
|||
} |
|||
|
|||
|
|||
// see wxstruct.h
|
|||
/**************************************************************************/ |
|||
void WinEDA_PcbFrame::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync ) |
|||
/**************************************************************************/ |
|||
/** Send a remote command to eeschema via a socket,
|
|||
* @param objectToSync = item to be located on schematic (module, pin or text) |
|||
* Commands are |
|||
* $PART: "reference" put cursor on component anchor |
|||
* $PART: "reference" $PAD: "pad number" put cursor on the component pin |
|||
* $PART: "reference" $REF: "reference" put cursor on the component ref |
|||
* $PART: "reference" $VAL: "value" put cursor on the component value |
|||
*/ |
|||
{ |
|||
char cmd[1024]; |
|||
const char* text_key; |
|||
MODULE* module = NULL; |
|||
D_PAD* pad; |
|||
TEXTE_MODULE* text_mod; |
|||
wxString msg; |
|||
|
|||
if( objectToSync == NULL ) |
|||
return; |
|||
|
|||
switch( objectToSync->Type() ) |
|||
{ |
|||
case TYPEMODULE: |
|||
module = (MODULE*) objectToSync; |
|||
sprintf( cmd, "$PART: \"%s\"", |
|||
CONV_TO_UTF8( module->m_Reference->m_Text ) ); |
|||
break; |
|||
|
|||
case TYPEPAD: |
|||
module = (MODULE*) objectToSync->m_Parent; |
|||
pad = (D_PAD*) objectToSync; |
|||
msg = pad->ReturnStringPadName(); |
|||
sprintf( cmd, "$PART: \"%s\" $PAD: \"%s\"", |
|||
CONV_TO_UTF8( module->m_Reference->m_Text ), |
|||
CONV_TO_UTF8( msg ) ); |
|||
break; |
|||
|
|||
case TYPETEXTEMODULE: |
|||
#define REFERENCE 0
|
|||
#define VALUE 1
|
|||
module = (MODULE*) objectToSync->m_Parent; |
|||
text_mod = (TEXTE_MODULE*) objectToSync; |
|||
if( text_mod->m_Type == REFERENCE ) |
|||
text_key = "$REF:"; |
|||
else if( text_mod->m_Type == VALUE ) |
|||
text_key = "$VAL:"; |
|||
else |
|||
break; |
|||
|
|||
sprintf( cmd, "$PART: \"%s\" %s \"%s\"", |
|||
CONV_TO_UTF8( module->m_Reference->m_Text ), |
|||
text_key, |
|||
CONV_TO_UTF8( text_mod->m_Text ) ); |
|||
break; |
|||
|
|||
default: |
|||
break; |
|||
} |
|||
|
|||
if( module ) |
|||
{ |
|||
SendCommand( MSG_TO_SCH, cmd ); |
|||
} |
|||
} |
|||
|
|||
/*****************************************************************/ |
|||
/* Cross probing function: handle communication to/from eeschema */ |
|||
/*****************************************************************/ |
|||
|
|||
/* cross-probing.cpp */ |
|||
|
|||
#include "fctsys.h"
|
|||
|
|||
#include "common.h"
|
|||
#include "pcbnew.h"
|
|||
#include "eda_dde.h"
|
|||
|
|||
#include "id.h"
|
|||
#include "collectors.h"
|
|||
|
|||
#include "protos.h"
|
|||
|
|||
|
|||
/*******************************************/ |
|||
void RemoteCommand( const char* cmdline ) |
|||
/*******************************************/ |
|||
|
|||
/** Read a remote command send by eeschema via a socket,
|
|||
* port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242) |
|||
* @param cmdline = received command from eeschema |
|||
* Commands are |
|||
* $PART: "reference" put cursor on component |
|||
* $PIN: "pin name" $PART: "reference" put cursor on the footprint pin |
|||
*/ |
|||
{ |
|||
char line[1024]; |
|||
wxString msg; |
|||
char* idcmd; |
|||
char* text; |
|||
MODULE* module = 0; |
|||
WinEDA_PcbFrame* frame = EDA_Appl->m_PcbFrame; |
|||
|
|||
strncpy( line, cmdline, sizeof(line) - 1 ); |
|||
|
|||
idcmd = strtok( line, " \n\r" ); |
|||
text = strtok( NULL, " \n\r" ); |
|||
if( (idcmd == NULL) || (text == NULL) ) |
|||
return; |
|||
|
|||
if( strcmp( idcmd, "$PART:" ) == 0 ) |
|||
{ |
|||
msg = CONV_FROM_UTF8( text ); |
|||
|
|||
module = ReturnModule( frame->m_Pcb, msg ); |
|||
|
|||
msg.Printf( _( "Locate module %s %s" ), msg.GetData(), |
|||
module ? wxT( "Ok" ) : wxT( "not found" ) ); |
|||
|
|||
frame->Affiche_Message( msg ); |
|||
if( module ) |
|||
{ |
|||
wxClientDC dc( frame->DrawPanel ); |
|||
|
|||
frame->DrawPanel->PrepareGraphicContext( &dc ); |
|||
frame->DrawPanel->CursorOff( &dc ); |
|||
frame->GetScreen()->m_Curseur = module->m_Pos; |
|||
frame->DrawPanel->CursorOn( &dc ); |
|||
} |
|||
} |
|||
|
|||
if( idcmd && strcmp( idcmd, "$PIN:" ) == 0 ) |
|||
{ |
|||
wxString pinName, modName; |
|||
D_PAD* pad = NULL; |
|||
int netcode = -1; |
|||
|
|||
pinName = CONV_FROM_UTF8( text ); |
|||
|
|||
text = strtok( NULL, " \n\r" ); |
|||
if( text && strcmp( text, "$PART:" ) == 0 ) |
|||
text = strtok( NULL, "\n\r" ); |
|||
|
|||
wxClientDC dc( frame->DrawPanel ); |
|||
|
|||
frame->DrawPanel->PrepareGraphicContext( &dc ); |
|||
|
|||
modName = CONV_FROM_UTF8( text ); |
|||
module = ReturnModule( frame->m_Pcb, modName ); |
|||
if( module ) |
|||
pad = ReturnPad( module, pinName ); |
|||
|
|||
if( pad ) |
|||
netcode = pad->m_NetCode; |
|||
|
|||
if( netcode > 0 ) /* hightlighted the net selected net*/ |
|||
{ |
|||
if( g_HightLigt_Status ) /* erase the old hightlighted net */ |
|||
frame->Hight_Light( &dc ); |
|||
|
|||
g_HightLigth_NetCode = netcode; |
|||
frame->Hight_Light( &dc ); /* hightlighted the new one */ |
|||
|
|||
frame->DrawPanel->CursorOff( &dc ); |
|||
frame->GetScreen()->m_Curseur = pad->m_Pos; |
|||
frame->DrawPanel->CursorOn( &dc ); |
|||
} |
|||
|
|||
if( module == NULL ) |
|||
msg.Printf( _( "module %s not found" ), text ); |
|||
else if( pad == NULL ) |
|||
msg.Printf( _( "Pin %s (module %s) not found" ), pinName.GetData(), modName.GetData() ); |
|||
else |
|||
msg.Printf( _( "Locate Pin %s (module %s)" ), pinName.GetData(), modName.GetData() ); |
|||
|
|||
frame->Affiche_Message( msg ); |
|||
} |
|||
|
|||
if( module ) // if found, center the module on screen.
|
|||
frame->Recadre_Trace( false ); |
|||
} |
|||
|
|||
|
|||
// see wxstruct.h
|
|||
/**************************************************************************/ |
|||
void WinEDA_PcbFrame::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync ) |
|||
/**************************************************************************/ |
|||
/** Send a remote command to eeschema via a socket,
|
|||
* @param objectToSync = item to be located on schematic (module, pin or text) |
|||
* Commands are |
|||
* $PART: "reference" put cursor on component anchor |
|||
* $PART: "reference" $PAD: "pad number" put cursor on the component pin |
|||
* $PART: "reference" $REF: "reference" put cursor on the component ref |
|||
* $PART: "reference" $VAL: "value" put cursor on the component value |
|||
*/ |
|||
{ |
|||
char cmd[1024]; |
|||
const char* text_key; |
|||
MODULE* module = NULL; |
|||
D_PAD* pad; |
|||
TEXTE_MODULE* text_mod; |
|||
wxString msg; |
|||
|
|||
if( objectToSync == NULL ) |
|||
return; |
|||
|
|||
switch( objectToSync->Type() ) |
|||
{ |
|||
case TYPEMODULE: |
|||
module = (MODULE*) objectToSync; |
|||
sprintf( cmd, "$PART: \"%s\"", |
|||
CONV_TO_UTF8( module->m_Reference->m_Text ) ); |
|||
break; |
|||
|
|||
case TYPEPAD: |
|||
module = (MODULE*) objectToSync->m_Parent; |
|||
pad = (D_PAD*) objectToSync; |
|||
msg = pad->ReturnStringPadName(); |
|||
sprintf( cmd, "$PART: \"%s\" $PAD: \"%s\"", |
|||
CONV_TO_UTF8( module->m_Reference->m_Text ), |
|||
CONV_TO_UTF8( msg ) ); |
|||
break; |
|||
|
|||
case TYPETEXTEMODULE: |
|||
#define REFERENCE 0
|
|||
#define VALUE 1
|
|||
module = (MODULE*) objectToSync->m_Parent; |
|||
text_mod = (TEXTE_MODULE*) objectToSync; |
|||
if( text_mod->m_Type == REFERENCE ) |
|||
text_key = "$REF:"; |
|||
else if( text_mod->m_Type == VALUE ) |
|||
text_key = "$VAL:"; |
|||
else |
|||
break; |
|||
|
|||
sprintf( cmd, "$PART: \"%s\" %s \"%s\"", |
|||
CONV_TO_UTF8( module->m_Reference->m_Text ), |
|||
text_key, |
|||
CONV_TO_UTF8( text_mod->m_Text ) ); |
|||
break; |
|||
|
|||
default: |
|||
break; |
|||
} |
|||
|
|||
if( module ) |
|||
{ |
|||
SendCommand( MSG_TO_SCH, cmd ); |
|||
} |
|||
} |
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue