Browse Source

beautify

pull/1/head
dickelbeck 18 years ago
parent
commit
0f0ced3700
  1. 10
      eeschema/block.cpp
  2. 19
      eeschema/cmpclass.cpp
  3. 512
      eeschema/delete.cpp
  4. 40
      eeschema/erc.cpp
  5. 6
      eeschema/program.h
  6. 3
      eeschema/schedit.cpp

10
eeschema/block.cpp

@ -932,7 +932,8 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
if( DrawStruct->Type() == DRAW_SHEETLABEL_STRUCT_TYPE ) if( DrawStruct->Type() == DRAW_SHEETLABEL_STRUCT_TYPE )
{ /* Cette stucture est rattachee a une feuille, et n'est pas
{
/* Cette stucture est rattachee a une feuille, et n'est pas
* accessible par la liste globale directement */ * accessible par la liste globale directement */
frame->SaveCopyInUndoList( ( (DrawSheetLabelStruct*) DrawStruct )->m_Parent, IS_CHANGED ); frame->SaveCopyInUndoList( ( (DrawSheetLabelStruct*) DrawStruct )->m_Parent, IS_CHANGED );
frame->DeleteSheetLabel( DC, (DrawSheetLabelStruct*) DrawStruct ); frame->DeleteSheetLabel( DC, (DrawSheetLabelStruct*) DrawStruct );
@ -961,7 +962,14 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
{ {
screen->RemoveFromDrawList( DrawStruct ); screen->RemoveFromDrawList( DrawStruct );
if( DrawStruct->Type() == DRAW_SEGMENT_STRUCT_TYPE )
{
D( printf("PostDirtyRect()\n"); )
panel->PostDirtyRect( ((EDA_DrawLineStruct*)DrawStruct)->GetBoundingBox() );
}
else
RedrawOneStruct( panel, DC, DrawStruct, g_XorMode ); RedrawOneStruct( panel, DC, DrawStruct, g_XorMode );
/* Unlink the structure */ /* Unlink the structure */
DrawStruct->Pnext = DrawStruct->Pback = NULL; // Only one struct -> no link DrawStruct->Pnext = DrawStruct->Pback = NULL; // Only one struct -> no link
if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE ) if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE )

19
eeschema/cmpclass.cpp

@ -240,6 +240,25 @@ void EDA_DrawLineStruct::Show( int nestLevel, std::ostream& os )
#endif #endif
EDA_Rect EDA_DrawLineStruct::GetBoundingBox() const
{
int width = 25;
int xmin = MIN( m_Start.x, m_End.x ) - width;
int ymin = MIN( m_Start.y, m_End.y ) - width;
int xmax = MAX( m_Start.x, m_End.x ) + width;
int ymax = MAX( m_Start.y, m_End.y ) + width;
// return a rectangle which is [pos,dim) in nature. therefore the +1
EDA_Rect ret( wxPoint( xmin, ymin ), wxSize( xmax-xmin+1, ymax-ymin+1 ) );
return ret;
}
/****************************/ /****************************/
/* Class DrawPolylineStruct */ /* Class DrawPolylineStruct */
/****************************/ /****************************/

512
eeschema/delete.cpp

@ -1,6 +1,6 @@
/************************************/
/* Delete.cpp: routines d'effacement */
/************************************/
/************************************/
/* Delete.cpp: routines d'effacement */
/************************************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
@ -17,84 +17,96 @@
/********************************************************************************/ /********************************************************************************/
static int CountConnectedItems(WinEDA_SchematicFrame * frame,
EDA_BaseStruct * ListStruct, wxPoint pos, bool TstJunction)
static int CountConnectedItems( WinEDA_SchematicFrame* frame,
EDA_BaseStruct* ListStruct, wxPoint pos, bool TstJunction )
/********************************************************************************/ /********************************************************************************/
/* Count number of items connected to point pos :
pins, end wire or bus, and junctions if TstJunction == TRUE
Return this count
Used by WinEDA_SchematicFrame::DeleteConnection()
*/
/* Count number of items connected to point pos :
* pins, end wire or bus, and junctions if TstJunction == TRUE
* Return this count
*
* Used by WinEDA_SchematicFrame::DeleteConnection()
*/
{ {
EDA_BaseStruct * Struct;
int count = 0;
EDA_BaseStruct* Struct;
int count = 0;
if ( frame->LocatePinEnd(ListStruct, pos) ) count++;
if( frame->LocatePinEnd( ListStruct, pos ) )
count++;
for ( Struct = ListStruct; Struct != NULL; Struct = Struct->Pnext)
for( Struct = ListStruct; Struct != NULL; Struct = Struct->Pnext )
{ {
if ( Struct->m_Flags & STRUCT_DELETED ) continue;
if ( Struct->m_Flags & SKIP_STRUCT ) continue;
if( Struct->m_Flags & STRUCT_DELETED )
continue;
if( Struct->m_Flags & SKIP_STRUCT )
continue;
if ( TstJunction && (Struct->Type() == DRAW_JUNCTION_STRUCT_TYPE) )
if( TstJunction && (Struct->Type() == DRAW_JUNCTION_STRUCT_TYPE) )
{ {
#define JUNCTION ((DrawJunctionStruct*)Struct)
if ( (JUNCTION->m_Pos.x == pos.x) && (JUNCTION->m_Pos.y == pos.y) )
#define JUNCTION ( (DrawJunctionStruct*) Struct )
if( (JUNCTION->m_Pos.x == pos.x) && (JUNCTION->m_Pos.y == pos.y) )
count++; count++;
#undef JUNCTION #undef JUNCTION
} }
if ( Struct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
#define SEGM ((EDA_DrawLineStruct*)Struct)
if ( SEGM->IsOneEndPointAt(pos) ) count++;
if( Struct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
continue;
#define SEGM ( (EDA_DrawLineStruct*) Struct )
if( SEGM->IsOneEndPointAt( pos ) )
count++;
#undef SEGM #undef SEGM
} }
return count; return count;
} }
/************************************************************************************/ /************************************************************************************/
static bool MarkConnected(WinEDA_SchematicFrame * frame, EDA_BaseStruct * ListStruct,
EDA_DrawLineStruct* segment)
static bool MarkConnected( WinEDA_SchematicFrame* frame, EDA_BaseStruct* ListStruct,
EDA_DrawLineStruct* segment )
/************************************************************************************/ /************************************************************************************/
/* Mark to "CANDIDATE" all wires or junction connected to "segment" in list "ListStruct"
Search wire stop at an any pin
Used by WinEDA_SchematicFrame::DeleteConnection()
*/
/* Mark to "CANDIDATE" all wires or junction connected to "segment" in list "ListStruct"
* Search wire stop at an any pin
*
* Used by WinEDA_SchematicFrame::DeleteConnection()
*/
{ {
EDA_BaseStruct * Struct;
EDA_BaseStruct* Struct;
for ( Struct = ListStruct; Struct != NULL; Struct = Struct->Pnext)
for( Struct = ListStruct; Struct != NULL; Struct = Struct->Pnext )
{ {
if ( Struct->m_Flags ) continue;
if ( Struct->Type() == DRAW_JUNCTION_STRUCT_TYPE )
if( Struct->m_Flags )
continue;
if( Struct->Type() == DRAW_JUNCTION_STRUCT_TYPE )
{ {
#define JUNCTION ((DrawJunctionStruct*)Struct)
if ( segment->IsOneEndPointAt(JUNCTION->m_Pos) ) Struct->m_Flags |= CANDIDATE;
#define JUNCTION ( (DrawJunctionStruct*) Struct )
if( segment->IsOneEndPointAt( JUNCTION->m_Pos ) )
Struct->m_Flags |= CANDIDATE;
continue; continue;
#undef JUNCTION #undef JUNCTION
} }
if ( Struct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
if( Struct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
continue;
#define SEGM ((EDA_DrawLineStruct*)Struct)
if ( segment->IsOneEndPointAt(SEGM->m_Start) )
#define SEGM ( (EDA_DrawLineStruct*) Struct )
if( segment->IsOneEndPointAt( SEGM->m_Start ) )
{ {
if ( ! frame->LocatePinEnd(ListStruct,SEGM->m_Start) )
if( !frame->LocatePinEnd( ListStruct, SEGM->m_Start ) )
{ {
Struct->m_Flags |= CANDIDATE; Struct->m_Flags |= CANDIDATE;
MarkConnected(frame, ListStruct, SEGM);
MarkConnected( frame, ListStruct, SEGM );
} }
} }
if ( segment->IsOneEndPointAt(SEGM->m_End) )
if( segment->IsOneEndPointAt( SEGM->m_End ) )
{ {
if ( ! frame->LocatePinEnd(ListStruct,SEGM->m_End) )
if( !frame->LocatePinEnd( ListStruct, SEGM->m_End ) )
{ {
Struct->m_Flags |= CANDIDATE; Struct->m_Flags |= CANDIDATE;
MarkConnected(frame, ListStruct, SEGM);
MarkConnected( frame, ListStruct, SEGM );
} }
} }
#undef SEGM #undef SEGM
@ -103,96 +115,129 @@ EDA_BaseStruct * Struct;
return TRUE; return TRUE;
} }
/********************************************************************************/ /********************************************************************************/
void WinEDA_SchematicFrame::DeleteConnection(wxDC * DC, bool DeleteFullConnection)
void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnection )
/********************************************************************************/ /********************************************************************************/
/* Delete a connection, i.e wires or bus connected /* Delete a connection, i.e wires or bus connected
stop on a node (more than 2 wires (bus) connected)
*/
* stop on a node (more than 2 wires (bus) connected)
*/
{ {
wxPoint refpos = GetScreen()->m_Curseur;
EDA_BaseStruct * DelStruct ;
DrawPickedStruct * PickedItem, *PickedList = NULL;
wxPoint refpos = GetScreen()->m_Curseur;
EDA_BaseStruct* DelStruct;
DrawPickedStruct* PickedItem, * PickedList = NULL;
/* Clear .m_Flags member for all items */ /* Clear .m_Flags member for all items */
for(DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct=DelStruct->Pnext)
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
DelStruct->m_Flags = 0; DelStruct->m_Flags = 0;
BreakSegmentOnJunction( (SCH_SCREEN*)GetScreen() );
BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() );
DelStruct = GetScreen()->EEDrawList; DelStruct = GetScreen()->EEDrawList;
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list /* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
of items to delete
* of items to delete
*/ */
SCH_SCREEN* screen = (SCH_SCREEN*)GetScreen();
SCH_SCREEN* screen = (SCH_SCREEN*) GetScreen();
EDA_BaseStruct* savedEEDrawList = screen->EEDrawList; EDA_BaseStruct* savedEEDrawList = screen->EEDrawList;
while ( DelStruct &&
(DelStruct = PickStruct(screen->m_Curseur,
screen, JUNCTIONITEM|WIREITEM|BUSITEM)) != NULL )
while( DelStruct
&& ( DelStruct = PickStruct( screen->m_Curseur,
screen, JUNCTIONITEM | WIREITEM | BUSITEM ) ) != NULL )
{ {
DelStruct->m_Flags = SELECTEDNODE | STRUCT_DELETED;
DelStruct->m_Flags = SELECTEDNODE|STRUCT_DELETED;
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
PickedItem = new DrawPickedStruct(DelStruct);
PickedItem = new DrawPickedStruct( DelStruct );
PickedItem->Pnext = PickedList; PickedItem->Pnext = PickedList;
PickedList = PickedItem; PickedList = PickedItem;
DelStruct=DelStruct->Pnext;
DelStruct = DelStruct->Pnext;
screen->EEDrawList = DelStruct; screen->EEDrawList = DelStruct;
} }
GetScreen()->EEDrawList = savedEEDrawList; GetScreen()->EEDrawList = savedEEDrawList;
/* Mark all wires, junctions, .. connected to one of the item to delete /* Mark all wires, junctions, .. connected to one of the item to delete
*/ */
if ( DeleteFullConnection )
if( DeleteFullConnection )
{ {
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
{ {
if ( ! (DelStruct->m_Flags & SELECTEDNODE) ) continue;
#define SEGM ((EDA_DrawLineStruct*)DelStruct)
if ( DelStruct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
MarkConnected(this, GetScreen()->EEDrawList, SEGM);
if( !(DelStruct->m_Flags & SELECTEDNODE) )
continue;
#define SEGM ( (EDA_DrawLineStruct*) DelStruct )
if( DelStruct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
continue;
MarkConnected( this, GetScreen()->EEDrawList, SEGM );
#undef SEGM #undef SEGM
} }
// Search all removable wires (i.e wire with one new dangling end ) // Search all removable wires (i.e wire with one new dangling end )
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
{ {
bool noconnect = FALSE; bool noconnect = FALSE;
if ( DelStruct->m_Flags & STRUCT_DELETED ) continue; // Already seen
if ( ! (DelStruct->m_Flags & CANDIDATE) ) continue; // Already seen
if ( DelStruct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
if( DelStruct->m_Flags & STRUCT_DELETED )
continue; // Already seen
if( !(DelStruct->m_Flags & CANDIDATE) )
continue; // Already seen
if( DelStruct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
continue;
DelStruct->m_Flags |= SKIP_STRUCT; DelStruct->m_Flags |= SKIP_STRUCT;
#define SEGM ((EDA_DrawLineStruct*)DelStruct)
#define SEGM ( (EDA_DrawLineStruct*) DelStruct )
/* Test the SEGM->m_Start point: if this point was connected to an STRUCT_DELETED wire, /* Test the SEGM->m_Start point: if this point was connected to an STRUCT_DELETED wire,
and now is not connected, the wire can be deleted */
EDA_BaseStruct * removed_struct;
for ( removed_struct = GetScreen()->EEDrawList; removed_struct != NULL; removed_struct = removed_struct->Pnext)
* and now is not connected, the wire can be deleted */
EDA_BaseStruct* removed_struct;
for( removed_struct = GetScreen()->EEDrawList;
removed_struct != NULL;
removed_struct = removed_struct->Pnext )
{ {
if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 ) continue;
if ( removed_struct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
#define WIRE ((EDA_DrawLineStruct*)removed_struct)
if ( WIRE->IsOneEndPointAt(SEGM->m_Start) ) break;
if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 )
continue;
if( removed_struct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
continue;
#define WIRE ( (EDA_DrawLineStruct*) removed_struct )
if( WIRE->IsOneEndPointAt( SEGM->m_Start ) )
break;
} }
if ( WIRE && ! CountConnectedItems(this, GetScreen()->EEDrawList, SEGM->m_Start, TRUE) )
if( WIRE && !CountConnectedItems( this, GetScreen()->EEDrawList, SEGM->m_Start, TRUE ) )
noconnect = TRUE; noconnect = TRUE;
/* Test the SEGM->m_End point: if this point was connected to an STRUCT_DELETED wire, /* Test the SEGM->m_End point: if this point was connected to an STRUCT_DELETED wire,
and now is not connected, the wire can be deleted */
for ( removed_struct = GetScreen()->EEDrawList; removed_struct != NULL; removed_struct = removed_struct->Pnext)
* and now is not connected, the wire can be deleted */
for( removed_struct = GetScreen()->EEDrawList;
removed_struct != NULL;
removed_struct = removed_struct->Pnext )
{ {
if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 ) continue;
if ( removed_struct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
if ( WIRE->IsOneEndPointAt(SEGM->m_End) ) break;
if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 )
continue;
if( removed_struct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
continue;
if( WIRE->IsOneEndPointAt( SEGM->m_End ) )
break;
} }
if ( removed_struct && ! CountConnectedItems(this, GetScreen()->EEDrawList, SEGM->m_End, TRUE) )
if( removed_struct &&
!CountConnectedItems( this, GetScreen()->EEDrawList, SEGM->m_End, TRUE ) )
noconnect = TRUE; noconnect = TRUE;
DelStruct->m_Flags &= ~SKIP_STRUCT; DelStruct->m_Flags &= ~SKIP_STRUCT;
if ( noconnect )
if( noconnect )
{ {
DelStruct->m_Flags |= STRUCT_DELETED; DelStruct->m_Flags |= STRUCT_DELETED;
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
PickedItem = new DrawPickedStruct(DelStruct);
PickedItem = new DrawPickedStruct( DelStruct );
PickedItem->Pnext = PickedList; PickedItem->Pnext = PickedList;
PickedList = PickedItem; PickedList = PickedItem;
DelStruct = GetScreen()->EEDrawList; DelStruct = GetScreen()->EEDrawList;
@ -201,20 +246,26 @@ DrawPickedStruct * PickedItem, *PickedList = NULL;
} }
// Delete redundant junctions (junctions which connect < 3 end wires and no pin are removed) // Delete redundant junctions (junctions which connect < 3 end wires and no pin are removed)
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
{ {
int count; int count;
if ( DelStruct->m_Flags & STRUCT_DELETED ) continue;
if ( ! (DelStruct->m_Flags & CANDIDATE) ) continue;
if ( DelStruct->Type() == DRAW_JUNCTION_STRUCT_TYPE )
if( DelStruct->m_Flags & STRUCT_DELETED )
continue;
if( !(DelStruct->m_Flags & CANDIDATE) )
continue;
if( DelStruct->Type() == DRAW_JUNCTION_STRUCT_TYPE )
{ {
#define JUNCTION ((DrawJunctionStruct*)DelStruct)
count = CountConnectedItems(this, GetScreen()->EEDrawList, JUNCTION->m_Pos, FALSE);
if ( count <= 2 )
#define JUNCTION ( (DrawJunctionStruct*) DelStruct )
count = CountConnectedItems( this, GetScreen()->EEDrawList, JUNCTION->m_Pos, FALSE );
if( count <= 2 )
{ {
DelStruct->m_Flags |= STRUCT_DELETED; DelStruct->m_Flags |= STRUCT_DELETED;
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
PickedItem = new DrawPickedStruct(DelStruct);
PickedItem = new DrawPickedStruct( DelStruct );
PickedItem->Pnext = PickedList; PickedItem->Pnext = PickedList;
PickedList = PickedItem; PickedList = PickedItem;
} }
@ -224,82 +275,89 @@ DrawPickedStruct * PickedItem, *PickedList = NULL;
// Delete labels attached to wires // Delete labels attached to wires
wxPoint pos = GetScreen()->m_Curseur; wxPoint pos = GetScreen()->m_Curseur;
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
{ {
if ( DelStruct->m_Flags & STRUCT_DELETED ) continue;
if ( DelStruct->Type() != DRAW_LABEL_STRUCT_TYPE ) continue;
GetScreen()->m_Curseur = ((DrawTextStruct*)DelStruct)->m_Pos;
EDA_BaseStruct * TstStruct =
PickStruct(GetScreen()->m_Curseur, GetScreen(),WIREITEM|BUSITEM);
if ( TstStruct && TstStruct->m_Flags & STRUCT_DELETED )
if( DelStruct->m_Flags & STRUCT_DELETED )
continue;
if( DelStruct->Type() != DRAW_LABEL_STRUCT_TYPE )
continue;
GetScreen()->m_Curseur = ( (DrawTextStruct*) DelStruct )->m_Pos;
EDA_BaseStruct* TstStruct =
PickStruct( GetScreen()->m_Curseur, GetScreen(), WIREITEM | BUSITEM );
if( TstStruct && TstStruct->m_Flags & STRUCT_DELETED )
{ {
DelStruct->m_Flags |= STRUCT_DELETED; DelStruct->m_Flags |= STRUCT_DELETED;
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
PickedItem = new DrawPickedStruct(DelStruct);
PickedItem = new DrawPickedStruct( DelStruct );
PickedItem->Pnext = PickedList; PickedItem->Pnext = PickedList;
PickedList = PickedItem; PickedList = PickedItem;
} }
} }
GetScreen()->m_Curseur = pos; GetScreen()->m_Curseur = pos;
} }
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
DelStruct->m_Flags = 0; DelStruct->m_Flags = 0;
if ( PickedList )
if( PickedList )
{ {
DeleteStruct(DrawPanel, DC, PickedList);
DeleteStruct( DrawPanel, DC, PickedList );
GetScreen()->SetModify(); GetScreen()->SetModify();
} }
} }
/*****************************************************************/ /*****************************************************************/
bool LocateAndDeleteItem(WinEDA_SchematicFrame * frame, wxDC * DC)
bool LocateAndDeleteItem( WinEDA_SchematicFrame* frame, wxDC* DC )
/*****************************************************************/ /*****************************************************************/
/* Locate and delete the item found under the mouse cousor /* Locate and delete the item found under the mouse cousor
If more than one item found: the priority order is:
1 : MARKER
2 : JUNCTION
2 : NOCONNECT
3 : WIRE ou BUS
4 : DRAWITEM
5 : TEXT
6 : COMPOSANT
7 : SHEET
return TRUE if an item was deleted
*/
* If more than one item found: the priority order is:
* 1 : MARKER
* 2 : JUNCTION
* 2 : NOCONNECT
* 3 : WIRE ou BUS
* 4 : DRAWITEM
* 5 : TEXT
* 6 : COMPOSANT
* 7 : SHEET
*
* return TRUE if an item was deleted
*/
{ {
EDA_BaseStruct * DelStruct;
SCH_SCREEN * screen = (SCH_SCREEN*)(frame->GetScreen());
bool item_deleted = FALSE;
DelStruct = PickStruct(screen->m_Curseur,
screen, MARKERITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, JUNCTIONITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, NOCONNECTITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, RACCORDITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, WIREITEM|BUSITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, DRAWITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, TEXTITEM|LABELITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, LIBITEM);
if( DelStruct == NULL ) DelStruct = PickStruct(screen->m_Curseur,
screen, SHEETITEM);
if (DelStruct)
EDA_BaseStruct* DelStruct;
SCH_SCREEN* screen = (SCH_SCREEN*) ( frame->GetScreen() );
bool item_deleted = FALSE;
DelStruct = PickStruct( screen->m_Curseur, screen, MARKERITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, JUNCTIONITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, NOCONNECTITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, RACCORDITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, WIREITEM | BUSITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, DRAWITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, TEXTITEM | LABELITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, LIBITEM );
if( DelStruct == NULL )
DelStruct = PickStruct( screen->m_Curseur, screen, SHEETITEM );
if( DelStruct )
{ {
g_ItemToRepeat = NULL; g_ItemToRepeat = NULL;
DeleteStruct(frame->DrawPanel, DC, DelStruct);
frame->TestDanglingEnds(frame->GetScreen()->EEDrawList, DC);
DeleteStruct( frame->DrawPanel, DC, DelStruct );
frame->TestDanglingEnds( frame->GetScreen()->EEDrawList, DC );
frame->GetScreen()->SetModify(); frame->GetScreen()->SetModify();
item_deleted = TRUE; item_deleted = TRUE;
} }
@ -308,71 +366,83 @@ bool item_deleted = FALSE;
} }
/***************************************************************/ /***************************************************************/
void EraseStruct(EDA_BaseStruct *DrawStruct, SCH_SCREEN * Screen)
void EraseStruct( EDA_BaseStruct* DrawStruct, SCH_SCREEN* Screen )
/***************************************************************/ /***************************************************************/
/* Suppression definitive d'une structure dans une liste chainee /* Suppression definitive d'une structure dans une liste chainee
d'elements de dessin
DrawStruct = pointeur sur la structure
Screen = pointeur sur l'ecran d'appartenance
Le chainage de la liste est modifie.
Remarque:
pour les structures DRAW_SHEET_STRUCT_TYPE, l'ecran et les structures
correspondantes ne sont pas touches.
Ils doivent etre traites separement
*/
* d'elements de dessin
* DrawStruct = pointeur sur la structure
* Screen = pointeur sur l'ecran d'appartenance
* Le chainage de la liste est modifie.
*
* Remarque:
* pour les structures DRAW_SHEET_STRUCT_TYPE, l'ecran et les structures
* correspondantes ne sont pas touches.
* Ils doivent etre traites separement
*/
{ {
EDA_BaseStruct *DrawList;
DrawPickedStruct *PickedList = NULL;
DrawSheetLabelStruct* SheetLabel, *NextLabel;
EDA_BaseStruct* DrawList;
DrawPickedStruct* PickedList = NULL;
DrawSheetLabelStruct* SheetLabel, * NextLabel;
if( DrawStruct == NULL ) return;
if( Screen == NULL ) return;
if( DrawStruct == NULL )
return;
if( Screen == NULL )
return;
Screen->SetModify(); Screen->SetModify();
if (DrawStruct->Type() == DRAW_SHEETLABEL_STRUCT_TYPE)
{ /* Cette stucture est rattachee a une feuille, et n'est pas
accessible par la liste globale directement */
if( DrawStruct->Type() == DRAW_SHEETLABEL_STRUCT_TYPE )
{
/* Cette stucture est rattachee a une feuille, et n'est pas
* accessible par la liste globale directement */
//this structure has a sheet attached, which we must find. //this structure has a sheet attached, which we must find.
DrawList = Screen->EEDrawList; DrawList = Screen->EEDrawList;
for ( ; DrawList != NULL; DrawList = DrawList->Pnext )
for( ; DrawList != NULL; DrawList = DrawList->Pnext )
{ {
if(DrawList->Type() != DRAW_SHEET_STRUCT_TYPE) continue;
if( DrawList->Type() != DRAW_SHEET_STRUCT_TYPE )
continue;
/* Examen de la Sheet */ /* Examen de la Sheet */
SheetLabel = ((DrawSheetStruct *) DrawList)->m_Label;
if (SheetLabel == NULL) continue;
if (SheetLabel == (DrawSheetLabelStruct*) DrawStruct)
SheetLabel = ( (DrawSheetStruct*) DrawList )->m_Label;
if( SheetLabel == NULL )
continue;
if( SheetLabel == (DrawSheetLabelStruct*) DrawStruct )
{ {
((DrawSheetStruct *) DrawList)->m_Label =
(DrawSheetLabelStruct *)SheetLabel->Pnext;
( (DrawSheetStruct*) DrawList )->m_Label =
(DrawSheetLabelStruct*) SheetLabel->Pnext;
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
return; return;
} }
else while( SheetLabel->Pnext )/* Examen de la liste dependante */
else
{ {
NextLabel = (DrawSheetLabelStruct *)SheetLabel->Pnext;
while( SheetLabel->Pnext ) /* Examen de la liste dependante */
{
NextLabel = (DrawSheetLabelStruct*) SheetLabel->Pnext;
if( NextLabel == (DrawSheetLabelStruct*) DrawStruct ) if( NextLabel == (DrawSheetLabelStruct*) DrawStruct )
{ {
SheetLabel->Pnext = (EDA_BaseStruct *)NextLabel->Pnext;
SheetLabel->Pnext = (EDA_BaseStruct*) NextLabel->Pnext;
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
return; return;
} }
SheetLabel = NextLabel; SheetLabel = NextLabel;
} }
} }
}
return; return;
} }
if (DrawStruct->Type() == DRAW_PICK_ITEM_STRUCT_TYPE)
if( DrawStruct->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
{ {
PickedList = (DrawPickedStruct *) DrawStruct;
while (PickedList)
PickedList = (DrawPickedStruct*) DrawStruct;
while( PickedList )
{ {
if (PickedList->m_PickedStruct == Screen->EEDrawList)
if( PickedList->m_PickedStruct == Screen->EEDrawList )
{ {
Screen->EEDrawList = Screen->EEDrawList->Pnext; Screen->EEDrawList = Screen->EEDrawList->Pnext;
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
@ -380,9 +450,9 @@ DrawSheetLabelStruct* SheetLabel, *NextLabel;
else else
{ {
DrawList = Screen->EEDrawList; DrawList = Screen->EEDrawList;
while ( DrawList && DrawList->Pnext)
while( DrawList && DrawList->Pnext )
{ {
if (DrawList->Pnext == PickedList->m_PickedStruct)
if( DrawList->Pnext == PickedList->m_PickedStruct )
{ {
DrawList->Pnext = DrawList->Pnext->Pnext; DrawList->Pnext = DrawList->Pnext->Pnext;
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
@ -391,12 +461,12 @@ DrawSheetLabelStruct* SheetLabel, *NextLabel;
DrawList = DrawList->Pnext; DrawList = DrawList->Pnext;
} }
} }
PickedList = (DrawPickedStruct *)PickedList->Pnext;
PickedList = (DrawPickedStruct*) PickedList->Pnext;
} }
} }
else // structure usuelle */ else // structure usuelle */
{ {
if (DrawStruct == Screen->EEDrawList)
if( DrawStruct == Screen->EEDrawList )
{ {
Screen->EEDrawList = DrawStruct->Pnext; Screen->EEDrawList = DrawStruct->Pnext;
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
@ -404,9 +474,9 @@ DrawSheetLabelStruct* SheetLabel, *NextLabel;
else else
{ {
DrawList = Screen->EEDrawList; DrawList = Screen->EEDrawList;
while (DrawList && DrawList->Pnext)
while( DrawList && DrawList->Pnext )
{ {
if (DrawList->Pnext == DrawStruct)
if( DrawList->Pnext == DrawStruct )
{ {
DrawList->Pnext = DrawStruct->Pnext; DrawList->Pnext = DrawStruct->Pnext;
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
@ -419,54 +489,60 @@ DrawSheetLabelStruct* SheetLabel, *NextLabel;
} }
/********************************/ /********************************/
void DeleteAllMarkers(int type)
void DeleteAllMarkers( int type )
/********************************/ /********************************/
/* Effacement des marqueurs du type "type" */ /* Effacement des marqueurs du type "type" */
{ {
SCH_SCREEN * screen;
EDA_BaseStruct * DrawStruct, * NextStruct;
DrawMarkerStruct * Marker;
SCH_SCREEN* screen;
EDA_BaseStruct* DrawStruct, * NextStruct;
DrawMarkerStruct* Marker;
EDA_ScreenList ScreenList; EDA_ScreenList ScreenList;
for ( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
{ {
for ( DrawStruct = screen->EEDrawList; DrawStruct != NULL; DrawStruct = NextStruct)
for( DrawStruct = screen->EEDrawList; DrawStruct != NULL; DrawStruct = NextStruct )
{ {
NextStruct = DrawStruct->Pnext; NextStruct = DrawStruct->Pnext;
if(DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE ) continue;
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
continue;
/* Marqueur trouve */ /* Marqueur trouve */
Marker = (DrawMarkerStruct * ) DrawStruct;
if( Marker->m_Type != type ) continue;
Marker = (DrawMarkerStruct*) DrawStruct;
if( Marker->m_Type != type )
continue;
/* Suppression du marqueur */ /* Suppression du marqueur */
EraseStruct( DrawStruct, screen);
EraseStruct( DrawStruct, screen );
} }
} }
} }
/********************************************************************/ /********************************************************************/
void DeleteOneLibraryDrawStruct(WinEDA_DrawPanel * panel, wxDC * DC,
EDA_LibComponentStruct * LibEntry,
LibEDA_BaseStruct * DrawItem, int Affiche)
void DeleteOneLibraryDrawStruct( WinEDA_DrawPanel* panel, wxDC* DC,
EDA_LibComponentStruct* LibEntry,
LibEDA_BaseStruct* DrawItem, int Affiche )
/********************************************************************/ /********************************************************************/
/* Routine d'effacement d'un "LibraryDrawStruct"
(d'un element de dessin d'un composant )
Parametres d'entree
Pointeur sur le composant comportant la structure
(Si NULL la structure a effacer est supposee non rattachee
a un composant)
Pointeur sur la structure a effacer
Efface egalement le graphique correspondant de l'ecran
*/
/* Routine d'effacement d'un "LibraryDrawStruct"
* (d'un element de dessin d'un composant )
*
* Parametres d'entree
* Pointeur sur le composant comportant la structure
* (Si NULL la structure a effacer est supposee non rattachee
* a un composant)
* Pointeur sur la structure a effacer
*
* Efface egalement le graphique correspondant de l'ecran
*/
{ {
LibEDA_BaseStruct *PreviousDrawItem;
LibEDA_BaseStruct* PreviousDrawItem;
/* Effacement du graphique */ /* Effacement du graphique */
if( Affiche && DC)
DrawLibraryDrawStruct(panel, DC, LibEntry, 0 , 0, DrawItem, CurrentUnit, g_XorMode);
if( Affiche && DC )
DrawLibraryDrawStruct( panel, DC, LibEntry, 0, 0, DrawItem, CurrentUnit, g_XorMode );
/* Effacement de la structure en memoire */ /* Effacement de la structure en memoire */
if( LibEntry ) /* Recherche du predecesseur */ if( LibEntry ) /* Recherche du predecesseur */
@ -479,23 +555,23 @@ LibEDA_BaseStruct *PreviousDrawItem;
LibEntry->m_Drawings = DrawItem->Next(); LibEntry->m_Drawings = DrawItem->Next();
SAFE_DELETE( DrawItem ); SAFE_DELETE( DrawItem );
} }
else /* Cas des autres items */ else /* Cas des autres items */
while(PreviousDrawItem)
{ {
if(PreviousDrawItem->Pnext == DrawItem)
while( PreviousDrawItem )
{
if( PreviousDrawItem->Pnext == DrawItem )
{ {
PreviousDrawItem->Pnext = DrawItem->Pnext; PreviousDrawItem->Pnext = DrawItem->Pnext;
SAFE_DELETE( DrawItem ); break;
SAFE_DELETE( DrawItem );
break;
} }
PreviousDrawItem = PreviousDrawItem->Next(); PreviousDrawItem = PreviousDrawItem->Next();
} }
} }
}
else /* Structure non reliee a un composant */ else /* Structure non reliee a un composant */
{ {
SAFE_DELETE( DrawItem ); SAFE_DELETE( DrawItem );
} }
} }

40
eeschema/erc.cpp

@ -101,7 +101,8 @@ bool DiagErcTableInit; // go to TRUE after DiagErc init
*/ */
static int DefaultDiagErc[PIN_NMAX][PIN_NMAX] = static int DefaultDiagErc[PIN_NMAX][PIN_NMAX] =
{ /* I, O, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */ { /* I, O, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */
/* I */ { OK, OK, OK, OK, OK, WAR, OK, OK, OK, OK, WAR },
/* I */
{ OK, OK, OK, OK, OK, WAR, OK, OK, OK, OK, WAR },
/* O */ { OK, ERR, OK, WAR, OK, WAR, OK, ERR, ERR, ERR, WAR }, /* O */ { OK, ERR, OK, WAR, OK, WAR, OK, ERR, ERR, ERR, WAR },
/* Bi*/ { OK, OK, OK, OK, OK, WAR, OK, WAR, OK, WAR, WAR }, /* Bi*/ { OK, OK, OK, OK, OK, WAR, OK, WAR, OK, WAR, WAR },
/* 3S*/ { OK, WAR, OK, OK, OK, WAR, WAR, ERR, WAR, WAR, WAR }, /* 3S*/ { OK, WAR, OK, OK, OK, WAR, WAR, ERR, WAR, WAR, WAR },
@ -132,7 +133,8 @@ static int DefaultDiagErc[PIN_NMAX][PIN_NMAX] =
*/ */
static int MinimalReq[PIN_NMAX][PIN_NMAX] = static int MinimalReq[PIN_NMAX][PIN_NMAX] =
{ /* In, Out, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */ { /* In, Out, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */
/* In*/ { NOD, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
/* In*/
{ NOD, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
/*Out*/ { DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, NOC }, /*Out*/ { DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, NOC },
/* Bi*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC }, /* Bi*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
/* 3S*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC }, /* 3S*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
@ -146,7 +148,6 @@ static int MinimalReq[PIN_NMAX][PIN_NMAX] =
}; };
/*********************************************/ /*********************************************/
void WinEDA_ErcFrame::ReBuildMatrixPanel() void WinEDA_ErcFrame::ReBuildMatrixPanel()
/*********************************************/ /*********************************************/
@ -391,6 +392,7 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
wxString ErcFullFileName; wxString ErcFullFileName;
ErcFullFileName = g_RootSheet->m_AssociatedScreen->m_FileName; ErcFullFileName = g_RootSheet->m_AssociatedScreen->m_FileName;
ChangeFileNameExt( ErcFullFileName, wxT( ".erc" ) ); ChangeFileNameExt( ErcFullFileName, wxT( ".erc" ) );
ErcFullFileName = EDA_FileSelector( _( "ERC file:" ), ErcFullFileName = EDA_FileSelector( _( "ERC file:" ),
wxEmptyString, /* Chemin par defaut */ wxEmptyString, /* Chemin par defaut */
ErcFullFileName, /* nom fichier par defaut */ ErcFullFileName, /* nom fichier par defaut */
@ -434,6 +436,7 @@ void WinEDA_ErcFrame::DelERCMarkers( wxCommandEvent& event )
{ {
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE ) if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
continue; continue;
/* Marqueur trouve */ /* Marqueur trouve */
Marker = (DrawMarkerStruct*) DrawStruct; Marker = (DrawMarkerStruct*) DrawStruct;
if( Marker->m_Type == MARQ_ERC ) if( Marker->m_Type == MARQ_ERC )
@ -573,6 +576,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
Marker->m_Comment.Printf( Marker->m_Comment.Printf(
_( "Warning Pin %s not driven (Net %d)" ), _( "Warning Pin %s not driven (Net %d)" ),
MsgPinElectricType[ii], NetItemRef->GetNet() ); MsgPinElectricType[ii], NetItemRef->GetNet() );
if( screen == panel->GetScreen() ) if( screen == panel->GetScreen() )
RedrawOneStruct( panel, DC, Marker, GR_COPY ); RedrawOneStruct( panel, DC, Marker, GR_COPY );
return; return;
@ -582,6 +586,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
{ {
Marker->m_Comment.Printf( Marker->m_Comment.Printf(
_( "Warning More than 1 Pin connected to UnConnect symbol" ) ); _( "Warning More than 1 Pin connected to UnConnect symbol" ) );
if( screen == panel->GetScreen() ) if( screen == panel->GetScreen() )
RedrawOneStruct( panel, DC, Marker, GR_COPY ); RedrawOneStruct( panel, DC, Marker, GR_COPY );
return; return;
@ -644,7 +649,7 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
/* Est - on toujours dans le meme net ? */ /* Est - on toujours dans le meme net ? */
if( (NetItemTst >= Lim) // fin de liste (donc fin de net) if( (NetItemTst >= Lim) // fin de liste (donc fin de net)
|| (NetItemRef->GetNet() != NetItemTst->GetNet()) ) // fin de net
|| ( NetItemRef->GetNet() != NetItemTst->GetNet() ) ) // fin de net
{ /* Fin de netcode trouve: Tst connexion minimum */ { /* Fin de netcode trouve: Tst connexion minimum */
if( (*MinConnexion < NET_NC ) if( (*MinConnexion < NET_NC )
&& (local_minconn < NET_NC ) ) /* pin non connect�e ou non pilotee */ && (local_minconn < NET_NC ) ) /* pin non connect�e ou non pilotee */
@ -727,11 +732,14 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
for( Sheet = SheetList.GetFirst(); Sheet != NULL; Sheet = SheetList.GetNext() ) for( Sheet = SheetList.GetFirst(); Sheet != NULL; Sheet = SheetList.GetNext() )
{ {
if(Sheet->Last() == g_RootSheet){
if( Sheet->Last() == g_RootSheet )
{
msg.Printf( _( "\n***** Sheet / (Root) \n" ) ); msg.Printf( _( "\n***** Sheet / (Root) \n" ) );
}else{
}
else
{
wxString str = Sheet->PathHumanReadable(); wxString str = Sheet->PathHumanReadable();
msg.Printf( _("\n***** Sheet %s\n"), str.GetData() );
msg.Printf( _( "\n***** Sheet %s\n" ), str.GetData() );
} }
fprintf( OutErc, "%s", CONV_TO_UTF8( msg ) ); fprintf( OutErc, "%s", CONV_TO_UTF8( msg ) );
@ -764,18 +772,24 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
return TRUE; return TRUE;
} }
bool TestLabel_( ObjetNetListStruct* a, ObjetNetListStruct* b ) bool TestLabel_( ObjetNetListStruct* a, ObjetNetListStruct* b )
{ {
int at = a->m_Type; int at = a->m_Type;
int bt = b->m_Type; int bt = b->m_Type;
if( (at == NET_HIERLABEL || at == NET_HIERBUSLABELMEMBER) if( (at == NET_HIERLABEL || at == NET_HIERBUSLABELMEMBER)
&&(bt == NET_SHEETLABEL || bt == NET_SHEETBUSLABELMEMBER) ){
if( a->m_SheetList == b->m_SheetListInclude ){
&&(bt == NET_SHEETLABEL || bt == NET_SHEETBUSLABELMEMBER) )
{
if( a->m_SheetList == b->m_SheetListInclude )
{
return true; //connected! return true; //connected!
} }
} }
return false; //these two are unconnected return false; //these two are unconnected
} }
/***********************************************************************/ /***********************************************************************/
void TestLabel( WinEDA_DrawPanel* panel, wxDC* DC, void TestLabel( WinEDA_DrawPanel* panel, wxDC* DC,
ObjetNetListStruct* NetItemRef, ObjetNetListStruct* StartNet ) ObjetNetListStruct* NetItemRef, ObjetNetListStruct* StartNet )
@ -804,16 +818,18 @@ void TestLabel( WinEDA_DrawPanel* panel, wxDC* DC,
|| ( NetItemRef->GetNet() != NetItemTst->GetNet() ) ) || ( NetItemRef->GetNet() != NetItemTst->GetNet() ) )
{ {
/* Fin de netcode trouve */ /* Fin de netcode trouve */
if( erc ){
if( erc )
{
/* GLabel ou SheetLabel orphelin */ /* GLabel ou SheetLabel orphelin */
Diagnose( panel, DC, NetItemRef, NULL, -1, WAR ); Diagnose( panel, DC, NetItemRef, NULL, -1, WAR );
} }
return; return;
} }
if(TestLabel_(NetItemRef, NetItemTst))
if( TestLabel_( NetItemRef, NetItemTst ) )
erc = 0; erc = 0;
//same thing, different order. //same thing, different order.
if(TestLabel_(NetItemTst, NetItemRef))
if( TestLabel_( NetItemTst, NetItemRef ) )
erc = 0; erc = 0;
} }
} }

6
eeschema/program.h

@ -92,6 +92,12 @@ public:
} }
/**
* Function GetBoundingBox
* returns the bounding box of this TRACK
*/
EDA_Rect GetBoundingBox() const;
virtual void Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int draw_mode, virtual void Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int draw_mode,
int Color = -1 ); int Color = -1 );

3
eeschema/schedit.cpp

@ -478,6 +478,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
if( GetScreen()->GetCurItem()->m_Flags == 0 ) if( GetScreen()->GetCurItem()->m_Flags == 0 )
SaveCopyInUndoList( GetScreen()->GetCurItem(), IS_CHANGED ); SaveCopyInUndoList( GetScreen()->GetCurItem(), IS_CHANGED );
CmpRotationMiroir( CmpRotationMiroir(
(EDA_SchComponentStruct*) GetScreen()->GetCurItem(), (EDA_SchComponentStruct*) GetScreen()->GetCurItem(),
&dc, option ); &dc, option );
@ -497,6 +498,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
GetScreen() ) ); GetScreen() ) );
if( GetScreen()->GetCurItem() == NULL ) if( GetScreen()->GetCurItem() == NULL )
break; break;
EditComponentValue( EditComponentValue(
(EDA_SchComponentStruct*) GetScreen()->GetCurItem(), &dc ); (EDA_SchComponentStruct*) GetScreen()->GetCurItem(), &dc );
break; break;
@ -510,6 +512,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
GetScreen() ) ); GetScreen() ) );
if( GetScreen()->GetCurItem() == NULL ) if( GetScreen()->GetCurItem() == NULL )
break; break;
EditComponentReference( EditComponentReference(
(EDA_SchComponentStruct*) GetScreen()->GetCurItem(), &dc ); (EDA_SchComponentStruct*) GetScreen()->GetCurItem(), &dc );
break; break;

Loading…
Cancel
Save