Commit 51fc26e1 authored by dickelbeck's avatar dickelbeck

mouse synchronization from PCBNEW to EESCHEMA

parent b0b3a6d5
This diff is collapsed.
This diff is collapsed.
...@@ -20,10 +20,10 @@ ...@@ -20,10 +20,10 @@
#include "netlist.h" #include "netlist.h"
#include "worksheet.h" #include "worksheet.h"
#include "trigo.h" #include "trigo.h"
#include "protos.h" #include "protos.h"
#include "bitmaps.h" #include "bitmaps.h"
#include "eda_dde.h"
/* Routines locales */ /* Routines locales */
static void CreateScreens(void); static void CreateScreens(void);
...@@ -72,6 +72,13 @@ wxString FFileName; ...@@ -72,6 +72,13 @@ wxString FFileName;
SetTopWindow(SchematicFrame); SetTopWindow(SchematicFrame);
SchematicFrame->Show(TRUE); SchematicFrame->Show(TRUE);
if( CreateServer( SchematicFrame, KICAD_SCH_PORT_SERVICE_NUMBER ) )
{
// RemoteCommand is in controle.cpp and is called when PCBNEW
// sends EESCHEMA a command
SetupServerFunction( RemoteCommand );
}
SchematicFrame->Zoom_Automatique(TRUE); SchematicFrame->Zoom_Automatique(TRUE);
/* Load file specified in the command line. */ /* Load file specified in the command line. */
......
This diff is collapsed.
...@@ -456,4 +456,8 @@ void InstallFindFrame(WinEDA_SchematicFrame *parent, wxPoint &pos); ...@@ -456,4 +456,8 @@ void InstallFindFrame(WinEDA_SchematicFrame *parent, wxPoint &pos);
/***************/ /***************/
void DisplayOptionFrame(WinEDA_DrawFrame * parent, const wxPoint & framepos); void DisplayOptionFrame(WinEDA_DrawFrame * parent, const wxPoint & framepos);
/****************/
/* CONTROLE.CPP */
/****************/
void RemoteCommand( const char* cmdline );
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
BEGIN_EVENT_TABLE(WinEDA_SchematicFrame, wxFrame) BEGIN_EVENT_TABLE(WinEDA_SchematicFrame, wxFrame)
COMMON_EVENTS_DRAWFRAME COMMON_EVENTS_DRAWFRAME
EVT_SOCKET(ID_EDA_SOCKET_EVENT_SERV, WinEDA_DrawFrame::OnSockRequestServer)
EVT_SOCKET(ID_EDA_SOCKET_EVENT, WinEDA_DrawFrame::OnSockRequest)
EVT_CLOSE(WinEDA_SchematicFrame::OnCloseWindow) EVT_CLOSE(WinEDA_SchematicFrame::OnCloseWindow)
EVT_SIZE(WinEDA_SchematicFrame::OnSize) EVT_SIZE(WinEDA_SchematicFrame::OnSize)
......
/************************************************************/ /************************************************************/
/* appl_wxstruct.h: */ /* appl_wxstruct.h: */
/* descriptions des principales classes derivees utilisees: */ /* descriptions des principales classes derivees utilisees: */
/* Class "EDA_Appl: classe de l'application generale */ /* Class "EDA_Appl: classe de l'application generale */
/************************************************************/ /************************************************************/
/* Ce fichier doit etre inclus dans "wxstruct.h" /* Ce fichier doit etre inclus dans "wxstruct.h"
*/ */
#ifndef APPL_WXSTRUCT_H #ifndef APPL_WXSTRUCT_H
#define APPL_WXSTRUCT_H #define APPL_WXSTRUCT_H
...@@ -15,79 +15,77 @@ ...@@ -15,79 +15,77 @@
#endif #endif
/**********************************************/ /**********************************************/
/* Class representing the entire Application */ /* Class representing the entire Application */
/**********************************************/ /**********************************************/
eda_global WinEDA_App * EDA_Appl; /* application representant le programme */ eda_global WinEDA_App* EDA_Appl; /* application representant le programme */
class WinEDA_App: public wxApp class WinEDA_App : public wxApp
{ {
public: public:
wxString m_Project; wxString m_Project;
wxSingleInstanceChecker * m_Checker; wxSingleInstanceChecker* m_Checker;
WinEDA_MainFrame * m_MainFrame; WinEDA_MainFrame* m_MainFrame;
WinEDA_PcbFrame * m_PcbFrame; WinEDA_PcbFrame* m_PcbFrame;
WinEDA_ModuleEditFrame * m_ModuleEditFrame; WinEDA_ModuleEditFrame* m_ModuleEditFrame;
WinEDA_GerberFrame * m_GerberFrame; WinEDA_GerberFrame* m_GerberFrame;
WinEDA_SchematicFrame * SchematicFrame; // Edition des Schemas WinEDA_SchematicFrame* SchematicFrame; // Edition des Schemas
WinEDA_LibeditFrame * LibeditFrame; // Edition des composants WinEDA_LibeditFrame* LibeditFrame; // Edition des composants
WinEDA_ViewlibFrame * ViewlibFrame; // Visualisation des composants WinEDA_ViewlibFrame* ViewlibFrame; // Visualisation des composants
WinEDA_CvpcbFrame * m_CvpcbFrame; WinEDA_CvpcbFrame* m_CvpcbFrame;
wxPoint m_HelpPos; wxPoint m_HelpPos;
wxSize m_HelpSize; wxSize m_HelpSize;
wxHtmlHelpController * m_HtmlCtrl; wxHtmlHelpController* m_HtmlCtrl;
wxConfig * m_EDA_Config; // Config courante (tailles et positions fenetres ...*/ wxConfig* m_EDA_Config; // Config courante (tailles et positions fenetres ...*/
wxConfig * m_EDA_CommonConfig; // common setup (language ...) */ wxConfig* m_EDA_CommonConfig; // common setup (language ...) */
wxString m_HelpFileName; wxString m_HelpFileName;
wxString m_CurrentOptionFile; // dernier fichier .cnf utilis wxString m_CurrentOptionFile; // dernier fichier .cnf utilis
wxString m_CurrentOptionFileDateAndTime; wxString m_CurrentOptionFileDateAndTime;
wxString m_BinDir; /* Chemin ou reside l'executable wxString m_BinDir; /* Chemin ou reside l'executable
(utilis si KICAD non dfini)*/ * (utilis si KICAD non dfini)*/
wxArrayString m_LastProject; /* liste des derniers projets chargs */ wxArrayString m_LastProject; /* liste des derniers projets chargs */
unsigned int m_LastProjectMaxCount; /* Max histhory file length */ unsigned int m_LastProjectMaxCount; /* Max histhory file length */
wxString m_KicadEnv; /* Chemin de kicad dfini dans la variable wxString m_KicadEnv;/* Chemin de kicad dfini dans la variable
d'environnement KICAD, * d'environnement KICAD,
typiquement /usr/local/kicad ou c:\kicad */ * typiquement /usr/local/kicad ou c:\kicad */
bool m_Env_Defined; // TRUE si variable d'environnement KICAD definie bool m_Env_Defined; // TRUE si variable d'environnement KICAD definie
wxLocale * m_Locale; // Gestion de la localisation wxLocale* m_Locale; // Gestion de la localisation
int m_LanguageId; // indicateur de choix du langage ( 0 = defaut) int m_LanguageId; // indicateur de choix du langage ( 0 = defaut)
wxMenu * m_Language_Menu; // List menu for languages wxMenu* m_Language_Menu; // List menu for languages
wxString m_PdfBrowser; // Name of the selected browser, for browsing pdf datasheets wxString m_PdfBrowser; // Name of the selected browser, for browsing pdf datasheets
bool m_PdfBrowserIsDefault; // True if the pdf browser is the default (m_PdfBrowser not used) bool m_PdfBrowserIsDefault; // True if the pdf browser is the default (m_PdfBrowser not used)
public: public:
WinEDA_App(void); WinEDA_App( void );
~WinEDA_App(void); ~WinEDA_App( void );
bool OnInit(void); bool OnInit( void );
int OnRun(void); int OnRun( void );
bool SetBinDir(void); bool SetBinDir( void );
void InitEDA_Appl(const wxString & name); void InitEDA_Appl( const wxString& name );
bool SetLanguage(bool first_time = FALSE); bool SetLanguage( bool first_time = FALSE );
wxMenu * SetLanguageList(wxMenu * MasterMenu); wxMenu* SetLanguageList( wxMenu* MasterMenu );
void SetLanguageIdentifier(int menu_id); void SetLanguageIdentifier( int menu_id );
void InitOnLineHelp(void); void InitOnLineHelp( void );
// Sauvegarde de configurations et options: // Sauvegarde de configurations et options:
void GetSettings(void); void GetSettings( void );
void SaveSettings(void); void SaveSettings( void );
void SetLastProject(const wxString & FullFileName); void SetLastProject( const wxString& FullFileName );
void WriteProjectConfig(const wxString & local_config_filename, void WriteProjectConfig( const wxString& local_config_filename,
const wxString & GroupName, PARAM_CFG_BASE ** List); const wxString& GroupName, PARAM_CFG_BASE** List );
bool ReadProjectConfig(const wxString & local_config_filename, bool ReadProjectConfig( const wxString& local_config_filename,
const wxString & GroupName, PARAM_CFG_BASE ** List, const wxString& GroupName, PARAM_CFG_BASE** List,
bool Load_Only_if_New); bool Load_Only_if_New );
void ReadPdfBrowserInfos(void); void ReadPdfBrowserInfos( void );
void WritePdfBrowserInfos(void); void WritePdfBrowserInfos( void );
}; };
#endif /* APPL_WXSTRUCT_H */ #endif /* APPL_WXSTRUCT_H */
This diff is collapsed.
...@@ -11,17 +11,20 @@ ...@@ -11,17 +11,20 @@
#define WinEDA_Server wxSocketServer #define WinEDA_Server wxSocketServer
/********************/ // TCP/IP ports used by PCBNEW and EESCHEMA respectively.
/* autres fonctions */ #define KICAD_PCB_PORT_SERVICE_NUMBER 4242 ///< PCBNEW listens on this port for commands from EESCHEMA
/********************/ #define KICAD_SCH_PORT_SERVICE_NUMBER 4243 ///< EESCHEMA listens on this port for commands from PCBNEW
WinEDA_Server * CreateServer(wxWindow * window, int service);
bool SendCommand( int service, char * cmdline);
void SetupServerFunction(void (* remotefct)(char * remotecmd) );
#define MSG_TO_PCB KICAD_PCB_PORT_SERVICE_NUMBER
#define MSG_TO_SCH KICAD_SCH_PORT_SERVICE_NUMBER
/********************/
/* autres fonctions */
/********************/
WinEDA_Server * CreateServer( wxWindow * window, int port );
bool SendCommand( int port, const char* cmdline );
void SetupServerFunction( void (*remotefct) (const char* remotecmd) );
...@@ -700,6 +700,14 @@ public: ...@@ -700,6 +700,14 @@ public:
// divers // divers
void InstallFindFrame( const wxPoint& pos, wxDC* DC ); void InstallFindFrame( const wxPoint& pos, wxDC* DC );
/**
* Function SendMessageToEESCHEMA
* sends a message to the schematic editor so that it may move its cursor
* to a part with the same reference as the objectToSync
* @param objectToSync The object whose reference is used to syncronize eeschema.
*/
void SendMessageToEESCHEMA( EDA_BaseStruct* objectToSync );
/* Special micro_ondes */ /* Special micro_ondes */
void Edit_Gap( wxDC* DC, MODULE* Module ); void Edit_Gap( wxDC* DC, MODULE* Module );
MODULE* Create_MuWaveBasicShape( wxDC* DC, const wxString& name, int pad_count ); MODULE* Create_MuWaveBasicShape( wxDC* DC, const wxString& name, int pad_count );
...@@ -974,7 +982,17 @@ public: ...@@ -974,7 +982,17 @@ public:
bool LoadOneSheet( SCH_SCREEN* screen, const wxString& FullFileName ); bool LoadOneSheet( SCH_SCREEN* screen, const wxString& FullFileName );
// General search: // General search:
EDA_BaseStruct* FindSchematicItem( const wxString& pattern, int SearchType ); /**
* Function FindSchematicItem
* finds a string in the schematic.
* @param pattern The text to search for, either in value, reference or elsewhere.
* @param SearchType: 0 => Search is made in current sheet
* 1 => the whole hierarchy
* 2 => or for the next item
* @param mouseWarp If true, then move the mouse cursor to the item.
*/
EDA_BaseStruct* FindSchematicItem( const wxString& pattern, int SearchType, bool mouseWarp=true );
EDA_BaseStruct* FindMarker( int SearchType ); EDA_BaseStruct* FindMarker( int SearchType );
private: private:
......
...@@ -2,6 +2,11 @@ ...@@ -2,6 +2,11 @@
/* class_text_module.h : texts module description */ /* class_text_module.h : texts module description */
/***************************************************/ /***************************************************/
#ifndef TEXT_MODULE_H
#define TEXT_MODULE_H
/* Description des Textes sur Modules : */ /* Description des Textes sur Modules : */
#define TEXT_is_REFERENCE 0 #define TEXT_is_REFERENCE 0
#define TEXT_is_VALUE 1 #define TEXT_is_VALUE 1
...@@ -80,3 +85,6 @@ public: ...@@ -80,3 +85,6 @@ public:
virtual void Show( int nestLevel, std::ostream& os ); virtual void Show( int nestLevel, std::ostream& os );
#endif #endif
}; };
#endif // TEXT_MODULE_H
...@@ -22,53 +22,57 @@ ...@@ -22,53 +22,57 @@
/* Variables Locales */ /* Variables Locales */
/**********************************/ /**********************************/
void RemoteCommand( char* cmdline ) void RemoteCommand( const char* cmdline )
/**********************************/ /**********************************/
/* Read a remote command send by eeschema via a socket, /* Read a remote command send by eeschema via a socket,
* port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242) * port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242)
*/ */
{ {
char Line[1024]; char line[1024];
wxString msg; wxString msg;
char* idcmd, * text; char* idcmd, * text;
WinEDA_PcbFrame* frame = EDA_Appl->m_PcbFrame; WinEDA_PcbFrame* frame = EDA_Appl->m_PcbFrame;
strncpy( Line, cmdline, sizeof(Line) - 1 ); strncpy( line, cmdline, sizeof(line) - 1 );
msg = CONV_FROM_UTF8( Line ); msg = CONV_FROM_UTF8( line );
idcmd = strtok( Line, " \n\r" ); idcmd = strtok( line, " \n\r" );
text = strtok( NULL, " \n\r" ); text = strtok( NULL, " \n\r" );
if( (idcmd == NULL) || (text == NULL) ) if( (idcmd == NULL) || (text == NULL) )
return; return;
if( strcmp( idcmd, "$PART:" ) == 0 ) if( strcmp( idcmd, "$PART:" ) == 0 )
{ {
MODULE* Module;
msg = CONV_FROM_UTF8( text ); msg = CONV_FROM_UTF8( text );
Module = ReturnModule( frame->m_Pcb, msg );
MODULE* module = ReturnModule( frame->m_Pcb, msg );
msg.Printf( _( "Locate module %s %s" ), msg.GetData(), msg.Printf( _( "Locate module %s %s" ), msg.GetData(),
Module ? wxT( "Ok" ) : wxT( "not found" ) ); module ? wxT( "Ok" ) : wxT( "not found" ) );
frame->Affiche_Message( msg ); frame->Affiche_Message( msg );
if( Module ) if( module )
{ {
wxClientDC dc( frame->DrawPanel ); wxClientDC dc( frame->DrawPanel );
frame->DrawPanel->PrepareGraphicContext( &dc ); frame->DrawPanel->PrepareGraphicContext( &dc );
frame->DrawPanel->CursorOff( &dc ); frame->DrawPanel->CursorOff( &dc );
frame->GetScreen()->m_Curseur = Module->m_Pos; frame->GetScreen()->m_Curseur = module->m_Pos;
frame->DrawPanel->CursorOn( &dc ); frame->DrawPanel->CursorOn( &dc );
} }
} }
if( idcmd && strcmp( idcmd, "$PIN:" ) == 0 ) if( idcmd && strcmp( idcmd, "$PIN:" ) == 0 )
{ {
wxString PinName, ModName; wxString pinName, modName;
MODULE* Module; MODULE* module;
D_PAD* Pad = NULL; D_PAD* pad = NULL;
int netcode = -1; int netcode = -1;
PinName = CONV_FROM_UTF8( text );
text = strtok( NULL, " \n\r" ); pinName = CONV_FROM_UTF8( text );
text = strtok( NULL, " \n\r" );
if( text && strcmp( text, "$PART:" ) == 0 ) if( text && strcmp( text, "$PART:" ) == 0 )
text = strtok( NULL, "\n\r" ); text = strtok( NULL, "\n\r" );
...@@ -76,30 +80,34 @@ void RemoteCommand( char* cmdline ) ...@@ -76,30 +80,34 @@ void RemoteCommand( char* cmdline )
frame->DrawPanel->PrepareGraphicContext( &dc ); frame->DrawPanel->PrepareGraphicContext( &dc );
ModName = CONV_FROM_UTF8( text ); modName = CONV_FROM_UTF8( text );
Module = ReturnModule( frame->m_Pcb, ModName ); module = ReturnModule( frame->m_Pcb, modName );
if( Module ) if( module )
Pad = ReturnPad( Module, PinName ); pad = ReturnPad( module, pinName );
if( Pad )
netcode = Pad->m_NetCode; if( pad )
netcode = pad->m_NetCode;
if( netcode > 0 ) if( netcode > 0 )
{ {
/* effacement surbrillance ancienne */ /* effacement surbrillance ancienne */
if( g_HightLigt_Status ) if( g_HightLigt_Status )
frame->Hight_Light( &dc ); frame->Hight_Light( &dc );
g_HightLigth_NetCode = netcode; g_HightLigth_NetCode = netcode;
frame->Hight_Light( &dc ); frame->Hight_Light( &dc );
frame->DrawPanel->CursorOff( &dc ); frame->DrawPanel->CursorOff( &dc );
frame->GetScreen()->m_Curseur = Pad->m_Pos; frame->GetScreen()->m_Curseur = pad->m_Pos;
frame->DrawPanel->CursorOn( &dc ); frame->DrawPanel->CursorOn( &dc );
} }
if( Module == NULL ) if( module == NULL )
msg.Printf( _( "module %s not found" ), text ); msg.Printf( _( "module %s not found" ), text );
else if( Pad == NULL ) else if( pad == NULL )
msg.Printf( _( "Pin %s (module %s) not found" ), PinName.GetData(), ModName.GetData() ); msg.Printf( _( "Pin %s (module %s) not found" ), pinName.GetData(), modName.GetData() );
else else
msg.Printf( _( "Locate Pin %s (module %s)" ), PinName.GetData(), ModName.GetData() ); msg.Printf( _( "Locate Pin %s (module %s)" ), pinName.GetData(), modName.GetData() );
frame->Affiche_Message( msg ); frame->Affiche_Message( msg );
} }
} }
......
...@@ -11,8 +11,9 @@ ...@@ -11,8 +11,9 @@
#include "autorout.h" #include "autorout.h"
#include "id.h" #include "id.h"
#include "protos.h" #include "protos.h"
#include "eda_dde.h"
#define CURRENT_ITEM (GetScreen()->m_CurrentItem) #define CURRENT_ITEM (GetScreen()->m_CurrentItem)
...@@ -94,6 +95,8 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) ...@@ -94,6 +95,8 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
else else
{ {
DrawStruct = PcbGeneralLocateAndDisplay(); DrawStruct = PcbGeneralLocateAndDisplay();
if( DrawStruct )
SendMessageToEESCHEMA( DrawStruct );
} }
} }
...@@ -128,6 +131,9 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) ...@@ -128,6 +131,9 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
DrawStruct = m_Pcb->FindPadOrModule( GetScreen()->RefPos(true), DrawStruct = m_Pcb->FindPadOrModule( GetScreen()->RefPos(true),
GetScreen()->m_Active_Layer ); GetScreen()->m_Active_Layer );
Show_1_Ratsnest( DrawStruct, DC ); Show_1_Ratsnest( DrawStruct, DC );
if( DrawStruct )
SendMessageToEESCHEMA( DrawStruct );
break; break;
case ID_PCB_MIRE_BUTT: case ID_PCB_MIRE_BUTT:
...@@ -311,6 +317,27 @@ out: ...@@ -311,6 +317,27 @@ out:
} }
// see wxstruct.h
void WinEDA_PcbFrame::SendMessageToEESCHEMA( EDA_BaseStruct* objectToSync )
{
char cmd[1024];
MODULE* module = NULL;
if( objectToSync->m_StructType == TYPEMODULE )
module = (MODULE*) objectToSync;
else if( objectToSync->m_StructType == TYPEPAD )
module = (MODULE*)((D_PAD*)objectToSync)->m_Parent;
// ask only for the reference for now, maybe pins later.
if( module )
{
sprintf( cmd, "$PART: %s", CONV_TO_UTF8(module->m_Reference->m_Text) );
SendCommand( MSG_TO_SCH, cmd );
}
}
/*********************************************************************/ /*********************************************************************/
void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
/*********************************************************************/ /*********************************************************************/
......
...@@ -235,7 +235,9 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo ...@@ -235,7 +235,9 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
g_SaveTime = time( NULL ); g_SaveTime = time( NULL );
#if defined(DEBUG) #if 0 && defined(DEBUG)
// note this seems to freeze up pcbnew when run under the kicad project
// manager. runs fine from command prompt.
// output the board object tree to stdout: // output the board object tree to stdout:
m_Pcb->Show( 0, std::cout ); m_Pcb->Show( 0, std::cout );
#endif #endif
......
...@@ -394,7 +394,7 @@ TRACK * CreateLockPoint(int *pX, int *pY, TRACK * ptsegm, TRACK * refsegm); ...@@ -394,7 +394,7 @@ TRACK * CreateLockPoint(int *pX, int *pY, TRACK * ptsegm, TRACK * refsegm);
/****************/ /****************/
/* CONTROLE.CPP */ /* CONTROLE.CPP */
/****************/ /****************/
void RemoteCommand(char * cmdline); void RemoteCommand( const char* cmdline );
/*************/ /*************/
/* STRUCT.CPP */ /* STRUCT.CPP */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment