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 @@
#include "netlist.h"
#include "worksheet.h"
#include "trigo.h"
#include "protos.h"
#include "bitmaps.h"
#include "eda_dde.h"
/* Routines locales */
static void CreateScreens(void);
......@@ -72,6 +72,13 @@ wxString FFileName;
SetTopWindow(SchematicFrame);
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);
/* Load file specified in the command line. */
......
This diff is collapsed.
......@@ -456,4 +456,8 @@ void InstallFindFrame(WinEDA_SchematicFrame *parent, wxPoint &pos);
/***************/
void DisplayOptionFrame(WinEDA_DrawFrame * parent, const wxPoint & framepos);
/****************/
/* CONTROLE.CPP */
/****************/
void RemoteCommand( const char* cmdline );
......@@ -26,6 +26,9 @@
BEGIN_EVENT_TABLE(WinEDA_SchematicFrame, wxFrame)
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_SIZE(WinEDA_SchematicFrame::OnSize)
......
/************************************************************/
/* appl_wxstruct.h: */
/* descriptions des principales classes derivees utilisees: */
/* Class "EDA_Appl: classe de l'application generale */
/************************************************************/
/************************************************************/
/* appl_wxstruct.h: */
/* descriptions des principales classes derivees utilisees: */
/* Class "EDA_Appl: classe de l'application generale */
/************************************************************/
/* Ce fichier doit etre inclus dans "wxstruct.h"
*/
*/
#ifndef APPL_WXSTRUCT_H
#define APPL_WXSTRUCT_H
......@@ -15,79 +15,77 @@
#endif
/**********************************************/
/* Class representing the entire Application */
/**********************************************/
eda_global WinEDA_App * EDA_Appl; /* application representant le programme */
/**********************************************/
/* Class representing the entire Application */
/**********************************************/
eda_global WinEDA_App* EDA_Appl; /* application representant le programme */
class WinEDA_App: public wxApp
class WinEDA_App : public wxApp
{
public:
wxString m_Project;
wxSingleInstanceChecker * m_Checker;
WinEDA_MainFrame * m_MainFrame;
WinEDA_PcbFrame * m_PcbFrame;
WinEDA_ModuleEditFrame * m_ModuleEditFrame;
WinEDA_GerberFrame * m_GerberFrame;
WinEDA_SchematicFrame * SchematicFrame; // Edition des Schemas
WinEDA_LibeditFrame * LibeditFrame; // Edition des composants
WinEDA_ViewlibFrame * ViewlibFrame; // Visualisation des composants
WinEDA_CvpcbFrame * m_CvpcbFrame;
wxPoint m_HelpPos;
wxSize m_HelpSize;
wxHtmlHelpController * m_HtmlCtrl;
wxConfig * m_EDA_Config; // Config courante (tailles et positions fenetres ...*/
wxConfig * m_EDA_CommonConfig; // common setup (language ...) */
wxString m_HelpFileName;
wxString m_CurrentOptionFile; // dernier fichier .cnf utilis
wxString m_CurrentOptionFileDateAndTime;
wxString m_BinDir; /* Chemin ou reside l'executable
(utilis si KICAD non dfini)*/
wxArrayString m_LastProject; /* liste des derniers projets chargs */
unsigned int m_LastProjectMaxCount; /* Max histhory file length */
wxString m_KicadEnv; /* Chemin de kicad dfini dans la variable
d'environnement KICAD,
typiquement /usr/local/kicad ou c:\kicad */
bool m_Env_Defined; // TRUE si variable d'environnement KICAD definie
wxLocale * m_Locale; // Gestion de la localisation
int m_LanguageId; // indicateur de choix du langage ( 0 = defaut)
wxMenu * m_Language_Menu; // List menu for languages
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)
wxString m_Project;
wxSingleInstanceChecker* m_Checker;
WinEDA_MainFrame* m_MainFrame;
WinEDA_PcbFrame* m_PcbFrame;
WinEDA_ModuleEditFrame* m_ModuleEditFrame;
WinEDA_GerberFrame* m_GerberFrame;
WinEDA_SchematicFrame* SchematicFrame; // Edition des Schemas
WinEDA_LibeditFrame* LibeditFrame; // Edition des composants
WinEDA_ViewlibFrame* ViewlibFrame; // Visualisation des composants
WinEDA_CvpcbFrame* m_CvpcbFrame;
wxPoint m_HelpPos;
wxSize m_HelpSize;
wxHtmlHelpController* m_HtmlCtrl;
wxConfig* m_EDA_Config; // Config courante (tailles et positions fenetres ...*/
wxConfig* m_EDA_CommonConfig; // common setup (language ...) */
wxString m_HelpFileName;
wxString m_CurrentOptionFile; // dernier fichier .cnf utilis
wxString m_CurrentOptionFileDateAndTime;
wxString m_BinDir; /* Chemin ou reside l'executable
* (utilis si KICAD non dfini)*/
wxArrayString m_LastProject; /* liste des derniers projets chargs */
unsigned int m_LastProjectMaxCount; /* Max histhory file length */
wxString m_KicadEnv;/* Chemin de kicad dfini dans la variable
* d'environnement KICAD,
* typiquement /usr/local/kicad ou c:\kicad */
bool m_Env_Defined; // TRUE si variable d'environnement KICAD definie
wxLocale* m_Locale; // Gestion de la localisation
int m_LanguageId; // indicateur de choix du langage ( 0 = defaut)
wxMenu* m_Language_Menu; // List menu for languages
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)
public:
WinEDA_App(void);
~WinEDA_App(void);
bool OnInit(void);
int OnRun(void);
bool SetBinDir(void);
void InitEDA_Appl(const wxString & name);
bool SetLanguage(bool first_time = FALSE);
wxMenu * SetLanguageList(wxMenu * MasterMenu);
void SetLanguageIdentifier(int menu_id);
void InitOnLineHelp(void);
// Sauvegarde de configurations et options:
void GetSettings(void);
void SaveSettings(void);
void SetLastProject(const wxString & FullFileName);
void WriteProjectConfig(const wxString & local_config_filename,
const wxString & GroupName, PARAM_CFG_BASE ** List);
bool ReadProjectConfig(const wxString & local_config_filename,
const wxString & GroupName, PARAM_CFG_BASE ** List,
bool Load_Only_if_New);
void ReadPdfBrowserInfos(void);
void WritePdfBrowserInfos(void);
WinEDA_App( void );
~WinEDA_App( void );
bool OnInit( void );
int OnRun( void );
bool SetBinDir( void );
void InitEDA_Appl( const wxString& name );
bool SetLanguage( bool first_time = FALSE );
wxMenu* SetLanguageList( wxMenu* MasterMenu );
void SetLanguageIdentifier( int menu_id );
void InitOnLineHelp( void );
// Sauvegarde de configurations et options:
void GetSettings( void );
void SaveSettings( void );
void SetLastProject( const wxString& FullFileName );
void WriteProjectConfig( const wxString& local_config_filename,
const wxString& GroupName, PARAM_CFG_BASE** List );
bool ReadProjectConfig( const wxString& local_config_filename,
const wxString& GroupName, PARAM_CFG_BASE** List,
bool Load_Only_if_New );
void ReadPdfBrowserInfos( void );
void WritePdfBrowserInfos( void );
};
#endif /* APPL_WXSTRUCT_H */
This diff is collapsed.
......@@ -11,17 +11,20 @@
#define WinEDA_Server wxSocketServer
/********************/
/* autres fonctions */
/********************/
WinEDA_Server * CreateServer(wxWindow * window, int service);
bool SendCommand( int service, char * cmdline);
void SetupServerFunction(void (* remotefct)(char * remotecmd) );
// TCP/IP ports used by PCBNEW and EESCHEMA respectively.
#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
#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:
// divers
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 */
void Edit_Gap( wxDC* DC, MODULE* Module );
MODULE* Create_MuWaveBasicShape( wxDC* DC, const wxString& name, int pad_count );
......@@ -974,7 +982,17 @@ public:
bool LoadOneSheet( SCH_SCREEN* screen, const wxString& FullFileName );
// 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 );
private:
......
......@@ -2,6 +2,11 @@
/* class_text_module.h : texts module description */
/***************************************************/
#ifndef TEXT_MODULE_H
#define TEXT_MODULE_H
/* Description des Textes sur Modules : */
#define TEXT_is_REFERENCE 0
#define TEXT_is_VALUE 1
......@@ -80,3 +85,6 @@ public:
virtual void Show( int nestLevel, std::ostream& os );
#endif
};
#endif // TEXT_MODULE_H
......@@ -22,53 +22,57 @@
/* Variables Locales */
/**********************************/
void RemoteCommand( char* cmdline )
void RemoteCommand( const char* cmdline )
/**********************************/
/* Read a remote command send by eeschema via a socket,
* port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242)
*/
{
char Line[1024];
char line[1024];
wxString msg;
char* idcmd, * text;
WinEDA_PcbFrame* frame = EDA_Appl->m_PcbFrame;
strncpy( Line, cmdline, sizeof(Line) - 1 );
msg = CONV_FROM_UTF8( Line );
strncpy( line, cmdline, sizeof(line) - 1 );
msg = CONV_FROM_UTF8( line );
idcmd = strtok( Line, " \n\r" );
idcmd = strtok( line, " \n\r" );
text = strtok( NULL, " \n\r" );
if( (idcmd == NULL) || (text == NULL) )
return;
if( strcmp( idcmd, "$PART:" ) == 0 )
{
MODULE* Module;
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(),
Module ? wxT( "Ok" ) : wxT( "not found" ) );
module ? wxT( "Ok" ) : wxT( "not found" ) );
frame->Affiche_Message( msg );
if( Module )
if( module )
{
wxClientDC dc( frame->DrawPanel );
frame->DrawPanel->PrepareGraphicContext( &dc );
frame->DrawPanel->CursorOff( &dc );
frame->GetScreen()->m_Curseur = Module->m_Pos;
frame->GetScreen()->m_Curseur = module->m_Pos;
frame->DrawPanel->CursorOn( &dc );
}
}
if( idcmd && strcmp( idcmd, "$PIN:" ) == 0 )
{
wxString PinName, ModName;
MODULE* Module;
D_PAD* Pad = NULL;
wxString pinName, modName;
MODULE* module;
D_PAD* pad = NULL;
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 )
text = strtok( NULL, "\n\r" );
......@@ -76,30 +80,34 @@ void RemoteCommand( char* cmdline )
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;
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 )
{
/* effacement surbrillance ancienne */
if( g_HightLigt_Status )
frame->Hight_Light( &dc );
g_HightLigth_NetCode = netcode;
frame->Hight_Light( &dc );
frame->DrawPanel->CursorOff( &dc );
frame->GetScreen()->m_Curseur = Pad->m_Pos;
frame->GetScreen()->m_Curseur = pad->m_Pos;
frame->DrawPanel->CursorOn( &dc );
}
if( Module == NULL )
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 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() );
msg.Printf( _( "Locate Pin %s (module %s)" ), pinName.GetData(), modName.GetData() );
frame->Affiche_Message( msg );
}
}
......
......@@ -11,8 +11,9 @@
#include "autorout.h"
#include "id.h"
#include "protos.h"
#include "eda_dde.h"
#define CURRENT_ITEM (GetScreen()->m_CurrentItem)
......@@ -94,6 +95,8 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
else
{
DrawStruct = PcbGeneralLocateAndDisplay();
if( DrawStruct )
SendMessageToEESCHEMA( DrawStruct );
}
}
......@@ -128,6 +131,9 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
DrawStruct = m_Pcb->FindPadOrModule( GetScreen()->RefPos(true),
GetScreen()->m_Active_Layer );
Show_1_Ratsnest( DrawStruct, DC );
if( DrawStruct )
SendMessageToEESCHEMA( DrawStruct );
break;
case ID_PCB_MIRE_BUTT:
......@@ -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 )
/*********************************************************************/
......
......@@ -235,7 +235,9 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
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:
m_Pcb->Show( 0, std::cout );
#endif
......
......@@ -394,7 +394,7 @@ TRACK * CreateLockPoint(int *pX, int *pY, TRACK * ptsegm, TRACK * refsegm);
/****************/
/* CONTROLE.CPP */
/****************/
void RemoteCommand(char * cmdline);
void RemoteCommand( const char* cmdline );
/*************/
/* 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