beautify
This commit is contained in:
parent
0f06e2ad1e
commit
0f0ced3700
|
@ -932,7 +932,8 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
|
|||
|
||||
|
||||
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 */
|
||||
frame->SaveCopyInUndoList( ( (DrawSheetLabelStruct*) DrawStruct )->m_Parent, IS_CHANGED );
|
||||
frame->DeleteSheetLabel( DC, (DrawSheetLabelStruct*) DrawStruct );
|
||||
|
@ -961,7 +962,14 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
|
|||
{
|
||||
screen->RemoveFromDrawList( DrawStruct );
|
||||
|
||||
RedrawOneStruct( panel, DC, DrawStruct, g_XorMode );
|
||||
if( DrawStruct->Type() == DRAW_SEGMENT_STRUCT_TYPE )
|
||||
{
|
||||
D( printf("PostDirtyRect()\n"); )
|
||||
panel->PostDirtyRect( ((EDA_DrawLineStruct*)DrawStruct)->GetBoundingBox() );
|
||||
}
|
||||
else
|
||||
RedrawOneStruct( panel, DC, DrawStruct, g_XorMode );
|
||||
|
||||
/* Unlink the structure */
|
||||
DrawStruct->Pnext = DrawStruct->Pback = NULL; // Only one struct -> no link
|
||||
if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE )
|
||||
|
|
|
@ -147,14 +147,14 @@ wxString DrawMarkerStruct::GetComment()
|
|||
/**
|
||||
* Function Show
|
||||
* is used to output the object tree, currently for debugging only.
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* of nesting of this object within the overall tree.
|
||||
* @param os The ostream& to output to.
|
||||
*/
|
||||
void DrawMarkerStruct::Show( int nestLevel, std::ostream& os )
|
||||
{
|
||||
// for now, make it look like XML:
|
||||
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << m_Pos
|
||||
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << m_Pos
|
||||
<< "/>\n";
|
||||
}
|
||||
#endif
|
||||
|
@ -222,17 +222,17 @@ bool EDA_DrawLineStruct::IsOneEndPointAt( const wxPoint& pos )
|
|||
/**
|
||||
* Function Show
|
||||
* is used to output the object tree, currently for debugging only.
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* of nesting of this object within the overall tree.
|
||||
* @param os The ostream& to output to.
|
||||
*/
|
||||
void EDA_DrawLineStruct::Show( int nestLevel, std::ostream& os )
|
||||
{
|
||||
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
|
||||
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
|
||||
" layer=\"" << m_Layer << '"' <<
|
||||
" width=\"" << m_Width << '"' <<
|
||||
" startIsDangling=\"" << m_StartIsDangling << '"' <<
|
||||
" endIsDangling=\"" << m_EndIsDangling << '"' << ">" <<
|
||||
" startIsDangling=\"" << m_StartIsDangling << '"' <<
|
||||
" endIsDangling=\"" << m_EndIsDangling << '"' << ">" <<
|
||||
" <start" << m_Start << "/>" <<
|
||||
" <end" << m_End << "/>" <<
|
||||
"</" << GetClass().Lower().mb_str() << ">\n";
|
||||
|
@ -240,6 +240,25 @@ void EDA_DrawLineStruct::Show( int nestLevel, std::ostream& os )
|
|||
#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 */
|
||||
/****************************/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/************************************/
|
||||
/* Delete.cpp: routines d'effacement */
|
||||
/************************************/
|
||||
/************************************/
|
||||
/* Delete.cpp: routines d'effacement */
|
||||
/************************************/
|
||||
|
||||
#include "fctsys.h"
|
||||
#include "gr_basic.h"
|
||||
|
@ -17,485 +17,561 @@
|
|||
|
||||
|
||||
/********************************************************************************/
|
||||
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()
|
||||
*/
|
||||
* 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)
|
||||
{
|
||||
if ( Struct->m_Flags & STRUCT_DELETED ) continue;
|
||||
if ( Struct->m_Flags & SKIP_STRUCT ) continue;
|
||||
for( Struct = ListStruct; Struct != NULL; Struct = Struct->Pnext )
|
||||
{
|
||||
if( Struct->m_Flags & STRUCT_DELETED )
|
||||
continue;
|
||||
if( Struct->m_Flags & SKIP_STRUCT )
|
||||
continue;
|
||||
|
||||
|
||||
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) )
|
||||
count++;
|
||||
#undef JUNCTION
|
||||
}
|
||||
|
||||
if ( Struct->Type() != DRAW_SEGMENT_STRUCT_TYPE ) continue;
|
||||
#define SEGM ((EDA_DrawLineStruct*)Struct)
|
||||
if ( SEGM->IsOneEndPointAt(pos) ) count++;
|
||||
#undef SEGM
|
||||
}
|
||||
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) )
|
||||
count++;
|
||||
#undef JUNCTION
|
||||
}
|
||||
|
||||
return count;
|
||||
if( Struct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
|
||||
continue;
|
||||
|
||||
#define SEGM ( (EDA_DrawLineStruct*) Struct )
|
||||
if( SEGM->IsOneEndPointAt( pos ) )
|
||||
count++;
|
||||
#undef SEGM
|
||||
}
|
||||
|
||||
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()
|
||||
*/
|
||||
* 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)
|
||||
{
|
||||
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;
|
||||
continue;
|
||||
#undef JUNCTION
|
||||
}
|
||||
for( Struct = ListStruct; Struct != NULL; Struct = Struct->Pnext )
|
||||
{
|
||||
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;
|
||||
continue;
|
||||
#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) )
|
||||
{
|
||||
if ( ! frame->LocatePinEnd(ListStruct,SEGM->m_Start) )
|
||||
{
|
||||
Struct->m_Flags |= CANDIDATE;
|
||||
MarkConnected(frame, ListStruct, SEGM);
|
||||
}
|
||||
}
|
||||
if ( segment->IsOneEndPointAt(SEGM->m_End) )
|
||||
{
|
||||
if ( ! frame->LocatePinEnd(ListStruct,SEGM->m_End) )
|
||||
{
|
||||
Struct->m_Flags |= CANDIDATE;
|
||||
MarkConnected(frame, ListStruct, SEGM);
|
||||
}
|
||||
}
|
||||
#undef SEGM
|
||||
}
|
||||
#define SEGM ( (EDA_DrawLineStruct*) Struct )
|
||||
if( segment->IsOneEndPointAt( SEGM->m_Start ) )
|
||||
{
|
||||
if( !frame->LocatePinEnd( ListStruct, SEGM->m_Start ) )
|
||||
{
|
||||
Struct->m_Flags |= CANDIDATE;
|
||||
MarkConnected( frame, ListStruct, SEGM );
|
||||
}
|
||||
}
|
||||
if( segment->IsOneEndPointAt( SEGM->m_End ) )
|
||||
{
|
||||
if( !frame->LocatePinEnd( ListStruct, SEGM->m_End ) )
|
||||
{
|
||||
Struct->m_Flags |= CANDIDATE;
|
||||
MarkConnected( frame, ListStruct, SEGM );
|
||||
}
|
||||
}
|
||||
#undef SEGM
|
||||
}
|
||||
|
||||
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
|
||||
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 */
|
||||
for(DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct=DelStruct->Pnext)
|
||||
DelStruct->m_Flags = 0;
|
||||
/* Clear .m_Flags member for all items */
|
||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
|
||||
DelStruct->m_Flags = 0;
|
||||
|
||||
BreakSegmentOnJunction( (SCH_SCREEN*)GetScreen() );
|
||||
DelStruct = GetScreen()->EEDrawList;
|
||||
|
||||
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
|
||||
of items to delete
|
||||
*/
|
||||
SCH_SCREEN* screen = (SCH_SCREEN*)GetScreen();
|
||||
EDA_BaseStruct* savedEEDrawList = screen->EEDrawList;
|
||||
while ( DelStruct &&
|
||||
(DelStruct = PickStruct(screen->m_Curseur,
|
||||
screen, JUNCTIONITEM|WIREITEM|BUSITEM)) != NULL )
|
||||
{
|
||||
|
||||
DelStruct->m_Flags = SELECTEDNODE|STRUCT_DELETED;
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct(DelStruct);
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
DelStruct=DelStruct->Pnext;
|
||||
screen->EEDrawList = DelStruct;
|
||||
}
|
||||
GetScreen()->EEDrawList = savedEEDrawList;
|
||||
/* Mark all wires, junctions, .. connected to one of the item to delete
|
||||
*/
|
||||
if ( DeleteFullConnection )
|
||||
{
|
||||
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);
|
||||
#undef SEGM
|
||||
}
|
||||
BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() );
|
||||
DelStruct = GetScreen()->EEDrawList;
|
||||
|
||||
// Search all removable wires (i.e wire with one new dangling end )
|
||||
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
|
||||
{
|
||||
bool noconnect = FALSE;
|
||||
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
|
||||
* of items to delete
|
||||
*/
|
||||
SCH_SCREEN* screen = (SCH_SCREEN*) GetScreen();
|
||||
EDA_BaseStruct* savedEEDrawList = screen->EEDrawList;
|
||||
while( DelStruct
|
||||
&& ( DelStruct = PickStruct( screen->m_Curseur,
|
||||
screen, JUNCTIONITEM | WIREITEM | BUSITEM ) ) != NULL )
|
||||
{
|
||||
DelStruct->m_Flags = SELECTEDNODE | STRUCT_DELETED;
|
||||
|
||||
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;
|
||||
#define SEGM ((EDA_DrawLineStruct*)DelStruct)
|
||||
/* 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)
|
||||
{
|
||||
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) )
|
||||
noconnect = TRUE;
|
||||
/* 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)
|
||||
{
|
||||
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) )
|
||||
noconnect = TRUE;
|
||||
DelStruct->m_Flags &= ~SKIP_STRUCT;
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct( DelStruct );
|
||||
|
||||
if ( noconnect )
|
||||
{
|
||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct(DelStruct);
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
DelStruct = GetScreen()->EEDrawList;
|
||||
}
|
||||
#undef SEGM
|
||||
}
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
DelStruct = DelStruct->Pnext;
|
||||
screen->EEDrawList = DelStruct;
|
||||
}
|
||||
|
||||
// Delete redundant junctions (junctions which connect < 3 end wires and no pin are removed)
|
||||
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
|
||||
{
|
||||
int count;
|
||||
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 )
|
||||
{
|
||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct(DelStruct);
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
}
|
||||
#undef JUNCTION
|
||||
}
|
||||
}
|
||||
GetScreen()->EEDrawList = savedEEDrawList;
|
||||
|
||||
// Delete labels attached to wires
|
||||
wxPoint pos = GetScreen()->m_Curseur;
|
||||
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 )
|
||||
{
|
||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct(DelStruct);
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
}
|
||||
}
|
||||
GetScreen()->m_Curseur = pos;
|
||||
}
|
||||
/* Mark all wires, junctions, .. connected to one of the item to delete
|
||||
*/
|
||||
if( DeleteFullConnection )
|
||||
{
|
||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
|
||||
{
|
||||
if( !(DelStruct->m_Flags & SELECTEDNODE) )
|
||||
continue;
|
||||
|
||||
for ( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext)
|
||||
DelStruct->m_Flags = 0;
|
||||
#define SEGM ( (EDA_DrawLineStruct*) DelStruct )
|
||||
if( DelStruct->Type() != DRAW_SEGMENT_STRUCT_TYPE )
|
||||
continue;
|
||||
|
||||
if ( PickedList )
|
||||
{
|
||||
DeleteStruct(DrawPanel, DC, PickedList);
|
||||
GetScreen()->SetModify();
|
||||
}
|
||||
MarkConnected( this, GetScreen()->EEDrawList, SEGM );
|
||||
#undef SEGM
|
||||
}
|
||||
|
||||
// Search all removable wires (i.e wire with one new dangling end )
|
||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
|
||||
{
|
||||
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;
|
||||
|
||||
DelStruct->m_Flags |= SKIP_STRUCT;
|
||||
#define SEGM ( (EDA_DrawLineStruct*) DelStruct )
|
||||
|
||||
/* 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 )
|
||||
{
|
||||
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 ) )
|
||||
noconnect = TRUE;
|
||||
|
||||
/* 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 )
|
||||
{
|
||||
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 ) )
|
||||
noconnect = TRUE;
|
||||
|
||||
DelStruct->m_Flags &= ~SKIP_STRUCT;
|
||||
|
||||
if( noconnect )
|
||||
{
|
||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct( DelStruct );
|
||||
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
DelStruct = GetScreen()->EEDrawList;
|
||||
}
|
||||
#undef SEGM
|
||||
}
|
||||
|
||||
// Delete redundant junctions (junctions which connect < 3 end wires and no pin are removed)
|
||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
|
||||
{
|
||||
int count;
|
||||
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 )
|
||||
{
|
||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct( DelStruct );
|
||||
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
}
|
||||
#undef JUNCTION
|
||||
}
|
||||
}
|
||||
|
||||
// Delete labels attached to wires
|
||||
wxPoint pos = GetScreen()->m_Curseur;
|
||||
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 )
|
||||
{
|
||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||
|
||||
/* Put this structure in the picked list: */
|
||||
PickedItem = new DrawPickedStruct( DelStruct );
|
||||
|
||||
PickedItem->Pnext = PickedList;
|
||||
PickedList = PickedItem;
|
||||
}
|
||||
}
|
||||
|
||||
GetScreen()->m_Curseur = pos;
|
||||
}
|
||||
|
||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Pnext )
|
||||
DelStruct->m_Flags = 0;
|
||||
|
||||
if( PickedList )
|
||||
{
|
||||
DeleteStruct( DrawPanel, DC, PickedList );
|
||||
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
|
||||
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);
|
||||
EDA_BaseStruct* DelStruct;
|
||||
SCH_SCREEN* screen = (SCH_SCREEN*) ( frame->GetScreen() );
|
||||
bool item_deleted = FALSE;
|
||||
|
||||
if (DelStruct)
|
||||
{
|
||||
g_ItemToRepeat = NULL;
|
||||
DeleteStruct(frame->DrawPanel, DC, DelStruct);
|
||||
frame->TestDanglingEnds(frame->GetScreen()->EEDrawList, DC);
|
||||
frame->GetScreen()->SetModify();
|
||||
item_deleted = TRUE;
|
||||
}
|
||||
|
||||
return item_deleted;
|
||||
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;
|
||||
DeleteStruct( frame->DrawPanel, DC, DelStruct );
|
||||
frame->TestDanglingEnds( frame->GetScreen()->EEDrawList, DC );
|
||||
frame->GetScreen()->SetModify();
|
||||
item_deleted = TRUE;
|
||||
}
|
||||
|
||||
return item_deleted;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************/
|
||||
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
|
||||
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;
|
||||
|
||||
Screen->SetModify();
|
||||
if( Screen == NULL )
|
||||
return;
|
||||
|
||||
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.
|
||||
DrawList = Screen->EEDrawList;
|
||||
for ( ; DrawList != NULL; DrawList = DrawList->Pnext )
|
||||
{
|
||||
if(DrawList->Type() != DRAW_SHEET_STRUCT_TYPE) continue;
|
||||
/* Examen de la Sheet */
|
||||
SheetLabel = ((DrawSheetStruct *) DrawList)->m_Label;
|
||||
if (SheetLabel == NULL) continue;
|
||||
if (SheetLabel == (DrawSheetLabelStruct*) DrawStruct)
|
||||
{
|
||||
((DrawSheetStruct *) DrawList)->m_Label =
|
||||
(DrawSheetLabelStruct *)SheetLabel->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
else while( SheetLabel->Pnext )/* Examen de la liste dependante */
|
||||
{
|
||||
NextLabel = (DrawSheetLabelStruct *)SheetLabel->Pnext;
|
||||
if( NextLabel == (DrawSheetLabelStruct*) DrawStruct )
|
||||
{
|
||||
SheetLabel->Pnext = (EDA_BaseStruct *)NextLabel->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
SheetLabel = NextLabel;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
Screen->SetModify();
|
||||
|
||||
if (DrawStruct->Type() == DRAW_PICK_ITEM_STRUCT_TYPE)
|
||||
{
|
||||
PickedList = (DrawPickedStruct *) DrawStruct;
|
||||
while (PickedList)
|
||||
{
|
||||
if (PickedList->m_PickedStruct == Screen->EEDrawList)
|
||||
{
|
||||
Screen->EEDrawList = Screen->EEDrawList->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawList = Screen->EEDrawList;
|
||||
while ( DrawList && DrawList->Pnext)
|
||||
{
|
||||
if (DrawList->Pnext == PickedList->m_PickedStruct)
|
||||
{
|
||||
DrawList->Pnext = DrawList->Pnext->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
DrawList = DrawList->Pnext;
|
||||
}
|
||||
}
|
||||
PickedList = (DrawPickedStruct *)PickedList->Pnext;
|
||||
}
|
||||
}
|
||||
else // structure usuelle */
|
||||
{
|
||||
if (DrawStruct == Screen->EEDrawList)
|
||||
{
|
||||
Screen->EEDrawList = DrawStruct->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawList = Screen->EEDrawList;
|
||||
while (DrawList && DrawList->Pnext)
|
||||
{
|
||||
if (DrawList->Pnext == DrawStruct)
|
||||
{
|
||||
DrawList->Pnext = DrawStruct->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
DrawList = DrawList->Pnext;
|
||||
}
|
||||
}
|
||||
}
|
||||
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.
|
||||
DrawList = Screen->EEDrawList;
|
||||
for( ; DrawList != NULL; DrawList = DrawList->Pnext )
|
||||
{
|
||||
if( DrawList->Type() != DRAW_SHEET_STRUCT_TYPE )
|
||||
continue;
|
||||
|
||||
/* Examen de la Sheet */
|
||||
SheetLabel = ( (DrawSheetStruct*) DrawList )->m_Label;
|
||||
if( SheetLabel == NULL )
|
||||
continue;
|
||||
|
||||
if( SheetLabel == (DrawSheetLabelStruct*) DrawStruct )
|
||||
{
|
||||
( (DrawSheetStruct*) DrawList )->m_Label =
|
||||
(DrawSheetLabelStruct*) SheetLabel->Pnext;
|
||||
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
while( SheetLabel->Pnext ) /* Examen de la liste dependante */
|
||||
{
|
||||
NextLabel = (DrawSheetLabelStruct*) SheetLabel->Pnext;
|
||||
if( NextLabel == (DrawSheetLabelStruct*) DrawStruct )
|
||||
{
|
||||
SheetLabel->Pnext = (EDA_BaseStruct*) NextLabel->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
SheetLabel = NextLabel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if( DrawStruct->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
||||
{
|
||||
PickedList = (DrawPickedStruct*) DrawStruct;
|
||||
while( PickedList )
|
||||
{
|
||||
if( PickedList->m_PickedStruct == Screen->EEDrawList )
|
||||
{
|
||||
Screen->EEDrawList = Screen->EEDrawList->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawList = Screen->EEDrawList;
|
||||
while( DrawList && DrawList->Pnext )
|
||||
{
|
||||
if( DrawList->Pnext == PickedList->m_PickedStruct )
|
||||
{
|
||||
DrawList->Pnext = DrawList->Pnext->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
DrawList = DrawList->Pnext;
|
||||
}
|
||||
}
|
||||
PickedList = (DrawPickedStruct*) PickedList->Pnext;
|
||||
}
|
||||
}
|
||||
else // structure usuelle */
|
||||
{
|
||||
if( DrawStruct == Screen->EEDrawList )
|
||||
{
|
||||
Screen->EEDrawList = DrawStruct->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawList = Screen->EEDrawList;
|
||||
while( DrawList && DrawList->Pnext )
|
||||
{
|
||||
if( DrawList->Pnext == DrawStruct )
|
||||
{
|
||||
DrawList->Pnext = DrawStruct->Pnext;
|
||||
SAFE_DELETE( DrawStruct );
|
||||
return;
|
||||
}
|
||||
DrawList = DrawList->Pnext;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************/
|
||||
void DeleteAllMarkers(int type)
|
||||
void DeleteAllMarkers( int 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;
|
||||
for ( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
|
||||
{
|
||||
for ( DrawStruct = screen->EEDrawList; DrawStruct != NULL; DrawStruct = NextStruct)
|
||||
{
|
||||
NextStruct = DrawStruct->Pnext;
|
||||
if(DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE ) continue;
|
||||
/* Marqueur trouve */
|
||||
Marker = (DrawMarkerStruct * ) DrawStruct;
|
||||
if( Marker->m_Type != type ) continue;
|
||||
/* Suppression du marqueur */
|
||||
EraseStruct( DrawStruct, screen);
|
||||
}
|
||||
}
|
||||
EDA_ScreenList ScreenList;
|
||||
|
||||
for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
|
||||
{
|
||||
for( DrawStruct = screen->EEDrawList; DrawStruct != NULL; DrawStruct = NextStruct )
|
||||
{
|
||||
NextStruct = DrawStruct->Pnext;
|
||||
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
|
||||
continue;
|
||||
|
||||
/* Marqueur trouve */
|
||||
Marker = (DrawMarkerStruct*) DrawStruct;
|
||||
if( Marker->m_Type != type )
|
||||
continue;
|
||||
|
||||
/* Suppression du marqueur */
|
||||
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
|
||||
*/
|
||||
* (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 */
|
||||
if( Affiche && DC)
|
||||
DrawLibraryDrawStruct(panel, DC, LibEntry, 0 , 0, DrawItem, CurrentUnit, g_XorMode);
|
||||
/* Effacement du graphique */
|
||||
if( Affiche && DC )
|
||||
DrawLibraryDrawStruct( panel, DC, LibEntry, 0, 0, DrawItem, CurrentUnit, g_XorMode );
|
||||
|
||||
/* Effacement de la structure en memoire */
|
||||
if( LibEntry ) /* Recherche du predecesseur */
|
||||
{
|
||||
PreviousDrawItem = LibEntry->m_Drawings;
|
||||
/* Effacement de la structure en memoire */
|
||||
if( LibEntry ) /* Recherche du predecesseur */
|
||||
{
|
||||
PreviousDrawItem = LibEntry->m_Drawings;
|
||||
|
||||
/* Cas du 1er symbole graphique = struct a supprimer */
|
||||
if( LibEntry->m_Drawings == DrawItem )
|
||||
{
|
||||
LibEntry->m_Drawings = DrawItem->Next();
|
||||
SAFE_DELETE( DrawItem );
|
||||
}
|
||||
/* Cas du 1er symbole graphique = struct a supprimer */
|
||||
if( LibEntry->m_Drawings == DrawItem )
|
||||
{
|
||||
LibEntry->m_Drawings = DrawItem->Next();
|
||||
SAFE_DELETE( DrawItem );
|
||||
}
|
||||
else /* Cas des autres items */
|
||||
{
|
||||
while( PreviousDrawItem )
|
||||
{
|
||||
if( PreviousDrawItem->Pnext == DrawItem )
|
||||
{
|
||||
PreviousDrawItem->Pnext = DrawItem->Pnext;
|
||||
SAFE_DELETE( DrawItem );
|
||||
break;
|
||||
}
|
||||
PreviousDrawItem = PreviousDrawItem->Next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else /* Cas des autres items */
|
||||
while(PreviousDrawItem)
|
||||
{
|
||||
if(PreviousDrawItem->Pnext == DrawItem)
|
||||
{
|
||||
PreviousDrawItem->Pnext = DrawItem->Pnext;
|
||||
SAFE_DELETE( DrawItem ); break;
|
||||
}
|
||||
PreviousDrawItem = PreviousDrawItem->Next();
|
||||
}
|
||||
}
|
||||
|
||||
else /* Structure non reliee a un composant */
|
||||
{
|
||||
SAFE_DELETE( DrawItem );
|
||||
}
|
||||
else /* Structure non reliee a un composant */
|
||||
{
|
||||
SAFE_DELETE( DrawItem );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
188
eeschema/erc.cpp
188
eeschema/erc.cpp
|
@ -101,16 +101,17 @@ bool DiagErcTableInit; // go to TRUE after DiagErc init
|
|||
*/
|
||||
static int DefaultDiagErc[PIN_NMAX][PIN_NMAX] =
|
||||
{ /* I, O, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */
|
||||
/* I */ { OK, OK, OK, OK, OK, WAR, OK, OK, OK, OK, 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 },
|
||||
/* 3S*/ { OK, WAR, OK, OK, OK, WAR, WAR, ERR, WAR, WAR, WAR },
|
||||
/*Pas*/ { 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 },
|
||||
/* Bi*/ { OK, OK, OK, OK, OK, WAR, OK, WAR, OK, WAR, WAR },
|
||||
/* 3S*/ { OK, WAR, OK, OK, OK, WAR, WAR, ERR, WAR, WAR, WAR },
|
||||
/*Pas*/ { OK, OK, OK, OK, OK, WAR, OK, OK, OK, OK, WAR },
|
||||
/*UnS */ { WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR },
|
||||
/*PwrI*/ { OK, OK, OK, WAR, OK, WAR, OK, OK, OK, OK, ERR },
|
||||
/*PwrO*/ { OK, ERR, WAR, ERR, OK, WAR, OK, ERR, ERR, ERR, WAR },
|
||||
/* OC */ { OK, ERR, OK, WAR, OK, WAR, OK, ERR, OK, OK, WAR },
|
||||
/* OE */ { OK, ERR, WAR, WAR, OK, WAR, OK, ERR, OK, OK, WAR },
|
||||
/*PwrI*/ { OK, OK, OK, WAR, OK, WAR, OK, OK, OK, OK, ERR },
|
||||
/*PwrO*/ { OK, ERR, WAR, ERR, OK, WAR, OK, ERR, ERR, ERR, WAR },
|
||||
/* OC */ { OK, ERR, OK, WAR, OK, WAR, OK, ERR, OK, OK, WAR },
|
||||
/* OE */ { OK, ERR, WAR, WAR, OK, WAR, OK, ERR, OK, OK, WAR },
|
||||
/* NC */ { WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR, WAR }
|
||||
};
|
||||
|
||||
|
@ -124,29 +125,29 @@ static int DefaultDiagErc[PIN_NMAX][PIN_NMAX] =
|
|||
/* Look up table which gives the minimal drive for a pair of connected pins on a net
|
||||
* Initial state of a net is NOC (No Connection)
|
||||
* Can be updated to NET_NC, or NOD (Not Driven) or DRV (DRIven)
|
||||
*
|
||||
*
|
||||
* Can be updated to NET_NC only if the previous state is NOC
|
||||
*
|
||||
*
|
||||
* Nets are OK when their final state is NET_NC or DRV
|
||||
* Nets with the state NOD have no source signal
|
||||
*/
|
||||
static int MinimalReq[PIN_NMAX][PIN_NMAX] =
|
||||
{ /* In, Out, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */
|
||||
/* In*/ { NOD, DRV, DRV, DRV, DRV, DRV, NOD, 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 },
|
||||
/* 3S*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/*Pas*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/*UnS*/ { DRV, 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 },
|
||||
/* Bi*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/* 3S*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/*Pas*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/*UnS*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/*PwrI*/ { NOD, DRV, NOD, NOD, NOD, NOD, NOD, DRV, NOD, NOD, NOC },
|
||||
/*PwrO*/ { DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, DRV, NOC },
|
||||
/* OC*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/* OE*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/* NC*/ { NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC }
|
||||
/* OC*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/* OE*/ { DRV, DRV, DRV, DRV, DRV, DRV, NOD, DRV, DRV, DRV, NOC },
|
||||
/* NC*/ { NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC, NOC }
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*********************************************/
|
||||
void WinEDA_ErcFrame::ReBuildMatrixPanel()
|
||||
/*********************************************/
|
||||
|
@ -174,7 +175,7 @@ void WinEDA_ErcFrame::ReBuildMatrixPanel()
|
|||
|
||||
text_height = text->GetRect().GetHeight();
|
||||
bitmap_size = MAX( bitmap_size, text_height );
|
||||
SAFE_DELETE( text );
|
||||
SAFE_DELETE( text );
|
||||
|
||||
// compute the Y pos interval:
|
||||
BoxMatrixMinSize.y = ( bitmap_size * (PIN_NMAX + 1) ) + 5;
|
||||
|
@ -273,7 +274,7 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
|
|||
ObjetNetListStruct* OldItem;
|
||||
ObjetNetListStruct* StartNet;
|
||||
ObjetNetListStruct* Lim;
|
||||
|
||||
|
||||
int NetNbItems, MinConn;
|
||||
|
||||
if( !DiagErcTableInit )
|
||||
|
@ -324,19 +325,19 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
|
|||
for( NetItemRef = g_TabObjNet; NetItemRef < Lim; NetItemRef++ )
|
||||
NetItemRef->m_FlagOfConnection = (IsConnectType) 0;
|
||||
|
||||
NetNbItems = 0;
|
||||
MinConn = NOC;
|
||||
|
||||
NetNbItems = 0;
|
||||
MinConn = NOC;
|
||||
|
||||
StartNet = OldItem = NetItemRef = g_TabObjNet;
|
||||
|
||||
|
||||
for( ; NetItemRef < Lim; NetItemRef++ )
|
||||
{
|
||||
/* Tst changement de net */
|
||||
if( OldItem->GetNet() != NetItemRef->GetNet() )
|
||||
{
|
||||
MinConn = NOC;
|
||||
NetNbItems = 0;
|
||||
StartNet = NetItemRef;
|
||||
MinConn = NOC;
|
||||
NetNbItems = 0;
|
||||
StartNet = NetItemRef;
|
||||
}
|
||||
|
||||
switch( NetItemRef->m_Type )
|
||||
|
@ -347,8 +348,8 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
|
|||
case NET_LABEL:
|
||||
case NET_BUSLABELMEMBER:
|
||||
case NET_PINLABEL:
|
||||
case NET_GLOBLABEL: //not sure how to handle global labels -- they should be treated like other nets (just global!0
|
||||
case NET_GLOBBUSLABELMEMBER:
|
||||
case NET_GLOBLABEL: //not sure how to handle global labels -- they should be treated like other nets (just global!0
|
||||
case NET_GLOBBUSLABELMEMBER:
|
||||
break;
|
||||
|
||||
case NET_HIERLABEL:
|
||||
|
@ -366,7 +367,7 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
|
|||
|
||||
case NET_PIN:
|
||||
TestOthersItems( m_Parent->DrawPanel, &dc,
|
||||
NetItemRef, StartNet, &NetNbItems, &MinConn );
|
||||
NetItemRef, StartNet, &NetNbItems, &MinConn );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -389,17 +390,18 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
|
|||
if( WriteFichierERC == TRUE )
|
||||
{
|
||||
wxString ErcFullFileName;
|
||||
ErcFullFileName = g_RootSheet->m_AssociatedScreen->m_FileName;
|
||||
ErcFullFileName = g_RootSheet->m_AssociatedScreen->m_FileName;
|
||||
ChangeFileNameExt( ErcFullFileName, wxT( ".erc" ) );
|
||||
|
||||
ErcFullFileName = EDA_FileSelector( _( "ERC file:" ),
|
||||
wxEmptyString, /* Chemin par defaut */
|
||||
ErcFullFileName, /* nom fichier par defaut */
|
||||
wxT( ".erc" ), /* extension par defaut */
|
||||
wxT( "*.erc" ), /* Masque d'affichage */
|
||||
this,
|
||||
wxFD_SAVE,
|
||||
TRUE
|
||||
);
|
||||
wxEmptyString, /* Chemin par defaut */
|
||||
ErcFullFileName, /* nom fichier par defaut */
|
||||
wxT( ".erc" ), /* extension par defaut */
|
||||
wxT( "*.erc" ), /* Masque d'affichage */
|
||||
this,
|
||||
wxFD_SAVE,
|
||||
TRUE
|
||||
);
|
||||
if( ErcFullFileName.IsEmpty() )
|
||||
return;
|
||||
|
||||
|
@ -434,6 +436,7 @@ void WinEDA_ErcFrame::DelERCMarkers( wxCommandEvent& event )
|
|||
{
|
||||
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
|
||||
continue;
|
||||
|
||||
/* Marqueur trouve */
|
||||
Marker = (DrawMarkerStruct*) DrawStruct;
|
||||
if( Marker->m_Type == MARQ_ERC )
|
||||
|
@ -466,7 +469,7 @@ void WinEDA_ErcFrame::ChangeErrorLevel( wxCommandEvent& event )
|
|||
{
|
||||
int id, level, ii, x, y;
|
||||
wxBitmapButton* Butt;
|
||||
const char** new_bitmap_xpm = NULL;
|
||||
const char** new_bitmap_xpm = NULL;
|
||||
wxPoint pos;
|
||||
|
||||
id = event.GetId();
|
||||
|
@ -545,11 +548,11 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
|| (NetItemRef->m_Type == NET_HIERBUSLABELMEMBER) )
|
||||
{
|
||||
Marker->m_Comment.Printf( _( "Warning HLabel %s not connected to SheetLabel" ),
|
||||
NetItemRef->m_Label->GetData() );
|
||||
NetItemRef->m_Label->GetData() );
|
||||
}
|
||||
else
|
||||
Marker->m_Comment.Printf( _( "Warning SheetLabel %s not connected to HLabel" ),
|
||||
NetItemRef->m_Label->GetData() );
|
||||
NetItemRef->m_Label->GetData() );
|
||||
|
||||
if( screen == panel->GetScreen() )
|
||||
RedrawOneStruct( panel, DC, Marker, GR_COPY );
|
||||
|
@ -573,6 +576,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
Marker->m_Comment.Printf(
|
||||
_( "Warning Pin %s not driven (Net %d)" ),
|
||||
MsgPinElectricType[ii], NetItemRef->GetNet() );
|
||||
|
||||
if( screen == panel->GetScreen() )
|
||||
RedrawOneStruct( panel, DC, Marker, GR_COPY );
|
||||
return;
|
||||
|
@ -582,6 +586,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
{
|
||||
Marker->m_Comment.Printf(
|
||||
_( "Warning More than 1 Pin connected to UnConnect symbol" ) );
|
||||
|
||||
if( screen == panel->GetScreen() )
|
||||
RedrawOneStruct( panel, DC, Marker, GR_COPY );
|
||||
return;
|
||||
|
@ -600,10 +605,10 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
}
|
||||
|
||||
Marker->m_Comment.Printf( _(
|
||||
"%s: Pin %s connected to Pin %s (net %d)" ),
|
||||
DiagLevel.GetData(),
|
||||
MsgPinElectricType[ii],
|
||||
MsgPinElectricType[jj], NetItemRef->GetNet() );
|
||||
"%s: Pin %s connected to Pin %s (net %d)" ),
|
||||
DiagLevel.GetData(),
|
||||
MsgPinElectricType[ii],
|
||||
MsgPinElectricType[jj], NetItemRef->GetNet() );
|
||||
|
||||
if( screen == panel->GetScreen() )
|
||||
RedrawOneStruct( panel, DC, Marker, GR_COPY );
|
||||
|
@ -625,12 +630,12 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
{
|
||||
ObjetNetListStruct* NetItemTst;
|
||||
ObjetNetListStruct* Lim;
|
||||
|
||||
|
||||
int ref_elect_type, jj, erc = OK, local_minconn;
|
||||
|
||||
/* Analyse de la table des connexions : */
|
||||
Lim = g_TabObjNet + g_NbrObjNet; // pointe la fin de la liste
|
||||
|
||||
|
||||
ref_elect_type = NetItemRef->m_ElectricalType;
|
||||
|
||||
NetItemTst = netstart;
|
||||
|
@ -644,7 +649,7 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
|
||||
/* Est - on toujours dans le meme 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 */
|
||||
if( (*MinConnexion < NET_NC )
|
||||
&& (local_minconn < NET_NC ) ) /* pin non connect<63>e ou non pilotee */
|
||||
|
@ -666,8 +671,8 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
case NET_HIERBUSLABELMEMBER:
|
||||
case NET_SHEETBUSLABELMEMBER:
|
||||
case NET_SHEETLABEL:
|
||||
case NET_GLOBLABEL:
|
||||
case NET_GLOBBUSLABELMEMBER:
|
||||
case NET_GLOBLABEL:
|
||||
case NET_GLOBBUSLABELMEMBER:
|
||||
case NET_PINLABEL:
|
||||
break;
|
||||
|
||||
|
@ -681,7 +686,7 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
|
||||
if( NetItemTst <= NetItemRef )
|
||||
break;
|
||||
|
||||
|
||||
*NetNbItems += 1;
|
||||
if( erc == OK ) // 1 marqueur par pin maxi
|
||||
{
|
||||
|
@ -712,7 +717,7 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
|
|||
DrawMarkerStruct* Marker;
|
||||
char Line[256];
|
||||
static FILE* OutErc;
|
||||
DrawSheetPath* Sheet;
|
||||
DrawSheetPath* Sheet;
|
||||
wxString msg;
|
||||
|
||||
if( ( OutErc = wxFopen( FullFileName, wxT( "wt" ) ) ) == NULL )
|
||||
|
@ -720,23 +725,26 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
|
|||
|
||||
DateAndTime( Line );
|
||||
msg = _( "ERC control" );
|
||||
|
||||
|
||||
fprintf( OutErc, "%s (%s)\n", CONV_TO_UTF8( msg ), Line );
|
||||
|
||||
EDA_SheetList SheetList( NULL );
|
||||
|
||||
for( Sheet = SheetList.GetFirst(); Sheet != NULL; Sheet = SheetList.GetNext() )
|
||||
{
|
||||
if(Sheet->Last() == g_RootSheet){
|
||||
msg.Printf( _( "\n***** Sheet / (Root) \n" ) );
|
||||
}else{
|
||||
wxString str = Sheet->PathHumanReadable();
|
||||
msg.Printf( _("\n***** Sheet %s\n"), str.GetData() );
|
||||
}
|
||||
|
||||
if( Sheet->Last() == g_RootSheet )
|
||||
{
|
||||
msg.Printf( _( "\n***** Sheet / (Root) \n" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxString str = Sheet->PathHumanReadable();
|
||||
msg.Printf( _( "\n***** Sheet %s\n" ), str.GetData() );
|
||||
}
|
||||
|
||||
fprintf( OutErc, "%s", CONV_TO_UTF8( msg ) );
|
||||
|
||||
DrawStruct = Sheet->LastDrawList();
|
||||
DrawStruct = Sheet->LastDrawList();
|
||||
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext )
|
||||
{
|
||||
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
|
||||
|
@ -746,13 +754,13 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
|
|||
Marker = (DrawMarkerStruct*) DrawStruct;
|
||||
if( Marker->m_Type != MARQ_ERC )
|
||||
continue;
|
||||
|
||||
|
||||
/* Write diag marqueur */
|
||||
msg.Printf( _( "ERC: %s (X= %2.3f inches, Y= %2.3f inches\n" ),
|
||||
Marker->GetComment().GetData(),
|
||||
(float) Marker->m_Pos.x / 1000,
|
||||
(float) Marker->m_Pos.y / 1000 );
|
||||
|
||||
Marker->GetComment().GetData(),
|
||||
(float) Marker->m_Pos.x / 1000,
|
||||
(float) Marker->m_Pos.y / 1000 );
|
||||
|
||||
fprintf( OutErc, "%s", CONV_TO_UTF8( msg ) );
|
||||
}
|
||||
}
|
||||
|
@ -764,18 +772,24 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TestLabel_( ObjetNetListStruct* a, ObjetNetListStruct* b )
|
||||
{
|
||||
int at = a->m_Type;
|
||||
int bt = b->m_Type;
|
||||
if( (at == NET_HIERLABEL || at == NET_HIERBUSLABELMEMBER)
|
||||
&&(bt == NET_SHEETLABEL || bt == NET_SHEETBUSLABELMEMBER) ){
|
||||
if( a->m_SheetList == b->m_SheetListInclude ){
|
||||
return true; //connected!
|
||||
}
|
||||
}
|
||||
return false; //these two are unconnected
|
||||
int at = a->m_Type;
|
||||
int bt = b->m_Type;
|
||||
|
||||
if( (at == NET_HIERLABEL || at == NET_HIERBUSLABELMEMBER)
|
||||
&&(bt == NET_SHEETLABEL || bt == NET_SHEETBUSLABELMEMBER) )
|
||||
{
|
||||
if( a->m_SheetList == b->m_SheetListInclude )
|
||||
{
|
||||
return true; //connected!
|
||||
}
|
||||
}
|
||||
return false; //these two are unconnected
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
void TestLabel( WinEDA_DrawPanel* panel, wxDC* DC,
|
||||
ObjetNetListStruct* NetItemRef, ObjetNetListStruct* StartNet )
|
||||
|
@ -802,18 +816,20 @@ void TestLabel( WinEDA_DrawPanel* panel, wxDC* DC,
|
|||
/* Est - on toujours dans le meme net ? */
|
||||
if( ( NetItemTst == Lim )
|
||||
|| ( NetItemRef->GetNet() != NetItemTst->GetNet() ) )
|
||||
{
|
||||
{
|
||||
/* Fin de netcode trouve */
|
||||
if( erc ){
|
||||
if( erc )
|
||||
{
|
||||
/* GLabel ou SheetLabel orphelin */
|
||||
Diagnose( panel, DC, NetItemRef, NULL, -1, WAR );
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(TestLabel_(NetItemRef, NetItemTst))
|
||||
erc = 0;
|
||||
//same thing, different order.
|
||||
if(TestLabel_(NetItemTst, NetItemRef))
|
||||
erc = 0;
|
||||
if( TestLabel_( NetItemRef, NetItemTst ) )
|
||||
erc = 0;
|
||||
|
||||
//same thing, different order.
|
||||
if( TestLabel_( NetItemTst, NetItemRef ) )
|
||||
erc = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ public:
|
|||
public:
|
||||
EDA_DrawLineStruct( const wxPoint& pos, int layer );
|
||||
~EDA_DrawLineStruct() { }
|
||||
|
||||
|
||||
virtual wxString GetClass() const
|
||||
{
|
||||
return wxT( "EDA_DrawLine" );
|
||||
|
@ -92,19 +92,25 @@ 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,
|
||||
int Color = -1 );
|
||||
|
||||
#if defined(DEBUG)
|
||||
|
||||
#if defined(DEBUG)
|
||||
/**
|
||||
* Function Show
|
||||
* is used to output the object tree, currently for debugging only.
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* of nesting of this object within the overall tree.
|
||||
* @param os The ostream& to output to.
|
||||
*/
|
||||
void Show( int nestLevel, std::ostream& os );
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
@ -129,16 +135,16 @@ public:
|
|||
wxString GetComment();
|
||||
virtual void Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset,
|
||||
int draw_mode, int Color = -1 );
|
||||
#if defined(DEBUG)
|
||||
#if defined(DEBUG)
|
||||
/**
|
||||
* Function Show
|
||||
* is used to output the object tree, currently for debugging only.
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* @param nestLevel An aid to prettier tree indenting, and is the level
|
||||
* of nesting of this object within the overall tree.
|
||||
* @param os The ostream& to output to.
|
||||
*/
|
||||
void Show( int nestLevel, std::ostream& os );
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
@ -177,7 +183,7 @@ public:
|
|||
public:
|
||||
DrawBusEntryStruct( const wxPoint& pos, int shape, int id );
|
||||
~DrawBusEntryStruct() { }
|
||||
|
||||
|
||||
virtual wxString GetClass() const
|
||||
{
|
||||
return wxT( "DrawBusEntry" );
|
||||
|
@ -201,7 +207,7 @@ public:
|
|||
public:
|
||||
DrawPolylineStruct( int layer );
|
||||
~DrawPolylineStruct();
|
||||
|
||||
|
||||
virtual wxString GetClass() const
|
||||
{
|
||||
return wxT( "DrawPolyline" );
|
||||
|
@ -222,7 +228,7 @@ public:
|
|||
public:
|
||||
DrawJunctionStruct( const wxPoint& pos );
|
||||
~DrawJunctionStruct() { }
|
||||
|
||||
|
||||
virtual wxString GetClass() const
|
||||
{
|
||||
return wxT( "DrawJunction" );
|
||||
|
|
|
@ -478,6 +478,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
DrawPanel->MouseToCursorSchema();
|
||||
if( GetScreen()->GetCurItem()->m_Flags == 0 )
|
||||
SaveCopyInUndoList( GetScreen()->GetCurItem(), IS_CHANGED );
|
||||
|
||||
CmpRotationMiroir(
|
||||
(EDA_SchComponentStruct*) GetScreen()->GetCurItem(),
|
||||
&dc, option );
|
||||
|
@ -497,6 +498,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
GetScreen() ) );
|
||||
if( GetScreen()->GetCurItem() == NULL )
|
||||
break;
|
||||
|
||||
EditComponentValue(
|
||||
(EDA_SchComponentStruct*) GetScreen()->GetCurItem(), &dc );
|
||||
break;
|
||||
|
@ -510,6 +512,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
GetScreen() ) );
|
||||
if( GetScreen()->GetCurItem() == NULL )
|
||||
break;
|
||||
|
||||
EditComponentReference(
|
||||
(EDA_SchComponentStruct*) GetScreen()->GetCurItem(), &dc );
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue