dlist cleanups, start of edit component in schematic rework

This commit is contained in:
dickelbeck 2008-11-24 06:53:43 +00:00
parent 4d3d0a8fcc
commit 3ef380f936
152 changed files with 2605 additions and 2712 deletions

View File

@ -1,4 +1,5 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: 3d_class.cpp // Name: 3d_class.cpp
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -37,6 +38,7 @@ S3D_Material::S3D_Material( Struct3D_Master * father, const wxString & name ):
m_Name = name; m_Name = name;
} }
/***********************************/ /***********************************/
void S3D_Material::SetMaterial() void S3D_Material::SetMaterial()
/***********************************/ /***********************************/
@ -53,6 +55,7 @@ void S3D_Material::SetMaterial()
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
} }
/****************************************************/ /****************************************************/
void Struct3D_Master::Copy( Struct3D_Master* pattern ) void Struct3D_Master::Copy( Struct3D_Master* pattern )
/****************************************************/ /****************************************************/
@ -65,6 +68,7 @@ void Struct3D_Master::Copy(Struct3D_Master * pattern)
m_Materials = NULL; m_Materials = NULL;
} }
/***************************************************************/ /***************************************************************/
Struct3D_Master::Struct3D_Master( EDA_BaseStruct* StructFather ) : Struct3D_Master::Struct3D_Master( EDA_BaseStruct* StructFather ) :
EDA_BaseStruct( StructFather, NOT_USED ) EDA_BaseStruct( StructFather, NOT_USED )
@ -85,19 +89,18 @@ S3D_Material * nextmat;
for( ; m_3D_Drawings != NULL; m_3D_Drawings = next ) for( ; m_3D_Drawings != NULL; m_3D_Drawings = next )
{ {
next = (Struct3D_Shape *) m_3D_Drawings->Pnext; next = m_3D_Drawings->Next();
delete m_3D_Drawings; delete m_3D_Drawings;
} }
for( ; m_Materials != NULL; m_Materials = nextmat ) for( ; m_Materials != NULL; m_Materials = nextmat )
{ {
nextmat = (S3D_Material *) m_Materials->Pnext; nextmat = m_Materials->Next();
delete m_Materials; delete m_Materials;
} }
} }
/***************************************************************/ /***************************************************************/
Struct3D_Shape::Struct3D_Shape( EDA_BaseStruct* StructFather ) : Struct3D_Shape::Struct3D_Shape( EDA_BaseStruct* StructFather ) :
EDA_BaseStruct( StructFather, NOT_USED ) EDA_BaseStruct( StructFather, NOT_USED )
@ -116,4 +119,3 @@ Struct3D_Shape:: ~Struct3D_Shape()
delete m_3D_Coord; delete m_3D_Coord;
delete m_3D_CoordIndex; delete m_3D_CoordIndex;
} }

View File

@ -214,7 +214,7 @@ GLuint Pcb3D_GLCanvas::CreateDrawGL_List()
/* draw graphic items */ /* draw graphic items */
EDA_BaseStruct* PtStruct; EDA_BaseStruct* PtStruct;
for( PtStruct = pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( PtStruct = pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
switch( PtStruct->Type() ) switch( PtStruct->Type() )
{ {
@ -466,7 +466,7 @@ void MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
/* Draw pads */ /* Draw pads */
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis
for( ; pad != NULL; pad = (D_PAD*) pad->Pnext ) for( ; pad != NULL; pad = pad->Next() )
{ {
pad->Draw3D( glcanvas ); pad->Draw3D( glcanvas );
} }
@ -477,9 +477,11 @@ void MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
if( g_Parm_3D_Visu.m_Draw3DModule ) if( g_Parm_3D_Visu.m_Draw3DModule )
{ {
glPushMatrix(); glPushMatrix();
glTranslatef( m_Pos.x * g_Parm_3D_Visu.m_BoardScale, glTranslatef( m_Pos.x * g_Parm_3D_Visu.m_BoardScale,
-m_Pos.y * g_Parm_3D_Visu.m_BoardScale, -m_Pos.y * g_Parm_3D_Visu.m_BoardScale,
g_Parm_3D_Visu.m_LayerZcoord[m_Layer] ); g_Parm_3D_Visu.m_LayerZcoord[m_Layer] );
if( m_Orient ) if( m_Orient )
{ {
glRotatef( (double) m_Orient / 10, 0.0, 0.0, 1.0 ); glRotatef( (double) m_Orient / 10, 0.0, 0.0, 1.0 );
@ -491,7 +493,7 @@ void MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
} }
DataScale3D = g_Parm_3D_Visu.m_BoardScale * UNITS3D_TO_UNITSPCB; DataScale3D = g_Parm_3D_Visu.m_BoardScale * UNITS3D_TO_UNITSPCB;
for( ; Struct3D != NULL; Struct3D = (Struct3D_Master*) Struct3D->Pnext ) for( ; Struct3D != NULL; Struct3D = Struct3D->Next() )
{ {
if( !Struct3D->m_Shape3DName.IsEmpty() ) if( !Struct3D->m_Shape3DName.IsEmpty() )
{ {
@ -507,7 +509,7 @@ void MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
{ {
EDA_BaseStruct* Struct = m_Drawings; EDA_BaseStruct* Struct = m_Drawings;
glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis
for( ; Struct != NULL; Struct = Struct->Pnext ) for( ; Struct != NULL; Struct = Struct->Next() )
{ {
switch( Struct->Type() ) switch( Struct->Type() )
{ {

View File

@ -108,8 +108,7 @@ int Struct3D_Master:: ReadMaterial( FILE* file, int* LineNum )
mat_name = CONV_FROM_UTF8( text ); mat_name = CONV_FROM_UTF8( text );
if( stricmp( command, "USE" ) == 0 ) if( stricmp( command, "USE" ) == 0 )
{ {
for( material = m_Materials; material != NULL; for( material = m_Materials; material; material = material->Next() )
material = (S3D_Material*) material->Pnext )
{ {
if( material->m_Name == mat_name ) if( material->m_Name == mat_name )
{ {
@ -126,8 +125,8 @@ int Struct3D_Master:: ReadMaterial( FILE* file, int* LineNum )
{ {
material = new S3D_Material( this, mat_name ); material = new S3D_Material( this, mat_name );
material->Pnext = m_Materials; Insert( material );
m_Materials = material;
while( GetLine( file, line, LineNum, 512 ) ) while( GetLine( file, line, LineNum, 512 ) )
{ {
text = strtok( line, " \t\n\r" ); text = strtok( line, " \t\n\r" );

View File

@ -9,7 +9,7 @@
#include "base_struct.h" #include "base_struct.h"
/* 3D modeler units -> PCB units conversion scale: /* 3D modeler units -> PCB units conversion scale:
1 "3D unit modeler" = 1 unit wings3d = 2,54 mm = 0.1 inch */ * 1 "3D unit modeler" = 1 unit wings3d = 2,54 mm = 0.1 inch */
#define UNITS3D_TO_UNITSPCB 1000 #define UNITS3D_TO_UNITSPCB 1000
@ -21,8 +21,7 @@ class S3D_Color /* This is a 3D color (R, G, G) 3 floats range 0 to 1.0*/
public: public:
double m_Red, m_Green, m_Blue; double m_Red, m_Green, m_Blue;
public: public:
S3D_Color() S3D_Color() {
{
m_Red = m_Green = m_Blue = 0; m_Red = m_Green = m_Blue = 0;
} }
}; };
@ -48,9 +47,14 @@ public:
public: public:
S3D_Material( Struct3D_Master * father, const wxString &name ); S3D_Material( Struct3D_Master * father, const wxString &name );
S3D_Material* Next() const { return (S3D_Material*) Pnext; }
S3D_Material* Back() const { return (S3D_Material*) Pback; }
void SetMaterial(); void SetMaterial();
}; };
/*******************************************/ /*******************************************/
class Struct3D_Master : public EDA_BaseStruct class Struct3D_Master : public EDA_BaseStruct
/*******************************************/ /*******************************************/
@ -69,6 +73,15 @@ public:
Struct3D_Master( EDA_BaseStruct * StructFather ); Struct3D_Master( EDA_BaseStruct * StructFather );
~Struct3D_Master(); ~Struct3D_Master();
Struct3D_Master* Next() const { return (Struct3D_Master*) Pnext; }
Struct3D_Master* Back() const { return (Struct3D_Master*) Pback; }
void Insert( S3D_Material* aMaterial )
{
aMaterial->SetNext( m_Materials );
m_Materials = aMaterial;
}
void Copy( Struct3D_Master* pattern ); void Copy( Struct3D_Master* pattern );
int ReadData(); int ReadData();
int ReadMaterial( FILE* file, int* LineNum ); int ReadMaterial( FILE* file, int* LineNum );
@ -77,7 +90,6 @@ public:
int ReadAppearance( FILE* file, int* LineNum ); int ReadAppearance( FILE* file, int* LineNum );
int ReadGeometry( FILE* file, int* LineNum ); int ReadGeometry( FILE* file, int* LineNum );
void Set_Object_Coords( S3D_Vertex* coord, int nbcoord ); void Set_Object_Coords( S3D_Vertex* coord, int nbcoord );
}; };
@ -96,18 +108,21 @@ public:
Struct3D_Shape( EDA_BaseStruct * StructFather ); Struct3D_Shape( EDA_BaseStruct * StructFather );
~Struct3D_Shape(); ~Struct3D_Shape();
Struct3D_Shape* Next() const { return (Struct3D_Shape*) Pnext; }
Struct3D_Shape* Back() const { return (Struct3D_Shape*) Pback; }
int ReadData( FILE* file, int* LineNum ); int ReadData( FILE* file, int* LineNum );
}; };
/*****************************************************************/ /*****************************************************************/
/* Classe pour afficher et editer un Vertex (triplet de valeurs),*/ /* Classe pour afficher et editer un Vertex (triplet de valeurs),*/
/* en INCHES ou MM ou sans unites */ /* en INCHES ou MM ou sans unites */
/*****************************************************************/ /*****************************************************************/
/* internal_unit is the internal unit number by inch: /* internal_unit is the internal unit number by inch:
- 1000 for EESchema * - 1000 for EESchema
- 10000 for PcbNew * - 10000 for PcbNew
*/ */
class WinEDA_VertexCtrl class WinEDA_VertexCtrl
{ {
@ -118,6 +133,7 @@ private:
wxStaticText* m_Text; wxStaticText* m_Text;
public: public:
// Constructor and destructor // Constructor and destructor
WinEDA_VertexCtrl( wxWindow * parent, const wxString &title, WinEDA_VertexCtrl( wxWindow * parent, const wxString &title,
wxBoxSizer * BoxSizer, wxBoxSizer * BoxSizer,
@ -132,5 +148,4 @@ public:
}; };
#endif /* STRUCT_3D_H */ #endif /* STRUCT_3D_H */

View File

@ -5,6 +5,30 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2008-Nov-23 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+all
+ Made _protected_ EDA_BaseStruct's:
EDA_BaseStruct* Pnext; /* Linked list: Link (next struct) */
EDA_BaseStruct* Pback; /* Linked list: Link (previous struct) */
EDA_BaseStruct* m_Parent; /* Linked list: Link (parent struct) */
EDA_BaseStruct* m_Son; /* Linked list: Link (son struct) */
+ Split TRACK::Draw() out for SEGVIA
+ Added dlist.h & dlist.cpp for DLIST<> template. All the _inline_ list manipulation
code throughout the package is rediculous. I don't mind list traversal, only
list manipulation. DLIST<> templates can be used to consolidate reliable
list manipulation operations and get this code out of the mainline.
These functions are shared/inherited for any derivation, so only one copy exists
in the final program image. To use, simply declare e.g. DLIST<D_PAD> or similar.
See dlist.h, template class DLIST for function comments.
+ added EDA_BaseStruct::m_List to assist in debugging list manipulation functions.
+eeschema
Started on the edit component in schematic editor. It is not complete and
breaks the usefulness of the editor at this moment. Do not build this version
if you want to fully use eeschema. I will get something working in another day,
even if it is the old editor.
2008-Nov-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> 2008-Nov-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================ ================================================================================
++pcbnew ++pcbnew

View File

@ -16,6 +16,7 @@ set(COMMON_SRCS
copy_to_clipboard.cpp copy_to_clipboard.cpp
dcsvg.cpp dcsvg.cpp
displlst.cpp displlst.cpp
dlist.cpp
drawtxt.cpp drawtxt.cpp
edaappl.cpp edaappl.cpp
eda_dde.cpp eda_dde.cpp

View File

@ -446,14 +446,14 @@ void BASE_SCREEN::ClearUndoRedoList()
while( m_UndoList ) while( m_UndoList )
{ {
nextitem = m_UndoList->Pnext; nextitem = m_UndoList->Next();
delete m_UndoList; delete m_UndoList;
m_UndoList = nextitem; m_UndoList = nextitem;
} }
while( m_RedoList ) while( m_RedoList )
{ {
nextitem = m_RedoList->Pnext; nextitem = m_RedoList->Next();
delete m_RedoList; delete m_RedoList;
m_RedoList = nextitem; m_RedoList = nextitem;
} }
@ -469,32 +469,33 @@ void BASE_SCREEN::AddItemToUndoList( EDA_BaseStruct* newitem )
*/ */
{ {
int ii; int ii;
EDA_BaseStruct* item, * nextitem; EDA_BaseStruct* item;
EDA_BaseStruct* nextitem;
if( newitem == NULL ) if( newitem == NULL )
return; return;
newitem->Pnext = m_UndoList; newitem->SetNext( m_UndoList );
m_UndoList = newitem; m_UndoList = newitem;
/* Free first items, if count max reached */ /* Free first items, if count max reached */
for( ii = 0, item = m_UndoList; ii < m_UndoRedoCountMax; ii++ ) for( ii = 0, item = m_UndoList; ii < m_UndoRedoCountMax; ii++ )
{ {
if( item->Pnext == NULL ) if( item->Next() == NULL )
return; return;
item = item->Pnext; item = item->Next();
} }
if( item == NULL ) if( item == NULL )
return; return;
nextitem = item->Pnext; nextitem = item->Next();
item->Pnext = NULL; // Set end of chain item->SetNext( NULL ); // Set end of chain
// Delete the extra items // Delete the extra items
for( item = nextitem; item != NULL; item = nextitem ) for( item = nextitem; item != NULL; item = nextitem )
{ {
nextitem = item->Pnext; nextitem = item->Next();
delete item; delete item;
} }
} }
@ -510,26 +511,26 @@ void BASE_SCREEN::AddItemToRedoList( EDA_BaseStruct* newitem )
if( newitem == NULL ) if( newitem == NULL )
return; return;
newitem->Pnext = m_RedoList; newitem->SetNext( m_RedoList );
m_RedoList = newitem; m_RedoList = newitem;
/* Free first items, if count max reached */ /* Free first items, if count max reached */
for( ii = 0, item = m_RedoList; ii < m_UndoRedoCountMax; ii++ ) for( ii = 0, item = m_RedoList; ii < m_UndoRedoCountMax; ii++ )
{ {
if( item->Pnext == NULL ) if( item->Next() == NULL )
break; break;
item = item->Pnext; item = item->Next();
} }
if( item == NULL ) if( item == NULL )
return; return;
nextitem = item->Pnext; nextitem = item->Next();
item->Pnext = NULL; // Set end of chain item->SetNext( NULL ); // Set end of chain
// Delete the extra items // Delete the extra items
for( item = nextitem; item != NULL; item = nextitem ) for( item = nextitem; item != NULL; item = nextitem )
{ {
nextitem = item->Pnext; nextitem = item->Next();
delete item; delete item;
} }
} }
@ -542,7 +543,7 @@ EDA_BaseStruct* BASE_SCREEN::GetItemFromUndoList()
EDA_BaseStruct* item = m_UndoList; EDA_BaseStruct* item = m_UndoList;
if( item ) if( item )
m_UndoList = item->Pnext; m_UndoList = item->Next();
return item; return item;
} }
@ -554,7 +555,7 @@ EDA_BaseStruct* BASE_SCREEN::GetItemFromRedoList()
EDA_BaseStruct* item = m_RedoList; EDA_BaseStruct* item = m_RedoList;
if( item ) if( item )
m_RedoList = item->Pnext; m_RedoList = item->Next();
return item; return item;
} }

View File

@ -43,15 +43,16 @@ void EDA_BaseStruct::InitVars()
/********************************************/ /********************************************/
{ {
m_StructType = TYPE_NOT_INIT; m_StructType = TYPE_NOT_INIT;
Pnext = NULL; /* Linked list: Link (next struct) */ Pnext = NULL; // Linked list: Link (next struct)
Pback = NULL; /* Linked list: Link (previous struct) */ Pback = NULL; // Linked list: Link (previous struct)
m_Parent = NULL; /* Linked list: Link (parent struct) */ m_Parent = NULL; // Linked list: Link (parent struct)
m_Son = NULL; /* Linked list: Link (son struct) */ m_Son = NULL; // Linked list: Link (son struct)
m_Image = NULL; /* Link to an image copy for undelete or abort command */ m_List = NULL; // I am not on any list yet
m_Flags = 0; /* flags for editions and other */ m_Image = NULL; // Link to an image copy for undelete or abort command
m_Flags = 0; // flags for editions and other
m_TimeStamp = 0; // Time stamp used for logical links m_TimeStamp = 0; // Time stamp used for logical links
m_Status = 0; m_Status = 0;
m_Selected = 0; /* Used by block commands, and selective editing */ m_Selected = 0; // Used by block commands, and selective editing
} }

View File

@ -254,7 +254,7 @@ void InitBlockLocateDatas( WinEDA_DrawPanel* Panel, const wxPoint& startpos )
screen->BlockLocate.m_State = STATE_BLOCK_INIT; screen->BlockLocate.m_State = STATE_BLOCK_INIT;
screen->BlockLocate.SetOrigin( startpos ); screen->BlockLocate.SetOrigin( startpos );
screen->BlockLocate.SetSize( wxSize( 0, 0 ) ); screen->BlockLocate.SetSize( wxSize( 0, 0 ) );
screen->BlockLocate.Pnext = NULL; screen->BlockLocate.SetNext( NULL );
screen->BlockLocate.m_BlockDrawStruct = NULL; screen->BlockLocate.m_BlockDrawStruct = NULL;
Panel->ManageCurseur = DrawAndSizingBlockOutlines; Panel->ManageCurseur = DrawAndSizingBlockOutlines;
Panel->ForceCloseManageCurseur = AbortBlockCurrentCommand; Panel->ForceCloseManageCurseur = AbortBlockCurrentCommand;

View File

@ -128,7 +128,7 @@ void DHEAD::Insert( EDA_BaseStruct* aNewElement, EDA_BaseStruct* aAfterMe )
void DHEAD::Remove( EDA_BaseStruct* aElement ) void DHEAD::Remove( EDA_BaseStruct* aElement )
{ {
wxASSERT( aElement ) wxASSERT( aElement );
wxASSERT( aElement->GetList() == this ); wxASSERT( aElement->GetList() == this );
if( aElement->Next() ) if( aElement->Next() )

View File

@ -13,6 +13,7 @@ OBJECTS= \
common_plot_functions.o\ common_plot_functions.o\
common_plotPS_functions.o\ common_plotPS_functions.o\
common_plotHPGL_functions.o\ common_plotHPGL_functions.o\
dlist.o \
hotkeys_basic.o\ hotkeys_basic.o\
drawtxt.o \ drawtxt.o \
about_kicad.o\ about_kicad.o\

View File

@ -36,7 +36,8 @@ set(EESCHEMA_SRCS
# dialog_cmp_graphic_properties.cpp # dialog_cmp_graphic_properties.cpp
dialog_create_component.cpp dialog_create_component.cpp
# dialog_edit_component_in_lib.cpp # dialog_edit_component_in_lib.cpp
# dialog_edit_component_in_schematic.cpp dialog_edit_component_in_schematic_fbp.cpp
dialog_edit_component_in_schematic.cpp
# dialog_edit_label.cpp # dialog_edit_label.cpp
dialog_eeschema_config.cpp dialog_eeschema_config.cpp
dialog_erc.cpp dialog_erc.cpp

View File

@ -64,7 +64,7 @@ void ReAnnotatePowerSymbolsOnly( void )
sheet = SheetList.GetNext() ) sheet = SheetList.GetNext() )
{ {
EDA_BaseStruct* DrawList = sheet->LastDrawList(); EDA_BaseStruct* DrawList = sheet->LastDrawList();
for( ; DrawList != NULL; DrawList = DrawList->Pnext ) for( ; DrawList != NULL; DrawList = DrawList->Next() )
{ {
if( DrawList->Type() != TYPE_SCH_COMPONENT ) if( DrawList->Type() != TYPE_SCH_COMPONENT )
continue; continue;
@ -207,7 +207,7 @@ void WinEDA_SchematicFrame::DeleteAnnotation( bool aCurrentSheetOnly, bool aRedr
while( screen ) while( screen )
{ {
strct = screen->EEDrawList; strct = screen->EEDrawList;
for( ; strct; strct = strct->Pnext ) for( ; strct; strct = strct->Next() )
{ {
if( strct->Type() == TYPE_SCH_COMPONENT ) if( strct->Type() == TYPE_SCH_COMPONENT )
{ {
@ -348,7 +348,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetPath* sheet )
SCH_COMPONENT* DrawLibItem; SCH_COMPONENT* DrawLibItem;
EDA_LibComponentStruct* Entry; EDA_LibComponentStruct* Entry;
for( ; DrawList; DrawList = DrawList->Pnext ) for( ; DrawList; DrawList = DrawList->Next() )
{ {
if( DrawList->Type() == TYPE_SCH_COMPONENT ) if( DrawList->Type() == TYPE_SCH_COMPONENT )
{ {

View File

@ -316,7 +316,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
if( block->m_Command == BLOCK_ABORT ) if( block->m_Command == BLOCK_ABORT )
{ /* clear struct.m_Flags */ { /* clear struct.m_Flags */
EDA_BaseStruct* Struct; EDA_BaseStruct* Struct;
for( Struct = GetScreen()->EEDrawList; Struct != NULL; Struct = Struct->Pnext ) for( Struct = GetScreen()->EEDrawList; Struct != NULL; Struct = Struct->Next() )
Struct->m_Flags = 0; Struct->m_Flags = 0;
} }
@ -502,7 +502,7 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
(SCH_ITEM*)PickedList->m_PickedStruct, (SCH_ITEM*)PickedList->m_PickedStruct,
PtBlock->m_MoveVector.x, PtBlock->m_MoveVector.x,
PtBlock->m_MoveVector.y ); PtBlock->m_MoveVector.y );
PickedList = (DrawPickedStruct*) PickedList->Pnext; PickedList = (DrawPickedStruct*) PickedList->Next();
} }
} }
else else
@ -535,7 +535,7 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
(SCH_ITEM*)PickedList->m_PickedStruct, (SCH_ITEM*)PickedList->m_PickedStruct,
PtBlock->m_MoveVector.x, PtBlock->m_MoveVector.x,
PtBlock->m_MoveVector.y ); PtBlock->m_MoveVector.y );
PickedList = (DrawPickedStruct*) PickedList->Pnext; PickedList = (DrawPickedStruct*) PickedList->Next();
} }
} }
else else
@ -729,7 +729,7 @@ void MirrorOneStruct( SCH_ITEM * DrawStruct, wxPoint& Center )
{ {
MirrorYPoint( DrawSheetLabel->m_Pos, Center ); MirrorYPoint( DrawSheetLabel->m_Pos, Center );
DrawSheetLabel->m_Edge = DrawSheetLabel->m_Edge ? 0 : 1; DrawSheetLabel->m_Edge = DrawSheetLabel->m_Edge ? 0 : 1;
DrawSheetLabel = (Hierarchical_PIN_Sheet_Struct*) DrawSheetLabel->Pnext; DrawSheetLabel = (Hierarchical_PIN_Sheet_Struct*) DrawSheetLabel->Next();
} }
break; break;
@ -852,7 +852,7 @@ static SCH_ITEM * CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* sc
} }
SetStructFather( Struct, screen ); SetStructFather( Struct, screen );
PickedList = (DrawPickedStruct*) PickedList->Pnext; PickedList = (DrawPickedStruct*) PickedList->Next();
} }
RedrawStructList( panel, DC, NewDrawStruct, GR_DEFAULT_DRAWMODE ); RedrawStructList( panel, DC, NewDrawStruct, GR_DEFAULT_DRAWMODE );
@ -860,7 +860,7 @@ static SCH_ITEM * CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* sc
PickedList = (DrawPickedStruct*) NewDrawStruct; PickedList = (DrawPickedStruct*) NewDrawStruct;
while( PickedList ) while( PickedList )
{ {
PickedList->m_PickedStruct->Pnext = screen->EEDrawList; PickedList->m_PickedStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = PickedList->m_PickedStruct; screen->EEDrawList = PickedList->m_PickedStruct;
PickedList = PickedList->Next(); PickedList = PickedList->Next();
} }
@ -888,7 +888,7 @@ static SCH_ITEM * CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* sc
{ {
DrawSheetStruct* sheet = (DrawSheetStruct*) NewDrawStruct; DrawSheetStruct* sheet = (DrawSheetStruct*) NewDrawStruct;
sheet->m_TimeStamp = GetTimeStamp(); sheet->m_TimeStamp = GetTimeStamp();
sheet->m_Son = NULL; sheet->SetSon( NULL );
break; break;
} }
@ -901,7 +901,7 @@ static SCH_ITEM * CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* sc
RedrawOneStruct( panel, DC, NewDrawStruct, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( panel, DC, NewDrawStruct, GR_DEFAULT_DRAWMODE );
SetStructFather( NewDrawStruct, screen ); SetStructFather( NewDrawStruct, screen );
NewDrawStruct->Pnext = screen->EEDrawList; NewDrawStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = NewDrawStruct; screen->EEDrawList = NewDrawStruct;
} }
@ -934,7 +934,7 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM * DrawStruct )
{ {
/* 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( (SCH_ITEM*) ( (Hierarchical_PIN_Sheet_Struct*) DrawStruct )->m_Parent, IS_CHANGED ); frame->SaveCopyInUndoList( (SCH_ITEM*) ( (Hierarchical_PIN_Sheet_Struct*) DrawStruct )->GetParent(), IS_CHANGED );
frame->DeleteSheetLabel( DC ? true : false , (Hierarchical_PIN_Sheet_Struct*) DrawStruct ); frame->DeleteSheetLabel( DC ? true : false , (Hierarchical_PIN_Sheet_Struct*) DrawStruct );
return; return;
} }
@ -948,7 +948,8 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM * DrawStruct )
SCH_ITEM * item = cur->m_PickedStruct; SCH_ITEM * item = cur->m_PickedStruct;
screen->RemoveFromDrawList( item ); screen->RemoveFromDrawList( item );
panel->PostDirtyRect( item->GetBoundingBox() ); panel->PostDirtyRect( item->GetBoundingBox() );
item->Pnext = item->Pback = NULL; item->SetNext( 0 );
item->SetBack( 0 );
item->m_Flags = IS_DELETED; item->m_Flags = IS_DELETED;
} }
@ -962,7 +963,9 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM * DrawStruct )
panel->PostDirtyRect( DrawStruct->GetBoundingBox() ); panel->PostDirtyRect( DrawStruct->GetBoundingBox() );
/* Unlink the structure */ /* Unlink the structure */
DrawStruct->Pnext = DrawStruct->Pback = NULL; // Only one struct -> no link DrawStruct->SetNext( 0 );
DrawStruct->SetBack( 0 ); // Only one struct -> no link
if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE ) if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE )
{ {
frame->SaveCopyInUndoList( DrawStruct, IS_DELETED ); // Currently In TEST frame->SaveCopyInUndoList( DrawStruct, IS_DELETED ); // Currently In TEST
@ -1005,14 +1008,14 @@ SCH_ITEM * SaveStructListForPaste( SCH_ITEM * DrawStruct )
EDA_BaseStruct* item = g_BlockSaveDataList, * next_item; EDA_BaseStruct* item = g_BlockSaveDataList, * next_item;
while( item ) while( item )
{ {
next_item = item->Pnext; next_item = item->Next();
delete item; delete item;
item = next_item; item = next_item;
} }
} }
g_BlockSaveDataList = DrawStructCopy; g_BlockSaveDataList = DrawStructCopy;
DrawStructCopy->m_Parent = NULL; DrawStructCopy->SetParent( NULL );
return DrawStructCopy; return DrawStructCopy;
} }
@ -1051,14 +1054,14 @@ void WinEDA_SchematicFrame::PasteStruct( wxDC* DC )
( (SCH_COMPONENT*) Struct )->ClearAnnotation(NULL); ( (SCH_COMPONENT*) Struct )->ClearAnnotation(NULL);
SetStructFather( Struct, GetScreen() ); SetStructFather( Struct, GetScreen() );
} }
PickedList = (DrawPickedStruct*) PickedList->Pnext; PickedList = (DrawPickedStruct*) PickedList->Next();
} }
RedrawStructList( DrawPanel, DC, DrawStruct, GR_DEFAULT_DRAWMODE ); RedrawStructList( DrawPanel, DC, DrawStruct, GR_DEFAULT_DRAWMODE );
for( PickedList = (DrawPickedStruct*) DrawStruct; PickedList != NULL; ) for( PickedList = (DrawPickedStruct*) DrawStruct; PickedList != NULL; )
{ {
SCH_ITEM * Struct = PickedList->m_PickedStruct; SCH_ITEM * Struct = PickedList->m_PickedStruct;
Struct->Pnext = GetScreen()->EEDrawList; Struct->SetNext( GetScreen()->EEDrawList );
SetStructFather( Struct, GetScreen() ); SetStructFather( Struct, GetScreen() );
GetScreen()->EEDrawList = Struct; GetScreen()->EEDrawList = Struct;
PickedList = PickedList->Next(); PickedList = PickedList->Next();
@ -1076,7 +1079,7 @@ void WinEDA_SchematicFrame::PasteStruct( wxDC* DC )
} }
SetStructFather( DrawStruct, GetScreen() ); SetStructFather( DrawStruct, GetScreen() );
RedrawOneStruct( DrawPanel, DC, DrawStruct, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( DrawPanel, DC, DrawStruct, GR_DEFAULT_DRAWMODE );
DrawStruct->Pnext = GetScreen()->EEDrawList; DrawStruct->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = DrawStruct; GetScreen()->EEDrawList = DrawStruct;
SaveCopyInUndoList( DrawStruct, IS_NEW ); SaveCopyInUndoList( DrawStruct, IS_NEW );
} }
@ -1343,7 +1346,7 @@ SCH_ITEM * DuplicateStruct( SCH_ITEM * DrawStruct )
if( NewDrawStruct == NULL ) if( NewDrawStruct == NULL )
NewDrawStruct = NewPickedItem; NewDrawStruct = NewPickedItem;
if( LastPickedItem ) if( LastPickedItem )
LastPickedItem->Pnext = NewPickedItem; LastPickedItem->SetNext( NewPickedItem );
LastPickedItem = NewPickedItem; LastPickedItem = NewPickedItem;
NewPickedItem->m_PickedStruct = NewPickedItem->m_PickedStruct =
DuplicateStruct( PickedList->m_PickedStruct ); DuplicateStruct( PickedList->m_PickedStruct );
@ -1469,7 +1472,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
{ {
if( SLabel->Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE ) if( SLabel->Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE )
AddPickedItem( screen, SLabel->m_Pos ); AddPickedItem( screen, SLabel->m_Pos );
SLabel = (Hierarchical_PIN_Sheet_Struct*) SLabel->Pnext; SLabel = (Hierarchical_PIN_Sheet_Struct*) SLabel->Next();
} }
} }
@ -1495,7 +1498,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
while( DrawStructs ) while( DrawStructs )
{ {
Struct = DrawStructs->m_PickedStruct; Struct = DrawStructs->m_PickedStruct;
DrawStructs = (DrawPickedStruct*) DrawStructs->Pnext; DrawStructs = (DrawPickedStruct*) DrawStructs->Next();
switch( Struct->Type() ) switch( Struct->Type() )
{ {
@ -1537,8 +1540,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
if( STRUCT->m_Pos != position ) if( STRUCT->m_Pos != position )
break; break;
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
break; break;
@ -1550,8 +1552,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
if( STRUCT->m_Start == position ) if( STRUCT->m_Start == position )
{ {
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT;
Struct->m_Flags &= ~STARTPOINT; Struct->m_Flags &= ~STARTPOINT;
@ -1559,8 +1560,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
else if( STRUCT->m_End == position ) else if( STRUCT->m_End == position )
{ {
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT;
Struct->m_Flags &= ~ENDPOINT; Struct->m_Flags &= ~ENDPOINT;
@ -1581,8 +1581,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
if( STRUCT->m_Pos != position ) if( STRUCT->m_Pos != position )
break; break;
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
Struct->m_Flags |= SELECTED; Struct->m_Flags |= SELECTED;
break; break;
@ -1596,8 +1595,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
if( STRUCT->m_Pos != position ) if( STRUCT->m_Pos != position )
break; break;
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
Struct->m_Flags |= SELECTED; Struct->m_Flags |= SELECTED;
break; break;
@ -1622,8 +1620,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
if( STRUCT->m_Pos != position ) if( STRUCT->m_Pos != position )
break; break;
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
Struct->m_Flags |= SELECTED; Struct->m_Flags |= SELECTED;
break; break;
@ -1636,8 +1633,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
if( STRUCT->m_Pos != position ) if( STRUCT->m_Pos != position )
break; break;
DrawStructs = new DrawPickedStruct( Struct ); DrawStructs = new DrawPickedStruct( Struct );
DrawStructs->Pnext = DrawStructs->SetNext( screen->BlockLocate.m_BlockDrawStruct );
(DrawPickedStruct*) screen->BlockLocate.m_BlockDrawStruct;
screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs; screen->BlockLocate.m_BlockDrawStruct = (EDA_BaseStruct*) DrawStructs;
Struct->m_Flags |= SELECTED; Struct->m_Flags |= SELECTED;
break; break;

View File

@ -517,7 +517,7 @@ void CopyMarkedItems( EDA_LibComponentStruct* LibEntry, wxPoint offset )
item->m_Selected = 0; item->m_Selected = 0;
LibEDA_BaseStruct* newitem = CopyDrawEntryStruct( NULL, item ); LibEDA_BaseStruct* newitem = CopyDrawEntryStruct( NULL, item );
newitem->m_Selected = IS_SELECTED; newitem->m_Selected = IS_SELECTED;
newitem->Pnext = LibEntry->m_Drawings; newitem->SetNext( LibEntry->m_Drawings );
LibEntry->m_Drawings = newitem; LibEntry->m_Drawings = newitem;
} }

View File

@ -301,7 +301,7 @@ int BuildComponentsListFromSchematic( ListComponent* aList )
itemCount++; itemCount++;
DrawLibItem = (SCH_COMPONENT*) SchItem; DrawLibItem = (SCH_COMPONENT*) SchItem;
DrawLibItem->m_Parent = sheet->LastScreen(); DrawLibItem->SetParent( sheet->LastScreen() );
if( aList ) if( aList )
{ {
aList->m_Comp = DrawLibItem; aList->m_Comp = DrawLibItem;
@ -376,7 +376,7 @@ static int GenListeGLabels( ListLabel* list )
list++; list++;
} }
itemCount++; itemCount++;
SheetLabel = (Hierarchical_PIN_Sheet_Struct*) (SheetLabel->Pnext); SheetLabel = SheetLabel->Next();
} }
} }
break; break;
@ -384,7 +384,7 @@ static int GenListeGLabels( ListLabel* list )
default: default:
break; break;
} }
DrawList = DrawList->Pnext; DrawList = DrawList->Next();
} }
} }
@ -750,13 +750,13 @@ int WinEDA_Build_BOM_Frame::PrintComponentsListByRef( FILE* f,
if( CompactForm ) if( CompactForm )
{ {
fprintf( f, "%c%s", s_ExportSeparatorSymbol, CONV_TO_UTF8( msg ) ); fprintf( f, "%c%s", s_ExportSeparatorSymbol, CONV_TO_UTF8( msg ) );
msg = m_Parent->GetXYSheetReferences( (BASE_SCREEN*)DrawLibItem->m_Parent, DrawLibItem->m_Pos ); msg = m_Parent->GetXYSheetReferences( (BASE_SCREEN*)DrawLibItem->GetParent(), DrawLibItem->m_Pos );
fprintf( f, "%c%s)", s_ExportSeparatorSymbol, CONV_TO_UTF8( msg ) ); fprintf( f, "%c%s)", s_ExportSeparatorSymbol, CONV_TO_UTF8( msg ) );
} }
else else
{ {
fprintf( f, " (Sheet %s)", CONV_TO_UTF8( msg ) ); fprintf( f, " (Sheet %s)", CONV_TO_UTF8( msg ) );
msg = m_Parent->GetXYSheetReferences( (BASE_SCREEN*)DrawLibItem->m_Parent, DrawLibItem->m_Pos ); msg = m_Parent->GetXYSheetReferences( (BASE_SCREEN*)DrawLibItem->GetParent(), DrawLibItem->m_Pos );
fprintf( f, " (loc %s)", CONV_TO_UTF8( msg ) ); fprintf( f, " (loc %s)", CONV_TO_UTF8( msg ) );
} }
} }
@ -837,7 +837,7 @@ int WinEDA_Build_BOM_Frame::PrintComponentsListByVal( FILE* f,
{ {
msg = aList[ii].m_SheetList.PathHumanReadable(); msg = aList[ii].m_SheetList.PathHumanReadable();
fprintf( f, " (Sheet %s)", CONV_TO_UTF8( msg ) ); fprintf( f, " (Sheet %s)", CONV_TO_UTF8( msg ) );
msg = m_Parent->GetXYSheetReferences( (BASE_SCREEN*)DrawLibItem->m_Parent, DrawLibItem->m_Pos ); msg = m_Parent->GetXYSheetReferences( (BASE_SCREEN*)DrawLibItem->GetParent(), DrawLibItem->m_Pos );
fprintf( f, " (loc %s)", CONV_TO_UTF8( msg ) ); fprintf( f, " (loc %s)", CONV_TO_UTF8( msg ) );
} }

View File

@ -50,7 +50,7 @@ SCH_ITEM* SCH_SCREEN::ExtractWires( bool CreateCopy )
case DRAW_JUNCTION_STRUCT_TYPE: case DRAW_JUNCTION_STRUCT_TYPE:
case DRAW_SEGMENT_STRUCT_TYPE: case DRAW_SEGMENT_STRUCT_TYPE:
RemoveFromDrawList( item ); RemoveFromDrawList( item );
item->Pnext = List; item->SetNext( List );
List = item; List = item;
if( CreateCopy ) if( CreateCopy )
{ {
@ -58,7 +58,7 @@ SCH_ITEM* SCH_SCREEN::ExtractWires( bool CreateCopy )
new_item = ( (DrawJunctionStruct*) item )->GenCopy(); new_item = ( (DrawJunctionStruct*) item )->GenCopy();
else else
new_item = ( (EDA_DrawLineStruct*) item )->GenCopy(); new_item = ( (EDA_DrawLineStruct*) item )->GenCopy();
new_item->Pnext = EEDrawList; new_item->SetNext( EEDrawList );
EEDrawList = new_item; EEDrawList = new_item;
} }
break; break;
@ -79,7 +79,8 @@ static void RestoreOldWires( SCH_SCREEN* screen )
/* Replace the wires in screen->EEDrawList by s_OldWiresList wires. /* Replace the wires in screen->EEDrawList by s_OldWiresList wires.
*/ */
{ {
SCH_ITEM* item, * next_item; SCH_ITEM* item;
SCH_ITEM* next_item;
for( item = screen->EEDrawList; item != NULL; item = next_item ) for( item = screen->EEDrawList; item != NULL; item = next_item )
{ {
@ -101,7 +102,8 @@ static void RestoreOldWires( SCH_SCREEN* screen )
while( s_OldWiresList ) while( s_OldWiresList )
{ {
next_item = s_OldWiresList->Next(); next_item = s_OldWiresList->Next();
s_OldWiresList->Pnext = screen->EEDrawList,
s_OldWiresList->SetNext( screen->EEDrawList );
screen->EEDrawList = s_OldWiresList; screen->EEDrawList = s_OldWiresList;
s_OldWiresList = next_item; s_OldWiresList = next_item;
} }
@ -166,8 +168,8 @@ void WinEDA_SchematicFrame::BeginSegment( wxDC* DC, int type )
{ {
nextsegment = newsegment->GenCopy(); nextsegment = newsegment->GenCopy();
nextsegment->m_Flags = IS_NEW; nextsegment->m_Flags = IS_NEW;
newsegment->Pnext = nextsegment; newsegment->SetNext( nextsegment );
nextsegment->Pback = newsegment; nextsegment->SetBack( newsegment );
} }
GetScreen()->SetCurItem( newsegment ); GetScreen()->SetCurItem( newsegment );
DrawPanel->ManageCurseur = Segment_in_Ghost; DrawPanel->ManageCurseur = Segment_in_Ghost;
@ -176,7 +178,7 @@ void WinEDA_SchematicFrame::BeginSegment( wxDC* DC, int type )
} }
else /* Trace en cours: Placement d'un point supplementaire */ else /* Trace en cours: Placement d'un point supplementaire */
{ {
nextsegment = (EDA_DrawLineStruct*) oldsegment->Pnext; nextsegment = oldsegment->Next();
if( !g_HVLines ) if( !g_HVLines )
{ /* if only one segment is needed and the current is has len = 0, do not create a new one*/ { /* if only one segment is needed and the current is has len = 0, do not create a new one*/
if( oldsegment->IsNull() ) if( oldsegment->IsNull() )
@ -198,7 +200,7 @@ void WinEDA_SchematicFrame::BeginSegment( wxDC* DC, int type )
} }
/* Placement en liste generale */ /* Placement en liste generale */
oldsegment->Pnext = GetScreen()->EEDrawList; oldsegment->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = oldsegment; GetScreen()->EEDrawList = oldsegment;
DrawPanel->CursorOff( DC ); // Erase schematic cursor DrawPanel->CursorOff( DC ); // Erase schematic cursor
RedrawOneStruct( DrawPanel, DC, oldsegment, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( DrawPanel, DC, oldsegment, GR_DEFAULT_DRAWMODE );
@ -209,10 +211,10 @@ void WinEDA_SchematicFrame::BeginSegment( wxDC* DC, int type )
{ {
newsegment = nextsegment->GenCopy(); newsegment = nextsegment->GenCopy();
nextsegment->m_Start = newsegment->m_End; nextsegment->m_Start = newsegment->m_End;
nextsegment->Pnext = NULL; nextsegment->SetNext( NULL );
nextsegment->Pback = newsegment; nextsegment->SetBack( newsegment );
newsegment->Pnext = nextsegment; newsegment->SetNext( nextsegment );
newsegment->Pback = NULL; newsegment->SetBack( NULL );
} }
else else
{ {
@ -256,16 +258,16 @@ void WinEDA_SchematicFrame::EndSegment( wxDC* DC )
lastsegment = firstsegment; lastsegment = firstsegment;
while( lastsegment ) while( lastsegment )
{ {
EDA_DrawLineStruct* nextsegment = (EDA_DrawLineStruct*) lastsegment->Pnext; EDA_DrawLineStruct* nextsegment = lastsegment->Next();
if( lastsegment->IsNull() ) if( lastsegment->IsNull() )
{ {
EDA_DrawLineStruct* previous_segment = (EDA_DrawLineStruct*) lastsegment->Pback; EDA_DrawLineStruct* previous_segment = lastsegment->Back();
if( firstsegment == lastsegment ) if( firstsegment == lastsegment )
firstsegment = nextsegment; firstsegment = nextsegment;
if( nextsegment ) if( nextsegment )
nextsegment->Pback = NULL; nextsegment->SetBack( NULL );
if( previous_segment ) if( previous_segment )
previous_segment->Pnext = nextsegment; previous_segment->SetNext( nextsegment );
delete lastsegment; delete lastsegment;
} }
lastsegment = nextsegment; lastsegment = nextsegment;
@ -276,8 +278,8 @@ void WinEDA_SchematicFrame::EndSegment( wxDC* DC )
while( segment ) while( segment )
{ {
lastsegment = segment; lastsegment = segment;
segment = (EDA_DrawLineStruct*) segment->Pnext; segment = segment->Next();
lastsegment->Pnext = GetScreen()->EEDrawList; lastsegment->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = lastsegment; GetScreen()->EEDrawList = lastsegment;
} }
@ -311,7 +313,7 @@ void WinEDA_SchematicFrame::EndSegment( wxDC* DC )
g_ItemToRepeat = segment; g_ItemToRepeat = segment;
} }
segment->m_Flags = 0; segment->m_Flags = 0;
segment = (EDA_DrawLineStruct*) segment->Pnext; segment = segment->Next();
} }
// Automatic place of a junction on the end point, if needed // Automatic place of a junction on the end point, if needed
@ -348,7 +350,7 @@ void WinEDA_SchematicFrame::EndSegment( wxDC* DC )
break; break;
} }
item = item->Pnext; item = item->Next();
} }
@ -386,7 +388,7 @@ static void Segment_in_Ghost( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
{ {
if( !segment->IsNull() ) // Redraw if segment lengtht != 0 if( !segment->IsNull() ) // Redraw if segment lengtht != 0
RedrawOneStruct( panel, DC, segment, g_XorMode, color ); RedrawOneStruct( panel, DC, segment, g_XorMode, color );
segment = (EDA_DrawLineStruct*) segment->Pnext; segment = segment->Next();
} }
} }
@ -403,7 +405,7 @@ static void Segment_in_Ghost( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
{ {
if( !segment->IsNull() ) // Redraw if segment lengtht != 0 if( !segment->IsNull() ) // Redraw if segment lengtht != 0
RedrawOneStruct( panel, DC, segment, g_XorMode, color ); RedrawOneStruct( panel, DC, segment, g_XorMode, color );
segment = (EDA_DrawLineStruct*) segment->Pnext; segment = segment->Next();
} }
} }
@ -416,7 +418,7 @@ static void ComputeBreakPoint( EDA_DrawLineStruct* segment, const wxPoint& new_p
* with the 2 segments kept H or V only * with the 2 segments kept H or V only
*/ */
{ {
EDA_DrawLineStruct* nextsegment = (EDA_DrawLineStruct*) segment->Pnext; EDA_DrawLineStruct* nextsegment = segment->Next();
wxPoint middle_position = new_pos; wxPoint middle_position = new_pos;
if( nextsegment == NULL ) if( nextsegment == NULL )
@ -543,7 +545,7 @@ DrawJunctionStruct* WinEDA_SchematicFrame::CreateNewJunctionStruct(
RedrawOneStruct( DrawPanel, DC, NewJunction, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( DrawPanel, DC, NewJunction, GR_DEFAULT_DRAWMODE );
DrawPanel->CursorOn( DC ); // Display schematic cursor DrawPanel->CursorOn( DC ); // Display schematic cursor
NewJunction->Pnext = GetScreen()->EEDrawList; NewJunction->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = NewJunction; GetScreen()->EEDrawList = NewJunction;
GetScreen()->SetModify(); GetScreen()->SetModify();
if( PutInUndoList ) if( PutInUndoList )
@ -568,7 +570,7 @@ DrawNoConnectStruct* WinEDA_SchematicFrame::CreateNewNoConnectStruct( wxDC* DC )
RedrawOneStruct( DrawPanel, DC, NewNoConnect, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( DrawPanel, DC, NewNoConnect, GR_DEFAULT_DRAWMODE );
DrawPanel->CursorOn( DC ); // Display schematic cursor DrawPanel->CursorOn( DC ); // Display schematic cursor
NewNoConnect->Pnext = GetScreen()->EEDrawList; NewNoConnect->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = NewNoConnect; GetScreen()->EEDrawList = NewNoConnect;
GetScreen()->SetModify(); GetScreen()->SetModify();
SaveCopyInUndoList( NewNoConnect, IS_NEW ); SaveCopyInUndoList( NewNoConnect, IS_NEW );
@ -729,7 +731,7 @@ void WinEDA_SchematicFrame::RepeatDrawItem( wxDC* DC )
if( g_ItemToRepeat ) if( g_ItemToRepeat )
{ {
g_ItemToRepeat->Pnext = GetScreen()->EEDrawList; g_ItemToRepeat->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = g_ItemToRepeat; GetScreen()->EEDrawList = g_ItemToRepeat;
TestDanglingEnds( GetScreen()->EEDrawList, NULL ); TestDanglingEnds( GetScreen()->EEDrawList, NULL );
RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, GR_DEFAULT_DRAWMODE );

View File

@ -146,7 +146,7 @@ DrawSheetStruct* DrawSheetStruct::GenCopy()
newitem->m_Size = m_Size; newitem->m_Size = m_Size;
newitem->m_Parent = m_Parent; newitem->SetParent( m_Parent );
newitem->m_TimeStamp = GetTimeStamp(); newitem->m_TimeStamp = GetTimeStamp();
newitem->m_FileName = m_FileName; newitem->m_FileName = m_FileName;
@ -161,15 +161,15 @@ DrawSheetStruct* DrawSheetStruct::GenCopy()
if( label ) if( label )
{ {
Slabel = newitem->m_Label = label->GenCopy(); Slabel = newitem->m_Label = label->GenCopy();
Slabel->m_Parent = newitem; Slabel->SetParent( newitem );
label = label->Next(); label = label->Next();
} }
while( label ) while( label )
{ {
Slabel->Pnext = label->GenCopy(); Slabel->SetNext( label->GenCopy() );
Slabel = (Hierarchical_PIN_Sheet_Struct*) Slabel->Pnext; Slabel = Slabel->Next();
Slabel->m_Parent = newitem; Slabel->SetParent( newitem );
label = label->Next(); label = label->Next();
} }
@ -202,14 +202,14 @@ void DrawSheetStruct::SwapData( DrawSheetStruct* copyitem )
Hierarchical_PIN_Sheet_Struct* label = m_Label; Hierarchical_PIN_Sheet_Struct* label = m_Label;
while( label ) while( label )
{ {
label->m_Parent = this; label->SetParent( this );
label = label->Next(); label = label->Next();
} }
label = copyitem->m_Label; label = copyitem->m_Label;
while( label ) while( label )
{ {
label->m_Parent = copyitem; label->SetParent( copyitem );
label = label->Next(); label = label->Next();
} }
} }
@ -257,13 +257,15 @@ void DrawSheetStruct::CleanupSheet( WinEDA_SchematicFrame* aFrame, bool aRedraw
EDA_BaseStruct* DrawStruct = m_AssociatedScreen->EEDrawList; EDA_BaseStruct* DrawStruct = m_AssociatedScreen->EEDrawList;
SCH_HIERLABEL* HLabel = NULL; SCH_HIERLABEL* HLabel = NULL;
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext ) for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
{ {
if( DrawStruct->Type() != TYPE_SCH_HIERLABEL ) if( DrawStruct->Type() != TYPE_SCH_HIERLABEL )
continue; continue;
HLabel = (SCH_HIERLABEL*) DrawStruct; HLabel = (SCH_HIERLABEL*) DrawStruct;
if( Pinsheet->m_Text.CmpNoCase( HLabel->m_Text ) == 0 ) if( Pinsheet->m_Text.CmpNoCase( HLabel->m_Text ) == 0 )
break; // Found! break; // Found!
HLabel = NULL; HLabel = NULL;
} }
@ -375,7 +377,7 @@ int DrawSheetStruct::ComponentCount()
if( m_AssociatedScreen ) if( m_AssociatedScreen )
{ {
EDA_BaseStruct* bs; EDA_BaseStruct* bs;
for( bs = m_AssociatedScreen->EEDrawList; bs != NULL; bs = bs->Pnext ) for( bs = m_AssociatedScreen->EEDrawList; bs != NULL; bs = bs->Next() )
{ {
if( bs->Type() == TYPE_SCH_COMPONENT ) if( bs->Type() == TYPE_SCH_COMPONENT )
{ {
@ -416,7 +418,7 @@ bool DrawSheetStruct::SearchHierarchy( wxString filename, SCH_SCREEN** screen )
if( ss->SearchHierarchy( filename, screen ) ) if( ss->SearchHierarchy( filename, screen ) )
return true; return true;
} }
strct = strct->Pnext; strct = strct->Next();
} }
} }
return false; return false;
@ -446,7 +448,7 @@ bool DrawSheetStruct::LocatePathOfScreen( SCH_SCREEN* screen, DrawSheetPath* lis
if( ss->LocatePathOfScreen( screen, list ) ) if( ss->LocatePathOfScreen( screen, list ) )
return true; return true;
} }
strct = strct->Pnext; strct = strct->Next();
} }
list->Pop(); list->Pop();
@ -488,7 +490,7 @@ bool DrawSheetStruct::Load( WinEDA_SchematicFrame* frame )
if( !sheetstruct->Load( frame ) ) if( !sheetstruct->Load( frame ) )
success = false; success = false;
} }
bs = bs->Pnext; bs = bs->Next();
} }
} }
} }
@ -506,7 +508,7 @@ int DrawSheetStruct::CountSheets()
if( m_AssociatedScreen ) if( m_AssociatedScreen )
{ {
EDA_BaseStruct* strct = m_AssociatedScreen->EEDrawList; EDA_BaseStruct* strct = m_AssociatedScreen->EEDrawList;
for( ; strct; strct = strct->Pnext ) for( ; strct; strct = strct->Next() )
{ {
if( strct->Type() == DRAW_SHEET_STRUCT_TYPE ) if( strct->Type() == DRAW_SHEET_STRUCT_TYPE )
{ {
@ -787,7 +789,7 @@ void DrawSheetPath::UpdateAllScreenReferences()
component->GetField(REFERENCE)->m_Text = component->GetRef( this ); component->GetField(REFERENCE)->m_Text = component->GetRef( this );
component->m_Multi = component->GetUnitSelection( this ); component->m_Multi = component->GetUnitSelection( this );
} }
t = t->Pnext; t = t->Next();
} }
} }

View File

@ -196,7 +196,8 @@ EDA_LibComponentStruct::~EDA_LibComponentStruct()
field = Fields; Fields = NULL; field = Fields; Fields = NULL;
while( field ) while( field )
{ {
TempField = field; field = (LibDrawField*) field->Pnext; TempField = field;
field = field->Next();
SAFE_DELETE( TempField ); SAFE_DELETE( TempField );
} }

View File

@ -28,7 +28,7 @@ void SetStructFather( EDA_BaseStruct* Struct, BASE_SCREEN* Screen )
case DRAW_SHEET_STRUCT_TYPE: case DRAW_SHEET_STRUCT_TYPE:
case DRAW_MARKER_STRUCT_TYPE: case DRAW_MARKER_STRUCT_TYPE:
case DRAW_NOCONNECT_STRUCT_TYPE: case DRAW_NOCONNECT_STRUCT_TYPE:
Struct->m_Parent = Screen; Struct->SetParent( Screen );
break; break;
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE: case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
@ -138,9 +138,9 @@ void SCH_SCREEN::RemoveFromDrawList( SCH_ITEM * DrawStruct )
EDA_BaseStruct* DrawList = EEDrawList; EDA_BaseStruct* DrawList = EEDrawList;
while( DrawList && DrawList->Next() ) while( DrawList && DrawList->Next() )
{ {
if( DrawList->Pnext == DrawStruct ) if( DrawList->Next() == DrawStruct )
{ {
DrawList->Pnext = DrawList->Pnext->Pnext; DrawList->SetNext( DrawList->Next()->Next() );
break; break;
} }
DrawList = DrawList->Next(); DrawList = DrawList->Next();
@ -170,7 +170,7 @@ bool SCH_SCREEN::CheckIfOnDrawList( SCH_ITEM* st )
void SCH_SCREEN::AddToDrawList( SCH_ITEM* st ) void SCH_SCREEN::AddToDrawList( SCH_ITEM* st )
/**************************************************************/ /**************************************************************/
{ //simple function to add to the head of the drawlist. { //simple function to add to the head of the drawlist.
st->Pnext = EEDrawList; st->SetNext( EEDrawList );
EEDrawList = st; EEDrawList = st;
} }
@ -262,7 +262,7 @@ void EDA_ScreenList::BuildScreenList( EDA_BaseStruct* s )
{ {
BuildScreenList( strct ); BuildScreenList( strct );
} }
strct = strct->Pnext; strct = strct->Next();
} }
} }
} }
@ -335,7 +335,7 @@ void EDA_SheetList::BuildSheetList( DrawSheetStruct* sheet )
DrawSheetStruct* sht = (DrawSheetStruct*) strct; DrawSheetStruct* sht = (DrawSheetStruct*) strct;
BuildSheetList( sht ); BuildSheetList( sht );
} }
strct = strct->Pnext; strct = strct->Next();
} }
} }
m_currList.Pop(); m_currList.Pop();

View File

@ -193,10 +193,15 @@ public:
public: public:
LibDrawPin(); LibDrawPin();
~LibDrawPin() { } ~LibDrawPin() { }
LibDrawPin* Next() const { return (LibDrawPin*) Pnext; }
LibDrawPin* Back() const { return (LibDrawPin*) Pback; }
virtual wxString GetClass() const virtual wxString GetClass() const
{ {
return wxT( "LibDrawPin" ); return wxT( "LibDrawPin" );
} }
/** /**
* Function Save * Function Save
* writes the data structures for this object out to a FILE in "*.brd" format. * writes the data structures for this object out to a FILE in "*.brd" format.
@ -451,8 +456,8 @@ public:
public: public:
LibDrawField* Next() { return (LibDrawField*) Pnext; } LibDrawField* Next() const { return (LibDrawField*) Pnext; }
LibDrawField* Prev() { return (LibDrawField*) Pback; } LibDrawField* Back() const { return (LibDrawField*) Pback; }
LibDrawField( int idfield = 2 ); LibDrawField( int idfield = 2 );

View File

@ -167,14 +167,14 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
wrapper->m_PickedStruct = segment->GenCopy(); wrapper->m_PickedStruct = segment->GenCopy();
wrapper->m_Image = segment; wrapper->m_Image = segment;
wrapper->m_PickedStruct->m_Image = segment; wrapper->m_PickedStruct->m_Image = segment;
wrapper->Pnext = List; wrapper->SetNext( List );
List = wrapper; List = wrapper;
} }
NewSegment = segment->GenCopy(); NewSegment = segment->GenCopy();
NewSegment->m_Start = breakpoint; NewSegment->m_Start = breakpoint;
segment->m_End = NewSegment->m_Start; segment->m_End = NewSegment->m_Start;
NewSegment->Pnext = segment->Pnext; NewSegment->SetNext( segment->Next() );
segment->Pnext = NewSegment; segment->SetNext( NewSegment );
DrawList = NewSegment; DrawList = NewSegment;
if( PutInUndoList ) if( PutInUndoList )
{ {
@ -182,7 +182,7 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
wrapper->m_Flags = IS_NEW; wrapper->m_Flags = IS_NEW;
wrapper->m_Image = NewSegment; wrapper->m_Image = NewSegment;
wrapper->Pnext = List; wrapper->SetNext( List );
List = wrapper; List = wrapper;
} }
break; break;
@ -196,7 +196,7 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
break; break;
} }
DrawList = DrawList->Pnext; DrawList = DrawList->Next();
} }
return List; return List;

View File

@ -72,10 +72,10 @@ SCH_COMPONENT::SCH_COMPONENT( const SCH_COMPONENT& aTemplate ) :
Pnext = NULL; Pnext = NULL;
m_Son = NULL; m_Son = NULL;
// Re-parent the fields, which before this were aTemplate's parent // Re-parent the fields, which before this had aTemplate as parent
for( int i=0; i<GetFieldCount(); ++i ) for( int i=0; i<GetFieldCount(); ++i )
{ {
GetField( i )->m_Parent = this; GetField( i )->SetParent( this );
} }
} }
@ -424,11 +424,11 @@ void SCH_COMPONENT::SwapData( SCH_COMPONENT* copyitem )
// (after swap(), m_Parent member does not point to the right parent): // (after swap(), m_Parent member does not point to the right parent):
for( int ii = 0; ii < copyitem->GetFieldCount(); ++ii ) for( int ii = 0; ii < copyitem->GetFieldCount(); ++ii )
{ {
copyitem->GetField(ii)->m_Parent = copyitem; copyitem->GetField(ii)->SetParent( copyitem );
} }
for( int ii = 0; ii < GetFieldCount(); ++ii ) for( int ii = 0; ii < GetFieldCount(); ++ii )
{ {
GetField(ii)->m_Parent = this; GetField(ii)->SetParent( this );
} }
} }

View File

@ -39,7 +39,11 @@ struct Error
} }
}; };
/* Fields identifiers */
/**
* Enum NumFieldType
* is the numbered set of all fields a SCH_COMPONENT can hold
*/
enum NumFieldType { enum NumFieldType {
REFERENCE = 0, ///< Field Reference of part, i.e. "IC21" REFERENCE = 0, ///< Field Reference of part, i.e. "IC21"
VALUE, ///< Field Value of part, i.e. "3.3K" VALUE, ///< Field Value of part, i.e. "3.3K"
@ -59,31 +63,36 @@ enum NumFieldType {
}; };
/// A container for several SCH_CMP_FIELD items
typedef std::vector<SCH_CMP_FIELD> SCH_CMP_FIELDS;
/** /**
* Class SCH_COMPONENT * Class SCH_COMPONENT
* describes a real schematic component * describes a real schematic component
*/ */
class SCH_COMPONENT : public SCH_ITEM class SCH_COMPONENT : public SCH_ITEM
{ {
friend class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC;
public: public:
int m_Multi; /* In multi unit chip - which unit to draw. */ int m_Multi; ///< In multi unit chip - which unit to draw.
wxPoint m_Pos; wxPoint m_Pos;
wxString m_ChipName; /* Key to look for in the library, i.e. "74LS00". */ wxString m_ChipName; ///< Key to look for in the library, i.e. "74LS00".
wxString m_PrefixString; /* C, R, U, Q etc - the first character which typically indicates what the component is. wxString m_PrefixString; /* C, R, U, Q etc - the first character which typically indicates what the component is.
* determined, upon placement, from the library component. * determined, upon placement, from the library component.
* determined, upon file load, by the first non-digits in the reference fields. */ * determined, upon file load, by the first non-digits in the reference fields.
*/
int m_Convert; /* Handle mutiple shape (for instance De Morgan conversion) */ int m_Convert; /* Handle mutiple shape (for instance De Morgan conversion) */
int m_Transform[2][2]; /* The rotation/mirror transformation matrix. */ int m_Transform[2][2]; /* The rotation/mirror transformation matrix. */
private: private:
/** how many fields are fixed, or automatic and pre-made in the SCH_COMPONENT class */ SCH_CMP_FIELDS m_Fields; ///< variable length list of fields
typedef std::vector<SCH_CMP_FIELD> SCH_CMP_FIELDS;
SCH_CMP_FIELDS m_Fields;
/* Hierarchical references. /* Hierarchical references.
@ -200,11 +209,13 @@ public:
void Place( WinEDA_SchematicFrame* frame, wxDC* DC ); void Place( WinEDA_SchematicFrame* frame, wxDC* DC );
// returns a unique ID, in the form of a path. // returns a unique ID, in the form of a path.
wxString GetPath( DrawSheetPath* sheet ); wxString GetPath( DrawSheetPath* sheet );
//returns the reference, for the given sheet path.
/**
* Function GetRef
* returns the reference, for the given sheet path.
*/
const wxString GetRef( DrawSheetPath* sheet ); const wxString GetRef( DrawSheetPath* sheet );
// Set the reference, for the given sheet path. // Set the reference, for the given sheet path.

View File

@ -54,7 +54,7 @@ SCH_ITEM * WinEDA_SchematicFrame:: SchematicGeneralLocateAndDisplay( bool Includ
{ {
case DRAW_PART_TEXT_STRUCT_TYPE: case DRAW_PART_TEXT_STRUCT_TYPE:
case COMPONENT_FIELD_DRAW_TYPE: case COMPONENT_FIELD_DRAW_TYPE:
LibItem = (SCH_COMPONENT*) DrawStruct->m_Parent; LibItem = (SCH_COMPONENT*) DrawStruct->GetParent();
SendMessageToPCBNEW( DrawStruct,LibItem ); SendMessageToPCBNEW( DrawStruct,LibItem );
break; break;
@ -168,7 +168,7 @@ SCH_ITEM* WinEDA_SchematicFrame:: SchematicGeneralLocateAndDisplay( const wxPoin
if( DrawStruct ) if( DrawStruct )
{ {
SCH_CMP_FIELD* Field = (SCH_CMP_FIELD*) DrawStruct; SCH_CMP_FIELD* Field = (SCH_CMP_FIELD*) DrawStruct;
LibItem = (SCH_COMPONENT*) Field->m_Parent; LibItem = (SCH_COMPONENT*) Field->GetParent();
LibItem->Display_Infos( this ); LibItem->Display_Infos( this );
return DrawStruct; return DrawStruct;

View File

@ -314,7 +314,7 @@ DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList )
DanglingEndHandle* StartList = NULL, * item, * lastitem = NULL; DanglingEndHandle* StartList = NULL, * item, * lastitem = NULL;
EDA_BaseStruct* DrawItem; EDA_BaseStruct* DrawItem;
for( DrawItem = DrawList; DrawItem != NULL; DrawItem = DrawItem->Pnext ) for( DrawItem = DrawList; DrawItem != NULL; DrawItem = DrawItem->Next() )
{ {
switch( DrawItem->Type() ) switch( DrawItem->Type() )
{ {

View File

@ -147,7 +147,7 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
/* 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->SetNext( PickedList );
PickedList = PickedItem; PickedList = PickedItem;
DelStruct = DelStruct->Next(); DelStruct = DelStruct->Next();
screen->EEDrawList = DelStruct; screen->EEDrawList = DelStruct;
@ -194,7 +194,7 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
EDA_BaseStruct* removed_struct; EDA_BaseStruct* removed_struct;
for( removed_struct = GetScreen()->EEDrawList; for( removed_struct = GetScreen()->EEDrawList;
removed_struct != NULL; removed_struct != NULL;
removed_struct = removed_struct->Pnext ) removed_struct = removed_struct->Next() )
{ {
if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 ) if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 )
continue; continue;
@ -214,7 +214,7 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
* and now is not connected, the wire can be deleted */ * and now is not connected, the wire can be deleted */
for( removed_struct = GetScreen()->EEDrawList; for( removed_struct = GetScreen()->EEDrawList;
removed_struct != NULL; removed_struct != NULL;
removed_struct = removed_struct->Pnext ) removed_struct = removed_struct->Next() )
{ {
if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 ) if( (removed_struct->m_Flags & STRUCT_DELETED) == 0 )
continue; continue;
@ -236,7 +236,7 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
/* 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->SetNext( PickedList );
PickedList = PickedItem; PickedList = PickedItem;
DelStruct = GetScreen()->EEDrawList; DelStruct = GetScreen()->EEDrawList;
} }
@ -264,7 +264,7 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
/* 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->SetNext( PickedList );
PickedList = PickedItem; PickedList = PickedItem;
} }
#undef JUNCTION #undef JUNCTION
@ -292,7 +292,7 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
/* 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->SetNext( PickedList );
PickedList = PickedItem; PickedList = PickedItem;
} }
} }
@ -398,7 +398,7 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
* accessible par la liste globale directement */ * 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->Next() )
{ {
if( DrawList->Type() != DRAW_SHEET_STRUCT_TYPE ) if( DrawList->Type() != DRAW_SHEET_STRUCT_TYPE )
continue; continue;
@ -411,19 +411,19 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
if( SheetLabel == (Hierarchical_PIN_Sheet_Struct*) DrawStruct ) if( SheetLabel == (Hierarchical_PIN_Sheet_Struct*) DrawStruct )
{ {
( (DrawSheetStruct*) DrawList )->m_Label = ( (DrawSheetStruct*) DrawList )->m_Label =
(Hierarchical_PIN_Sheet_Struct*) SheetLabel->Pnext; (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Next();
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
return; return;
} }
else else
{ {
while( SheetLabel->Pnext ) /* Examen de la liste dependante */ while( SheetLabel->Next() ) /* Examen de la liste dependante */
{ {
NextLabel = (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Pnext; NextLabel = (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Next();
if( NextLabel == (Hierarchical_PIN_Sheet_Struct*) DrawStruct ) if( NextLabel == (Hierarchical_PIN_Sheet_Struct*) DrawStruct )
{ {
SheetLabel->Pnext = (EDA_BaseStruct*) NextLabel->Pnext; SheetLabel->SetNext( (EDA_BaseStruct*) NextLabel->Next() );
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
return; return;
} }
@ -448,18 +448,18 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
else else
{ {
DrawList = Screen->EEDrawList; DrawList = Screen->EEDrawList;
while( DrawList && DrawList->Pnext ) while( DrawList && DrawList->Next() )
{ {
if( DrawList->Pnext == PickedList->m_PickedStruct ) if( DrawList->Next() == PickedList->m_PickedStruct )
{ {
DrawList->Pnext = DrawList->Pnext->Pnext; DrawList->SetNext( DrawList->Next()->Next() );
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
return; return;
} }
DrawList = DrawList->Pnext; DrawList = DrawList->Next();
} }
} }
PickedList = (DrawPickedStruct*) PickedList->Pnext; PickedList = (DrawPickedStruct*) PickedList->Next();
} }
} }
else // structure usuelle */ else // structure usuelle */
@ -472,15 +472,15 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
else else
{ {
DrawList = Screen->EEDrawList; DrawList = Screen->EEDrawList;
while( DrawList && DrawList->Pnext ) while( DrawList && DrawList->Next() )
{ {
if( DrawList->Pnext == DrawStruct ) if( DrawList->Next() == DrawStruct )
{ {
DrawList->Pnext = DrawStruct->Pnext; DrawList->SetNext( DrawStruct->Next() );
SAFE_DELETE( DrawStruct ); SAFE_DELETE( DrawStruct );
return; return;
} }
DrawList = DrawList->Pnext; DrawList = DrawList->Next();
} }
} }
} }
@ -557,9 +557,9 @@ void DeleteOneLibraryDrawStruct( WinEDA_DrawPanel* panel, wxDC* DC,
{ {
while( PreviousDrawItem ) while( PreviousDrawItem )
{ {
if( PreviousDrawItem->Pnext == DrawItem ) if( PreviousDrawItem->Next() == DrawItem )
{ {
PreviousDrawItem->Pnext = DrawItem->Pnext; PreviousDrawItem->SetNext( DrawItem->Next() );
SAFE_DELETE( DrawItem ); SAFE_DELETE( DrawItem );
break; break;
} }

View File

@ -18,8 +18,8 @@ void DeleteSubHierarchy(DrawSheetStruct * FirstSheet, bool confirm_deletion)
/**************************************************************************/ /**************************************************************************/
/* Free (delete) all schematic data (include the sub hierarchy sheets ) /* Free (delete) all schematic data (include the sub hierarchy sheets )
for the hierarchical sheet FirstSheet * for the hierarchical sheet FirstSheet
FirstSheet is not deleted. * FirstSheet is not deleted.
*/ */
{ {
EDA_BaseStruct* DrawStruct; EDA_BaseStruct* DrawStruct;
@ -27,7 +27,8 @@ EDA_BaseStruct *EEDrawList;
WinEDA_SchematicFrame* frame = g_EDA_Appl->m_SchematicFrame; WinEDA_SchematicFrame* frame = g_EDA_Appl->m_SchematicFrame;
wxString msg; wxString msg;
if( FirstSheet == NULL ) return; if( FirstSheet == NULL )
return;
if( FirstSheet->Type() != DRAW_SHEET_STRUCT_TYPE ) if( FirstSheet->Type() != DRAW_SHEET_STRUCT_TYPE )
{ {
@ -49,53 +50,61 @@ wxString msg;
} }
/* free the sub hierarchy */ /* free the sub hierarchy */
if(FirstSheet->m_AssociatedScreen){ if( FirstSheet->m_AssociatedScreen )
{
EEDrawList = FirstSheet->m_AssociatedScreen->EEDrawList; EEDrawList = FirstSheet->m_AssociatedScreen->EEDrawList;
while( EEDrawList != NULL ) while( EEDrawList != NULL )
{ {
DrawStruct = EEDrawList; DrawStruct = EEDrawList;
EEDrawList = EEDrawList->Pnext; EEDrawList = EEDrawList->Next();
if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE ) if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE )
{ {
DeleteSubHierarchy( (DrawSheetStruct*) DrawStruct, confirm_deletion ); DeleteSubHierarchy( (DrawSheetStruct*) DrawStruct, confirm_deletion );
} }
} }
/* Effacement des elements de la feuille courante */ /* Effacement des elements de la feuille courante */
FirstSheet->m_AssociatedScreen->FreeDrawList(); FirstSheet->m_AssociatedScreen->FreeDrawList();
} }
} }
/*********************************************************************/ /*********************************************************************/
//void ClearDrawList(EDA_BaseStruct *DrawList, bool confirm_deletion) //void ClearDrawList(EDA_BaseStruct *DrawList, bool confirm_deletion)
/********************************************************************/ /********************************************************************/
/* free the draw list DrawList and the subhierarchies */ /* free the draw list DrawList and the subhierarchies */
//this is redundant -- use FreeDrawList, a member of SCH_SCREEN //this is redundant -- use FreeDrawList, a member of SCH_SCREEN
/* /*
{ * {
EDA_BaseStruct *DrawStruct; * EDA_BaseStruct *DrawStruct;
*
while (DrawList != NULL) * while (DrawList != NULL)
{ * {
DrawStruct = DrawList; * DrawStruct = DrawList;
DrawList = DrawList->Pnext; * DrawList = DrawList->Pnext;
*
if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE) * if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE)
{ * {
DeleteSubHierarchy((DrawSheetStruct*) DrawStruct, confirm_deletion); * DeleteSubHierarchy((DrawSheetStruct*) DrawStruct, confirm_deletion);
} * }
*
delete DrawStruct; * delete DrawStruct;
} * }
} * }
*/ */
/********************************************************************/ /********************************************************************/
bool ClearProjectDrawList( SCH_SCREEN* screen, bool confirm_deletion ) bool ClearProjectDrawList( SCH_SCREEN* screen, bool confirm_deletion )
/********************************************************************/ /********************************************************************/
/* free the draw list screen->EEDrawList and the subhierarchies /* free the draw list screen->EEDrawList and the subhierarchies
clear the screen datas (filenames ..) * clear the screen datas (filenames ..)
*/ */
{ {
if ( screen == NULL ) return(TRUE); if( screen == NULL )
return TRUE;
screen->FreeDrawList(); screen->FreeDrawList();
@ -112,4 +121,3 @@ bool ClearProjectDrawList(SCH_SCREEN * screen, bool confirm_deletion)
return TRUE; return TRUE;
} }

View File

@ -1,310 +1,504 @@
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_edit_component_in_schematic.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 03/03/2006 15:02:54
// RCS-ID:
// Copyright: License GNU
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 03/03/2006 15:02:54 #include <wx/checklst.h>
#include <wx/tooltip.h>
#include "fctsys.h"
#include "gr_basic.h"
////@begin includes #include "common.h"
////@end includes #include "program.h"
#include "libcmp.h"
#include "general.h"
#include "protos.h"
#include "dialog_edit_component_in_schematic.h" #include "dialog_edit_component_in_schematic.h"
////@begin XPM images
////@end XPM images
/*! #define ID_ON_SELECT_FIELD 3000
* WinEDA_ComponentPropertiesFrame type definition
/**********************************************************************/
void InstallCmpeditFrame( WinEDA_SchematicFrame* parent, wxPoint& pos,
SCH_COMPONENT* aComponent )
/*********************************************************************/
{
parent->DrawPanel->m_IgnoreMouseEvents = TRUE;
if( aComponent->Type() != TYPE_SCH_COMPONENT )
{
DisplayError( parent,
wxT( "InstallCmpeditFrame() error: This struct is not a component" ) );
}
else
{
wxASSERT( aComponent ); // this is no longer callable with NULL
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC* frame =
new DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( parent );
frame->InitBuffers( aComponent );
frame->ShowModal();
frame->Destroy();
}
parent->DrawPanel->MouseToCursorSchema();
parent->DrawPanel->m_IgnoreMouseEvents = FALSE;
}
#if 0
/*********************************************************************/
void SCH_CMP_FIELD::Place( WinEDA_SchematicFrame* frame, wxDC* DC )
/*********************************************************************/
{
frame->DrawPanel->ManageCurseur = NULL;
frame->DrawPanel->ForceCloseManageCurseur = NULL;
SCH_COMPONENT* component = (SCH_COMPONENT*) m_Parent;
// save old component in undo list
if( g_ItemToUndoCopy && g_ItemToUndoCopy->Type() == component->Type() )
{
component->SwapData( (SCH_COMPONENT*) g_ItemToUndoCopy );
frame->SaveCopyInUndoList( component, IS_CHANGED );
component->SwapData( (SCH_COMPONENT*) g_ItemToUndoCopy );
}
m_AddExtraText = 0;
if( m_FieldId == REFERENCE )
{
EDA_LibComponentStruct* part;
part = FindLibPart( component->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( part )
{
if( part->m_UnitCount > 1 )
m_AddExtraText = 1;
}
}
Draw( frame->DrawPanel, DC, wxPoint(0,0), GR_DEFAULT_DRAWMODE );
m_Flags = 0;
frame->GetScreen()->SetCurItem( NULL );
frame->GetScreen()->SetModify();
}
#endif
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( wxWindow* parent ) :
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP( parent )
{
m_Parent = (WinEDA_SchematicFrame*) parent;
// fieldGrid->SetDefaultColSize( 160, true );
// fieldGrid->SetColLabelValue( 0, _("Field Text") );
// set grid as read only.
fieldGrid->EnableEditing( false );
// @todo make this conditional on 2.8.8 wxWidgets
fieldGrid->SetRowLabelSize( wxGRID_AUTOSIZE );
// else fieldGrid->SetRowLabelSize( 140 ) or so
// select only a single row, and since table is only a single column wide
// this means only one cell.
fieldGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
wxToolTip::Enable( true );
}
/*
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnGridCellLeftClick( wxGridEvent& event )
{
// TODO: Implement OnGridCellLeftClick
}
*/ */
IMPLEMENT_DYNAMIC_CLASS( WinEDA_ComponentPropertiesFrame, wxDialog ) void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::setSelectedFieldNdx( int aFieldNdx )
{
fieldGrid->SelectCol( 0 );
fieldGrid->SelectRow( aFieldNdx );
}
/*!
* WinEDA_ComponentPropertiesFrame event table definition int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::getSelectedFieldNdx()
{
wxArrayInt array = fieldGrid->GetSelectedRows();
if( !array.IsEmpty() )
return array.Item(0);
else
return -1;
}
#if 0
/*****************************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp( wxCommandEvent& event )
/*****************************************************************************/
/* Replace le composant en position normale, dimensions et positions
* fields comme definies en librairie
*/ */
{
EDA_LibComponentStruct* Entry;
BEGIN_EVENT_TABLE( WinEDA_ComponentPropertiesFrame, wxDialog ) if( m_Cmp == NULL )
return;
////@begin WinEDA_ComponentPropertiesFrame event table entries Entry = FindLibPart( m_Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
EVT_BUTTON( wxID_CANCEL, WinEDA_ComponentPropertiesFrame::OnCancelClick )
EVT_BUTTON( ID_RESTORE_CMP_DEFAULTS, WinEDA_ComponentPropertiesFrame::OnRestoreCmpDefaultsClick ) if( Entry == NULL )
return;
EVT_BUTTON( wxID_OK, WinEDA_ComponentPropertiesFrame::OnOkClick ) wxClientDC dc( m_Parent->DrawPanel );
m_Parent->DrawPanel->PrepareGraphicContext( &dc );
////@end WinEDA_ComponentPropertiesFrame event table entries RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, g_XorMode );
EVT_RADIOBOX(ID_ON_SELECT_FIELD, WinEDA_ComponentPropertiesFrame::SelectNewField) /* Mise aux valeurs par defaut des champs et orientation */
m_Cmp->GetField( REFERENCE )->m_Pos.x =
Entry->m_Prefix.m_Pos.x + m_Cmp->m_Pos.x;
END_EVENT_TABLE() m_Cmp->GetField( REFERENCE )->m_Pos.y =
Entry->m_Prefix.m_Pos.y + m_Cmp->m_Pos.y;
/*! m_Cmp->GetField( REFERENCE )->m_Orient = Entry->m_Prefix.m_Orient;
* WinEDA_ComponentPropertiesFrame constructors m_Cmp->GetField( REFERENCE )->m_Size = Entry->m_Prefix.m_Size;
m_Cmp->GetField( REFERENCE )->m_HJustify = Entry->m_Prefix.m_HJustify;
m_Cmp->GetField( REFERENCE )->m_VJustify = Entry->m_Prefix.m_VJustify;
m_Cmp->GetField( VALUE )->m_Pos.x =
Entry->m_Name.m_Pos.x + m_Cmp->m_Pos.x;
m_Cmp->GetField( VALUE )->m_Pos.y =
Entry->m_Name.m_Pos.y + m_Cmp->m_Pos.y;
m_Cmp->GetField( VALUE )->m_Orient = Entry->m_Name.m_Orient;
m_Cmp->GetField( VALUE )->m_Size = Entry->m_Name.m_Size;
m_Cmp->GetField( VALUE )->m_HJustify = Entry->m_Name.m_HJustify;
m_Cmp->GetField( VALUE )->m_VJustify = Entry->m_Name.m_VJustify;
m_Cmp->SetRotationMiroir( CMP_NORMAL );
m_Parent->GetScreen()->SetModify();
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, GR_DEFAULT_DRAWMODE );
EndModal( 1 );
}
#endif
/********************************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent )
/********************************************************************************/
{
m_Cmp = aComponent;
setSelectedFieldNdx( REFERENCE );
m_FieldBuf = aComponent->m_Fields;
m_FieldBuf[REFERENCE].m_Text = m_Cmp->GetRef( m_Parent->GetSheet() );
for( int ii = 0; ii < aComponent->GetFieldCount(); ++ii )
{
// make the editable field position relative to the component
m_FieldBuf[ii].m_Pos -= m_Cmp->m_Pos;
}
}
#if 0
/****************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyDataToPanel()
/****************************************************************/
{
int fieldNdx = GetSelectedFieldNdx();
if( fieldNdx == -1 )
return;
for( int ii = FIELD1; ii < NUMBER_OF_FIELDS; ii++ )
{
m_FieldSelection->SetString( ii, m_FieldName[ii] );
}
if( fieldNdx == VALUE && m_LibEntry && m_LibEntry->m_Options == ENTRY_POWER )
m_FieldTextCtrl->Enable( FALSE );
if( m_FieldFlags[fieldNdx] )
m_ShowFieldTextCtrl->SetValue( TRUE );
else
m_ShowFieldTextCtrl->SetValue( FALSE );
// If the field value is empty and the position is zero, we set the
// initial position as a small offset from the ref field, and orient
// it the same as the ref field. That is likely to put it at least
// close to the desired position.
if( m_FieldBuf[fieldNdx].m_Pos == wxPoint( 0, 0 )
&& m_FieldBuf[fieldNdx].m_Text.IsEmpty() )
{
m_VorientFieldText->SetValue( m_FieldOrient[REFERENCE] != 0 );
m_FieldPositionCtrl->SetValue( m_FieldPosition[REFERENCE].x + 100,
m_FieldPosition[REFERENCE].y + 100 );
}
else
{
m_FieldPositionCtrl->SetValue( m_FieldPosition[fieldNdx].x, m_FieldPosition[fieldNdx].y );
m_VorientFieldText->SetValue( m_FieldOrient[fieldNdx] != 0 );
}
m_FieldNameCtrl->SetValue( m_FieldName[fieldNdx] );
if( fieldNdx < FIELD1 )
m_FieldNameCtrl->Enable( FALSE );
else
m_FieldNameCtrl->Enable( TRUE );
m_FieldTextCtrl->SetValue( m_FieldText[fieldNdx] );
m_FieldTextCtrl->SetValue( m_FieldSize[fieldNdx] );
}
/****************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelFieldToData()
/****************************************************************/
/* Copy the values displayed on the panel field to the buffers according to
* the current field number
*/ */
{
int id = m_CurrentFieldId;
WinEDA_ComponentPropertiesFrame::WinEDA_ComponentPropertiesFrame( ) m_FieldFlags[id] = m_ShowFieldTextCtrl->GetValue();
m_FieldOrient[id] = m_VorientFieldText->GetValue();
m_FieldText[id] = m_FieldTextCtrl->GetText();
m_FieldName[id] = m_FieldNameCtrl->GetValue();
m_FieldPosition[id] = m_FieldPositionCtrl->GetValue();
m_FieldSize[id] = m_FieldTextCtrl->GetTextSize();
}
/*************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::fillTableModel()
/*************************************************************/
{ {
} }
WinEDA_ComponentPropertiesFrame::WinEDA_ComponentPropertiesFrame( WinEDA_SchematicFrame* parent,
SCH_COMPONENT * cmp,
wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
m_Parent = parent;
m_Cmp = cmp;
m_LibEntry = FindLibPart(m_Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT);
InitBuffers(); /**********************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::buildPanelBasic()
/**********************************************************/
Create(parent, id, caption, pos, size, style); /* create the basic panel for component properties editing
if ( m_LibEntry == NULL )
{
SetTitle(_("Component properties (Not found in lib)"));
}
}
/*!
* WinEDA_ComponentPropertiesFrame creator
*/ */
bool WinEDA_ComponentPropertiesFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{ {
m_FieldNameCtrl = NULL; int Nb_Max_Unit = m_SelectUnit->GetCount();
////@begin WinEDA_ComponentPropertiesFrame member initialisation int ii;
m_GeneralBoxSizer = NULL;
m_NoteBook = NULL;
m_PanelBasic = NULL;
m_SelectUnit = NULL;
m_OrientUnit = NULL;
m_MirrorUnit = NULL;
m_MsgPartLocked = NULL;
m_ConvertButt = NULL;
m_RefInLib = NULL;
m_PanelField = NULL;
m_ShowFieldTextCtrl = NULL;
m_VorientFieldText = NULL;
m_FieldDatasBoxSizer = NULL;
m_FieldSelectionBoxSizer = NULL;
m_btClose = NULL;
////@end WinEDA_ComponentPropertiesFrame member initialisation
////@begin WinEDA_ComponentPropertiesFrame creation int nb_units = m_LibEntry ? MAX( m_LibEntry->m_UnitCount, 1 ) : 0;
SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls(); // Disable non existant units selection buttons
if (GetSizer()) for( ii = nb_units; ii < Nb_Max_Unit; ii++ )
{ {
GetSizer()->SetSizeHints(this); m_SelectUnit->Enable( ii, FALSE );
}
Centre();
////@end WinEDA_ComponentPropertiesFrame creation
return true;
} }
/*! if( m_Cmp->m_Multi <= Nb_Max_Unit )
* Control creation for WinEDA_ComponentPropertiesFrame m_SelectUnit->SetSelection( m_Cmp->m_Multi - 1 );
ii = m_Cmp->GetRotationMiroir() & ~(CMP_MIROIR_X | CMP_MIROIR_Y);
if( ii == CMP_ORIENT_90 )
m_OrientUnit->SetSelection( 1 );
else if( ii == CMP_ORIENT_180 )
m_OrientUnit->SetSelection( 2 );
else if( ii == CMP_ORIENT_270 )
m_OrientUnit->SetSelection( 3 );
ii = m_Cmp->GetRotationMiroir() & (CMP_MIROIR_X | CMP_MIROIR_Y);
if( ii == CMP_MIROIR_X )
m_MirrorUnit->SetSelection( 1 );
else if( ii == CMP_MIROIR_Y )
m_MirrorUnit->SetSelection( 2 );
// Positionnement de la selection normal/convert
if( m_Cmp->m_Convert > 1 )
m_ConvertButt->SetValue( TRUE );
if( (m_LibEntry == NULL) || LookForConvertPart( m_LibEntry ) <= 1 )
{
m_ConvertButt->Enable( FALSE );
}
// Show the "Parts Locked" option:
if( !m_LibEntry || !m_LibEntry->m_UnitSelectionLocked )
{
m_MsgPartLocked->Show( false );
}
// Positionnement de la reference en librairie
m_RefInLib->SetValue( m_Cmp->m_ChipName );
}
/*************************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::selectNewField( wxCommandEvent& event )
/*************************************************************************/
/* called when changing the current field selected
* Save the current field settings in buffer and display the new one
*/ */
void WinEDA_ComponentPropertiesFrame::CreateControls()
{ {
SetFont(*g_DialogFont); CopyPanelFieldToData();
m_CurrentFieldId = m_FieldSelection->GetSelection();
////@begin WinEDA_ComponentPropertiesFrame content construction CopyDataToPanelField();
// Generated by DialogBlocks, 29/04/2008 21:04:31 (unregistered)
WinEDA_ComponentPropertiesFrame* itemDialog1 = this;
m_GeneralBoxSizer = new wxBoxSizer(wxVERTICAL);
itemDialog1->SetSizer(m_GeneralBoxSizer);
m_NoteBook = new wxNotebook( itemDialog1, ID_SCHEDIT_NOTEBOOK, wxDefaultPosition, wxDefaultSize, wxNB_DEFAULT|wxNB_TOP );
m_PanelBasic = new wxPanel( m_NoteBook, ID_PANEL_BASIC, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
m_PanelBasic->SetSizer(itemBoxSizer5);
wxArrayString m_SelectUnitStrings;
m_SelectUnitStrings.Add(_("Unit 1"));
m_SelectUnitStrings.Add(_("Unit 2"));
m_SelectUnitStrings.Add(_("Unit 3"));
m_SelectUnitStrings.Add(_("Unit 4"));
m_SelectUnitStrings.Add(_("Unit 5"));
m_SelectUnitStrings.Add(_("Unit 6"));
m_SelectUnitStrings.Add(_("Unit 7"));
m_SelectUnitStrings.Add(_("Unit 8"));
m_SelectUnitStrings.Add(_("Unit 9"));
m_SelectUnitStrings.Add(_("Unit 10"));
m_SelectUnitStrings.Add(_("Unit 11"));
m_SelectUnitStrings.Add(_("Unit 12"));
m_SelectUnitStrings.Add(_("Unit 13"));
m_SelectUnitStrings.Add(_("Unit 14"));
m_SelectUnitStrings.Add(_("Unit 15"));
m_SelectUnitStrings.Add(_("Unit 16"));
m_SelectUnitStrings.Add(_("Unit 16"));
m_SelectUnitStrings.Add(_("Unit 17"));
m_SelectUnitStrings.Add(_("Unit 18"));
m_SelectUnitStrings.Add(_("Unit 19"));
m_SelectUnitStrings.Add(_("Unit 20"));
m_SelectUnitStrings.Add(_("Unit 21"));
m_SelectUnitStrings.Add(_("Unit 22"));
m_SelectUnitStrings.Add(_("Unit 23"));
m_SelectUnitStrings.Add(_("Unit 24"));
m_SelectUnitStrings.Add(_("Unit 25"));
m_SelectUnitStrings.Add(_("Unit 26"));
m_SelectUnit = new wxRadioBox( m_PanelBasic, ID_RADIOBOX_UNIT, _("Unit:"), wxDefaultPosition, wxDefaultSize, m_SelectUnitStrings, 9, wxRA_SPECIFY_ROWS );
m_SelectUnit->SetSelection(0);
itemBoxSizer5->Add(m_SelectUnit, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer5->Add(itemBoxSizer7, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer7->Add(itemBoxSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxArrayString m_OrientUnitStrings;
m_OrientUnitStrings.Add(_("0"));
m_OrientUnitStrings.Add(_("+90"));
m_OrientUnitStrings.Add(_("180"));
m_OrientUnitStrings.Add(_("-90"));
m_OrientUnit = new wxRadioBox( m_PanelBasic, ID_RADIOBOX_ORIENT, _("Orient:"), wxDefaultPosition, wxDefaultSize, m_OrientUnitStrings, 1, wxRA_SPECIFY_COLS );
m_OrientUnit->SetSelection(0);
itemBoxSizer8->Add(m_OrientUnit, 0, wxGROW|wxLEFT|wxRIGHT, 5);
wxArrayString m_MirrorUnitStrings;
m_MirrorUnitStrings.Add(_("Normal"));
m_MirrorUnitStrings.Add(_("Mirror --"));
m_MirrorUnitStrings.Add(_("Mirror !"));
m_MirrorUnit = new wxRadioBox( m_PanelBasic, ID_RADIOBOX_MIRROR, _("Mirror:"), wxDefaultPosition, wxDefaultSize, m_MirrorUnitStrings, 1, wxRA_SPECIFY_COLS );
m_MirrorUnit->SetSelection(0);
itemBoxSizer8->Add(m_MirrorUnit, 0, wxGROW|wxLEFT|wxRIGHT, 5);
m_MsgPartLocked = new wxStaticText( m_PanelBasic, wxID_STATIC, _("Parts are locked"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer7->Add(m_MsgPartLocked, 0, wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE, 5);
m_ConvertButt = new wxCheckBox( m_PanelBasic, ID_CHECKBOX, _("Convert"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_ConvertButt->SetValue(false);
itemBoxSizer7->Add(m_ConvertButt, 0, wxALIGN_LEFT|wxALL, 5);
wxStaticText* itemStaticText13 = new wxStaticText( m_PanelBasic, wxID_STATIC, _("Chip Name:"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticText13->SetForegroundColour(wxColour(202, 0, 0));
itemBoxSizer7->Add(itemStaticText13, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_RefInLib = new wxTextCtrl( m_PanelBasic, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer7->Add(m_RefInLib, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_NoteBook->AddPage(m_PanelBasic, _("Options"));
m_PanelField = new wxPanel( m_NoteBook, ID_PANEL_FIELD, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer16 = new wxBoxSizer(wxHORIZONTAL);
m_PanelField->SetSizer(itemBoxSizer16);
wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer16->Add(itemBoxSizer17, 0, wxALIGN_TOP|wxALL, 5);
wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer17->Add(itemBoxSizer18, 0, wxGROW|wxALL, 5);
m_ShowFieldTextCtrl = new wxCheckBox( m_PanelField, ID_CHECKBOX_SHOW_FILED, _("Show Text"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_ShowFieldTextCtrl->SetValue(false);
itemBoxSizer18->Add(m_ShowFieldTextCtrl, 0, wxGROW|wxALL, 5);
m_VorientFieldText = new wxCheckBox( m_PanelField, ID_CHECKBOX_FILED_ORIENT, _("Vertical"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_VorientFieldText->SetValue(false);
itemBoxSizer18->Add(m_VorientFieldText, 0, wxGROW|wxALL, 5);
m_FieldDatasBoxSizer = new wxBoxSizer(wxVERTICAL);
itemBoxSizer17->Add(m_FieldDatasBoxSizer, 0, wxGROW|wxALL, 5);
m_FieldSelectionBoxSizer = new wxBoxSizer(wxVERTICAL);
itemBoxSizer16->Add(m_FieldSelectionBoxSizer, 0, wxGROW|wxALL, 5);
m_NoteBook->AddPage(m_PanelField, _("Fields"));
m_GeneralBoxSizer->Add(m_NoteBook, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer23 = new wxBoxSizer(wxHORIZONTAL);
m_GeneralBoxSizer->Add(itemBoxSizer23, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_btClose = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
m_btClose->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer23->Add(m_btClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton25 = new wxButton( itemDialog1, ID_RESTORE_CMP_DEFAULTS, _("Defaults"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton25->SetForegroundColour(wxColour(206, 0, 0));
itemBoxSizer23->Add(itemButton25, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton26 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton26->SetForegroundColour(wxColour(0, 128, 0));
itemBoxSizer23->Add(itemButton26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
////@end WinEDA_ComponentPropertiesFrame content construction
m_btClose->SetFocus();
BuildPanelBasic();
BuildPanelFields();
} }
/*!
* Should we show tooltips? /***********************************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::ComponentPropertiesAccept( wxCommandEvent& event )
/***********************************************************************************/
/* Update the new parameters for the current edited component
*/ */
bool WinEDA_ComponentPropertiesFrame::ShowToolTips()
{ {
return true; wxPoint cmp_pos = m_Cmp->m_Pos;
wxClientDC dc( m_Parent->DrawPanel );
wxString newname;
/* save old cmp in undo list if not already in edit, or moving ... */
if( m_Cmp->m_Flags == 0 )
m_Parent->SaveCopyInUndoList( m_Cmp, IS_CHANGED );
CopyPanelFieldToData();
m_Parent->DrawPanel->PrepareGraphicContext( &dc );
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, g_XorMode );
newname = m_RefInLib->GetValue();
newname.MakeUpper();
newname.Replace( wxT( " " ), wxT( "_" ) );
if( newname.IsEmpty() )
DisplayError( this, _( "No Component Name!" ) );
else if( newname.CmpNoCase( m_Cmp->m_ChipName ) )
{
if( FindLibPart( newname.GetData(), wxEmptyString, FIND_ALIAS ) == NULL )
{
wxString message;
message.Printf( _( "Component [%s] not found!" ), newname.GetData() );
DisplayError( this, message );
}
else // Changement de composant!
{
m_Cmp->m_ChipName = newname;
}
} }
/*! // Mise a jour de la representation:
* Get bitmap resources if( m_ConvertButt->IsEnabled() )
*/ (m_ConvertButt->GetValue() == TRUE) ?
m_Cmp->m_Convert = 2 : m_Cmp->m_Convert = 1;
wxBitmap WinEDA_ComponentPropertiesFrame::GetBitmapResource( const wxString& name ) //Set the part selection in multiple part per pakcage
if( m_Cmp->m_Multi )
{ {
// Bitmap retrieval int unit_selection = m_SelectUnit->GetSelection() + 1;
////@begin WinEDA_ComponentPropertiesFrame bitmap retrieval m_Cmp->SetUnitSelection( m_Parent->GetSheet(), unit_selection );
wxUnusedVar(name); m_Cmp->m_Multi = unit_selection;
return wxNullBitmap;
////@end WinEDA_ComponentPropertiesFrame bitmap retrieval
} }
/*! //Mise a jour de l'orientation:
* Get icon resources switch( m_OrientUnit->GetSelection() )
*/
wxIcon WinEDA_ComponentPropertiesFrame::GetIconResource( const wxString& name )
{ {
// Icon retrieval case 0:
////@begin WinEDA_ComponentPropertiesFrame icon retrieval m_Cmp->SetRotationMiroir( CMP_ORIENT_0 );
wxUnusedVar(name); break;
return wxNullIcon;
////@end WinEDA_ComponentPropertiesFrame icon retrieval
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
*/
void WinEDA_ComponentPropertiesFrame::OnCancelClick( wxCommandEvent& event ) case 1:
{ m_Cmp->SetRotationMiroir( CMP_ORIENT_90 );
EndModal( -1 ); break;
case 2:
m_Cmp->SetRotationMiroir( CMP_ORIENT_180 );
break;
case 3:
m_Cmp->SetRotationMiroir( CMP_ORIENT_270 );
break;
} }
/*! switch( m_MirrorUnit->GetSelection() )
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RESTORE_CMP_DEFAULTS
*/
void WinEDA_ComponentPropertiesFrame::OnRestoreCmpDefaultsClick( wxCommandEvent& event )
{ {
SetInitCmp(event); case 0:
break;
case 1:
m_Cmp->SetRotationMiroir( CMP_MIROIR_X );
break;
case 2:
m_Cmp->SetRotationMiroir( CMP_MIROIR_Y );
break;
} }
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
*/
void WinEDA_ComponentPropertiesFrame::OnOkClick( wxCommandEvent& event ) // Mise a jour des textes (update the texts)
for( int ii = REFERENCE; ii < NUMBER_OF_FIELDS; ii++ )
{ {
ComponentPropertiesAccept(event); if( ii == REFERENCE ) // la reference ne peut etre vide
{
if( !m_FieldText[ii].IsEmpty() )
m_Cmp->SetRef(m_Parent->GetSheet(), m_FieldText[ii]);
} }
else if( ii == VALUE ) // la valeur ne peut etre vide et ne peut etre change sur un POWER
{
EDA_LibComponentStruct* Entry = FindLibPart( m_Cmp->m_ChipName.GetData(
), wxEmptyString, FIND_ROOT );
if( Entry && (Entry->m_Options == ENTRY_POWER) )
m_Cmp->GetField( ii )->m_Text = m_Cmp->m_ChipName;
else if( !m_FieldText[ii].IsEmpty() )
{
m_Cmp->GetField( ii )->m_Text = m_FieldText[ii];
}
}
else
m_Cmp->GetField( ii )->m_Text = m_FieldText[ii];
if( ii >= FIELD1 && m_FieldName[ii] != ReturnDefaultFieldName( ii ) )
m_Cmp->GetField( ii )->m_Name = m_FieldName[ii];
else
m_Cmp->GetField( ii )->m_Name.Empty();
m_Cmp->GetField( ii )->m_Size.x =
m_Cmp->GetField( ii )->m_Size.y = m_FieldSize[ii];
if( m_FieldFlags[ii] )
m_Cmp->GetField( ii )->m_Attributs &= ~TEXT_NO_VISIBLE;
else
m_Cmp->GetField( ii )->m_Attributs |= TEXT_NO_VISIBLE;
m_Cmp->GetField( ii )->m_Orient = m_FieldOrient[ii] ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ;
m_Cmp->GetField( ii )->m_Pos = m_FieldPosition[ii];
m_Cmp->GetField( ii )->m_Pos.x += cmp_pos.x;
m_Cmp->GetField( ii )->m_Pos.y += cmp_pos.y;
}
m_Parent->GetScreen()->SetModify();
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, GR_DEFAULT_DRAWMODE );
m_Parent->TestDanglingEnds( m_Parent->GetScreen()->EEDrawList, &dc );
EndModal( 0 );
}
#endif

View File

@ -1,158 +1,55 @@
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_edit_component_in_schematic.h
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 03/03/2006 15:02:54
// RCS-ID:
// Copyright: License GNU
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 03/03/2006 15:02:54 #ifndef __dialog_edit_component_in_schematic__
#define __dialog_edit_component_in_schematic__
#ifndef _DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_H_
#define _DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_H_
/*! #include "dialog_edit_component_in_schematic_fbp.h"
* Includes
/**
* class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC
* is hand coded and implements DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP which is maintained by
* wxFormBuilder. Do not auto-generate this class or file, it is hand coded.
*/ */
class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC : public DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP
////@begin includes
#include "wx/notebook.h"
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
class wxBoxSizer;
class wxNotebook;
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_DIALOG 10000
#define ID_SCHEDIT_NOTEBOOK 10001
#define ID_PANEL_BASIC 10002
#define ID_RADIOBOX_UNIT 10004
#define ID_RADIOBOX_ORIENT 10005
#define ID_RADIOBOX_MIRROR 10007
#define ID_CHECKBOX 10008
#define ID_TEXTCTRL 10009
#define ID_PANEL_FIELD 10003
#define ID_CHECKBOX_SHOW_FILED 10010
#define ID_CHECKBOX_FILED_ORIENT 10011
#define ID_RESTORE_CMP_DEFAULTS 10006
#define SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_STYLE wxDEFAULT_DIALOG_STYLE|MAYBE_RESIZE_BORDER
#define SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_TITLE _("Component Properties")
#define SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_IDNAME ID_DIALOG
#define SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_POSITION wxDefaultPosition
////@end control identifiers
/*!
* Compatibility
*/
#ifndef wxCLOSE_BOX
#define wxCLOSE_BOX 0x1000
#endif
/*!
* WinEDA_ComponentPropertiesFrame class declaration
*/
class WinEDA_ComponentPropertiesFrame: public wxDialog
{ {
DECLARE_DYNAMIC_CLASS( WinEDA_ComponentPropertiesFrame )
DECLARE_EVENT_TABLE()
public:
/// Constructors
WinEDA_ComponentPropertiesFrame( );
WinEDA_ComponentPropertiesFrame( WinEDA_SchematicFrame* parent,
SCH_COMPONENT * cmp,
wxWindowID id = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_SIZE, long style = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_STYLE );
/// Creation
bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_SIZE, long style = SYMBOL_WINEDA_COMPONENTPROPERTIESFRAME_STYLE );
/// Creates the controls and sizers
void CreateControls();
////@begin WinEDA_ComponentPropertiesFrame event handler declarations
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
void OnCancelClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RESTORE_CMP_DEFAULTS
void OnRestoreCmpDefaultsClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
void OnOkClick( wxCommandEvent& event );
////@end WinEDA_ComponentPropertiesFrame event handler declarations
////@begin WinEDA_ComponentPropertiesFrame member function declarations
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
/// Retrieves icon resources
wxIcon GetIconResource( const wxString& name );
////@end WinEDA_ComponentPropertiesFrame member function declarations
/// Should we show tooltips?
static bool ShowToolTips();
void InitBuffers();
void BuildPanelBasic();
void BuildPanelFields();
void ComponentPropertiesAccept(wxCommandEvent& event);
void SetInitCmp( wxCommandEvent& event );
void CopyDataToPanelField();
void CopyPanelFieldToData();
void SelectNewField(wxCommandEvent& event);
////@begin WinEDA_ComponentPropertiesFrame member variables
wxBoxSizer* m_GeneralBoxSizer;
wxNotebook* m_NoteBook;
wxPanel* m_PanelBasic;
wxRadioBox* m_SelectUnit;
wxRadioBox* m_OrientUnit;
wxRadioBox* m_MirrorUnit;
wxStaticText* m_MsgPartLocked;
wxCheckBox* m_ConvertButt;
wxTextCtrl* m_RefInLib;
wxPanel* m_PanelField;
wxCheckBox* m_ShowFieldTextCtrl;
wxCheckBox* m_VorientFieldText;
wxBoxSizer* m_FieldDatasBoxSizer;
wxBoxSizer* m_FieldSelectionBoxSizer;
wxButton* m_btClose;
////@end WinEDA_ComponentPropertiesFrame member variables
WinEDA_SchematicFrame* m_Parent; WinEDA_SchematicFrame* m_Parent;
SCH_COMPONENT* m_Cmp; SCH_COMPONENT* m_Cmp;
EDA_LibComponentStruct* m_LibEntry; EDA_LibComponentStruct* m_LibEntry;
int m_CurrentFieldId;
wxRadioBox * m_FieldSelection; /// a copy of the edited component's SCH_CMP_FIELDs
WinEDA_GraphicTextCtrl * m_FieldTextCtrl; SCH_CMP_FIELDS m_FieldBuf;
WinEDA_EnterText * m_FieldNameCtrl;
WinEDA_PositionCtrl * m_FieldPositionCtrl; void setSelectedFieldNdx( int aFieldNdx );
wxString m_FieldText[NUMBER_OF_FIELDS];
wxString m_FieldName[NUMBER_OF_FIELDS]; int getSelectedFieldNdx();
wxPoint m_FieldPosition[NUMBER_OF_FIELDS];
int m_FieldSize[NUMBER_OF_FIELDS];
int m_FieldFlags[NUMBER_OF_FIELDS]; /**
int m_FieldOrient[NUMBER_OF_FIELDS]; * Function CopyDataToPanel
* sets the values displayed on the panel according to
* the current field number
*/
void copyDataToPanel();
void fillTableModel();
protected:
// Handlers for DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP events.
// void OnGridCellLeftClick( wxGridEvent& event );
public:
/** Constructor */
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( wxWindow* parent );
/**
* Function InitBuffers
* sets up to edit the given component.
* @param aComponent The component to edit.
*/
void InitBuffers( SCH_COMPONENT* aComponent );
}; };
#endif #endif // __dialog_edit_component_in_schematic__
// _DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_H_

View File

@ -191,7 +191,7 @@ void WinEDA_PartPropertiesFrame::InitBuffers()
while( Field ) while( Field )
{ {
CopyFieldDataToBuffer( Field ); CopyFieldDataToBuffer( Field );
Field = (LibDrawField*) Field->Pnext; Field = Field->Next();
} }
} }
@ -753,7 +753,7 @@ void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
LibDrawField* NextField, * previousField = NULL; LibDrawField* NextField, * previousField = NULL;
while( Field ) while( Field )
{ {
NextField = (LibDrawField*) Field->Pnext; NextField = Field->Next();
if( Field->m_FieldId == ii ) if( Field->m_FieldId == ii )
{ {
CopyBufferToFieldData( Field ); CopyBufferToFieldData( Field );
@ -765,7 +765,7 @@ void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
{ {
SAFE_DELETE( Field ); SAFE_DELETE( Field );
if( previousField ) if( previousField )
previousField->Pnext = NextField; previousField->SetNext( NextField );
else else
CurrentLibEntry->Fields = NextField; CurrentLibEntry->Fields = NextField;
} }
@ -789,7 +789,7 @@ void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
Field = new LibDrawField( ii ); Field = new LibDrawField( ii );
CopyBufferToFieldData( Field ); CopyBufferToFieldData( Field );
Field->Pnext = CurrentLibEntry->Fields; Field->SetNext( CurrentLibEntry->Fields );
CurrentLibEntry->Fields = Field; CurrentLibEntry->Fields = Field;
} }
} }
@ -805,7 +805,7 @@ void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
if( Field->m_FieldId >= FIELD1 ) if( Field->m_FieldId >= FIELD1 )
if( Field->m_Text.IsEmpty() ) if( Field->m_Text.IsEmpty() )
Field->m_Text = wxT( "~" ); Field->m_Text = wxT( "~" );
Field = (LibDrawField*) Field->Pnext; Field = Field->Next();
} }
} }
@ -1043,7 +1043,7 @@ bool WinEDA_PartPropertiesFrame::ChangeNbUnitsPerPackage( int MaxUnit )
for( ii = OldNumUnits + 1; ii <= MaxUnit; ii++ ) for( ii = OldNumUnits + 1; ii <= MaxUnit; ii++ )
{ {
NextDrawItem = CopyDrawEntryStruct( this, DrawItem ); NextDrawItem = CopyDrawEntryStruct( this, DrawItem );
NextDrawItem->Pnext = CurrentLibEntry->m_Drawings; NextDrawItem->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = NextDrawItem; CurrentLibEntry->m_Drawings = NextDrawItem;
NextDrawItem->m_Unit = ii; NextDrawItem->m_Unit = ii;
} }
@ -1090,7 +1090,7 @@ bool WinEDA_PartPropertiesFrame::SetUnsetConvert()
} }
} }
NextDrawItem = CopyDrawEntryStruct( this, DrawItem ); NextDrawItem = CopyDrawEntryStruct( this, DrawItem );
NextDrawItem->Pnext = CurrentLibEntry->m_Drawings; NextDrawItem->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = NextDrawItem; CurrentLibEntry->m_Drawings = NextDrawItem;
NextDrawItem->m_Convert = 2; NextDrawItem->m_Convert = 2;
} }

View File

@ -15,432 +15,13 @@
#include "protos.h" #include "protos.h"
/* Fonctions exportees */
/* Fonctions locales */ /* Fonctions locales */
static void AbortMoveCmpField( WinEDA_DrawPanel* Panel, wxDC* DC ); static void AbortMoveCmpField( WinEDA_DrawPanel* Panel, wxDC* DC );
static void MoveCmpField( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); static void MoveCmpField( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
/* variables locales */
static SCH_CMP_FIELD* CurrentField;
static int Multiflag;
static int TextFieldSize = DEFAULT_SIZE_TEXT;
static wxPoint OldPos;
/************************************/
/* class WinEDA_PartPropertiesFrame */
/************************************/
#define ID_ON_SELECT_FIELD 3000
#include "dialog_edit_component_in_schematic.cpp"
/**********************************************************************/
void InstallCmpeditFrame( WinEDA_SchematicFrame* parent, wxPoint& pos,
SCH_COMPONENT* cmp )
/*********************************************************************/
/* Create the dialog box for the current component edition
*/
{
parent->DrawPanel->m_IgnoreMouseEvents = TRUE;
if( cmp->Type() != TYPE_SCH_COMPONENT )
{
DisplayError( parent,
wxT( "InstallCmpeditFrame() error: This struct is not a component" ) );
}
else
{
WinEDA_ComponentPropertiesFrame* frame =
new WinEDA_ComponentPropertiesFrame( parent, cmp );
frame->ShowModal();
frame->Destroy();
}
parent->DrawPanel->MouseToCursorSchema();
parent->DrawPanel->m_IgnoreMouseEvents = FALSE;
}
/*****************************************************/
void WinEDA_ComponentPropertiesFrame::InitBuffers()
/*****************************************************/
/* Init the buffers to a default value,
* or to values from Component!= NULL
*/
{
int ii;
m_CurrentFieldId = REFERENCE;
/* Init default values */
for( ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
{
m_FieldSize[ii] = DEFAULT_SIZE_TEXT;
m_FieldFlags[ii] = 1;
m_FieldOrient[ii] = 0;
}
if( m_Cmp == NULL )
return;
for( ii = REFERENCE; ii < NUMBER_OF_FIELDS; ii++ )
{
m_FieldName[ii] = m_Cmp->ReturnFieldName( ii );
if(ii == REFERENCE)
m_FieldText[ii] = m_Cmp->GetRef( m_Parent->GetSheet() );
else
m_FieldText[ii] = m_Cmp->GetField( ii )->m_Text;
m_FieldSize[ii] = m_Cmp->GetField( ii )->m_Size.x;
m_FieldFlags[ii] = (m_Cmp->GetField( ii )->m_Attributs & TEXT_NO_VISIBLE) ? 0 : 1;
m_FieldOrient[ii] = m_Cmp->GetField( ii )->m_Orient == TEXT_ORIENT_VERT ? 1 : 0;
if( m_Cmp->GetField( ii )->m_Text.IsEmpty() )
continue;
// These values have meaning only if this field is not void:
m_FieldPosition[ii] = m_Cmp->GetField( ii )->m_Pos;
m_FieldPosition[ii].x -= m_Cmp->m_Pos.x;
m_FieldPosition[ii].y -= m_Cmp->m_Pos.y;
}
}
/****************************************************************/
void WinEDA_ComponentPropertiesFrame::CopyDataToPanelField()
/****************************************************************/
/* Set the values displayed on the panel field according to
* the current field number
*/
{
int fieldId = m_CurrentFieldId;
for( int ii = FIELD1; ii < NUMBER_OF_FIELDS; ii++ ){
m_FieldSelection->SetString( ii, m_FieldName[ii] );
}
if( fieldId == VALUE && m_LibEntry && m_LibEntry->m_Options == ENTRY_POWER )
m_FieldTextCtrl->Enable( FALSE );
if( m_FieldFlags[fieldId] )
m_ShowFieldTextCtrl->SetValue( TRUE );
else
m_ShowFieldTextCtrl->SetValue( FALSE );
// If the field value is empty and the position is zero, we set the
// initial position as a small offset from the ref field, and orient
// it the same as the ref field. That is likely to put it at least
// close to the desired position.
if( ( m_FieldPosition[fieldId] == wxPoint( 0, 0 ) )
&& m_FieldText[fieldId].IsEmpty() )
{
m_VorientFieldText->SetValue( m_FieldOrient[REFERENCE] != 0 );
m_FieldPositionCtrl->SetValue( m_FieldPosition[REFERENCE].x + 100,
m_FieldPosition[REFERENCE].y + 100 );
}
else
{
m_FieldPositionCtrl->SetValue( m_FieldPosition[fieldId].x, m_FieldPosition[fieldId].y );
m_VorientFieldText->SetValue( m_FieldOrient[fieldId] != 0 );
}
m_FieldNameCtrl->SetValue( m_FieldName[fieldId] );
if( fieldId < FIELD1 )
m_FieldNameCtrl->Enable( FALSE );
else
m_FieldNameCtrl->Enable( TRUE );
m_FieldTextCtrl->SetValue( m_FieldText[fieldId] );
m_FieldTextCtrl->SetValue( m_FieldSize[fieldId] );
}
/****************************************************************/
void WinEDA_ComponentPropertiesFrame::CopyPanelFieldToData()
/****************************************************************/
/* Copy the values displayed on the panel field to the buffers according to
* the current field number
*/
{
int id = m_CurrentFieldId;
m_FieldFlags[id] = m_ShowFieldTextCtrl->GetValue();
m_FieldOrient[id] = m_VorientFieldText->GetValue();
m_FieldText[id] = m_FieldTextCtrl->GetText();
m_FieldName[id] = m_FieldNameCtrl->GetValue();
m_FieldPosition[id] = m_FieldPositionCtrl->GetValue();
m_FieldSize[id] = m_FieldTextCtrl->GetTextSize();
}
/*************************************************************/
void WinEDA_ComponentPropertiesFrame::BuildPanelFields()
/*************************************************************/
{
int ii, FieldId;
wxPoint field_pos;
m_CurrentFieldId = FieldId = REFERENCE;
// Create the box field selection:
wxString fieldnamelist[NUMBER_OF_FIELDS];
for( ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
{
if( m_FieldName[ii].IsEmpty() )
fieldnamelist[ii] = ReturnDefaultFieldName( ii );
else
fieldnamelist[ii] = m_FieldName[ii];
}
m_FieldSelection = new wxRadioBox( m_PanelField, ID_ON_SELECT_FIELD,
_( "Field to edit" ), wxDefaultPosition, wxDefaultSize,
NUMBER_OF_FIELDS, fieldnamelist, 2, wxRA_SPECIFY_COLS );
m_FieldSelectionBoxSizer->Add( m_FieldSelection, 0, wxGROW | wxALL, 5 );
// Create the box for field name display
m_FieldNameCtrl = new WinEDA_EnterText( m_PanelField,
_( "Field Name:" ), m_FieldName[FieldId],
m_FieldDatasBoxSizer, wxSize( 200, -1 ) );
if( FieldId < FIELD1 )
m_FieldNameCtrl->Enable( FALSE );
else
m_FieldNameCtrl->Enable( TRUE );
// Create the box for text editing (text, size)
m_FieldTextCtrl = new WinEDA_GraphicTextCtrl( m_PanelField,
_(
"Field Text:" ),
m_FieldText[FieldId],
m_FieldSize[FieldId],
g_UnitMetric,
m_FieldDatasBoxSizer, 200,
m_Parent->m_InternalUnits );
// Create the box for text editing (position)
m_FieldPositionCtrl = new WinEDA_PositionCtrl( m_PanelField, _( "Pos" ),
m_FieldPosition[FieldId],
g_UnitMetric,
m_FieldDatasBoxSizer,
m_Parent->m_InternalUnits );
CopyDataToPanelField();
}
/**********************************************************/
void WinEDA_ComponentPropertiesFrame::BuildPanelBasic()
/**********************************************************/
/* create the basic panel for component properties editing
*/
{
int Nb_Max_Unit = m_SelectUnit->GetCount();
int ii;
int nb_units = m_LibEntry ? MAX( m_LibEntry->m_UnitCount, 1 ) : 0;
// Disable non existant units selection buttons
for( ii = nb_units; ii < Nb_Max_Unit; ii++ )
{
m_SelectUnit->Enable( ii, FALSE );
}
if( m_Cmp->m_Multi <= Nb_Max_Unit )
m_SelectUnit->SetSelection( m_Cmp->m_Multi - 1 );
ii = m_Cmp->GetRotationMiroir() & ~(CMP_MIROIR_X | CMP_MIROIR_Y);
if( ii == CMP_ORIENT_90 )
m_OrientUnit->SetSelection( 1 );
else if( ii == CMP_ORIENT_180 )
m_OrientUnit->SetSelection( 2 );
else if( ii == CMP_ORIENT_270 )
m_OrientUnit->SetSelection( 3 );
ii = m_Cmp->GetRotationMiroir() & (CMP_MIROIR_X | CMP_MIROIR_Y);
if( ii == CMP_MIROIR_X )
m_MirrorUnit->SetSelection( 1 );
else if( ii == CMP_MIROIR_Y )
m_MirrorUnit->SetSelection( 2 );
// Positionnement de la selection normal/convert
if( m_Cmp->m_Convert > 1 )
m_ConvertButt->SetValue( TRUE );
if( (m_LibEntry == NULL) || LookForConvertPart( m_LibEntry ) <= 1 )
{
m_ConvertButt->Enable( FALSE );
}
// Show the "Parts Locked" option:
if( !m_LibEntry || !m_LibEntry->m_UnitSelectionLocked )
{
m_MsgPartLocked->Show( false );
}
// Positionnement de la reference en librairie
m_RefInLib->SetValue( m_Cmp->m_ChipName );
}
/*************************************************************************/
void WinEDA_ComponentPropertiesFrame::SelectNewField( wxCommandEvent& event )
/*************************************************************************/
/* called when changing the current field selected
* Save the current field settings in buffer and display the new one
*/
{
CopyPanelFieldToData();
m_CurrentFieldId = m_FieldSelection->GetSelection();
CopyDataToPanelField();
}
/***********************************************************************************/
void WinEDA_ComponentPropertiesFrame::ComponentPropertiesAccept( wxCommandEvent& event )
/***********************************************************************************/
/* Update the new parameters for the current edited component
*/
{
wxPoint cmp_pos = m_Cmp->m_Pos;
wxClientDC dc( m_Parent->DrawPanel );
wxString newname;
/* save old cmp in undo list if not already in edit, or moving ... */
if( m_Cmp->m_Flags == 0 )
m_Parent->SaveCopyInUndoList( m_Cmp, IS_CHANGED );
CopyPanelFieldToData();
m_Parent->DrawPanel->PrepareGraphicContext( &dc );
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, g_XorMode );
newname = m_RefInLib->GetValue();
newname.MakeUpper();
newname.Replace( wxT( " " ), wxT( "_" ) );
if( newname.IsEmpty() )
DisplayError( this, _( "No Component Name!" ) );
else if( newname.CmpNoCase( m_Cmp->m_ChipName ) )
{
if( FindLibPart( newname.GetData(), wxEmptyString, FIND_ALIAS ) == NULL )
{
wxString message;
message.Printf( _( "Component [%s] not found!" ), newname.GetData() );
DisplayError( this, message );
}
else // Changement de composant!
{
m_Cmp->m_ChipName = newname;
}
}
// Mise a jour de la representation:
if( m_ConvertButt->IsEnabled() )
(m_ConvertButt->GetValue() == TRUE) ?
m_Cmp->m_Convert = 2 : m_Cmp->m_Convert = 1;
//Set the part selection in multiple part per pakcage
if( m_Cmp->m_Multi )
{
int unit_selection = m_SelectUnit->GetSelection() + 1;
m_Cmp->SetUnitSelection( m_Parent->GetSheet(), unit_selection );
m_Cmp->m_Multi = unit_selection;
}
//Mise a jour de l'orientation:
switch( m_OrientUnit->GetSelection() )
{
case 0:
m_Cmp->SetRotationMiroir( CMP_ORIENT_0 );
break;
case 1:
m_Cmp->SetRotationMiroir( CMP_ORIENT_90 );
break;
case 2:
m_Cmp->SetRotationMiroir( CMP_ORIENT_180 );
break;
case 3:
m_Cmp->SetRotationMiroir( CMP_ORIENT_270 );
break;
}
switch( m_MirrorUnit->GetSelection() )
{
case 0:
break;
case 1:
m_Cmp->SetRotationMiroir( CMP_MIROIR_X );
break;
case 2:
m_Cmp->SetRotationMiroir( CMP_MIROIR_Y );
break;
}
// Mise a jour des textes (update the texts)
for( int ii = REFERENCE; ii < NUMBER_OF_FIELDS; ii++ )
{
if( ii == REFERENCE ) // la reference ne peut etre vide
{
if( !m_FieldText[ii].IsEmpty() )
m_Cmp->SetRef(m_Parent->GetSheet(), m_FieldText[ii]);
}
else if( ii == VALUE ) // la valeur ne peut etre vide et ne peut etre change sur un POWER
{
EDA_LibComponentStruct* Entry = FindLibPart( m_Cmp->m_ChipName.GetData(
), wxEmptyString, FIND_ROOT );
if( Entry && (Entry->m_Options == ENTRY_POWER) )
m_Cmp->GetField( ii )->m_Text = m_Cmp->m_ChipName;
else if( !m_FieldText[ii].IsEmpty() )
{
m_Cmp->GetField( ii )->m_Text = m_FieldText[ii];
}
}
else
m_Cmp->GetField( ii )->m_Text = m_FieldText[ii];
if( ii >= FIELD1 && m_FieldName[ii] != ReturnDefaultFieldName( ii ) )
m_Cmp->GetField( ii )->m_Name = m_FieldName[ii];
else
m_Cmp->GetField( ii )->m_Name.Empty();
m_Cmp->GetField( ii )->m_Size.x =
m_Cmp->GetField( ii )->m_Size.y = m_FieldSize[ii];
if( m_FieldFlags[ii] )
m_Cmp->GetField( ii )->m_Attributs &= ~TEXT_NO_VISIBLE;
else
m_Cmp->GetField( ii )->m_Attributs |= TEXT_NO_VISIBLE;
m_Cmp->GetField( ii )->m_Orient = m_FieldOrient[ii] ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ;
m_Cmp->GetField( ii )->m_Pos = m_FieldPosition[ii];
m_Cmp->GetField( ii )->m_Pos.x += cmp_pos.x;
m_Cmp->GetField( ii )->m_Pos.y += cmp_pos.y;
}
m_Parent->GetScreen()->SetModify();
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, GR_DEFAULT_DRAWMODE );
m_Parent->TestDanglingEnds( m_Parent->GetScreen()->EEDrawList, &dc );
EndModal( 0 );
}
/************************************************************************************/ /************************************************************************************/
void WinEDA_SchematicFrame::StartMoveCmpField( SCH_CMP_FIELD* Field, wxDC* DC ) void WinEDA_SchematicFrame::StartMoveCmpField( SCH_CMP_FIELD* aField, wxDC* DC )
/************************************************************************************/ /************************************************************************************/
/* Prepare le deplacement du texte en cours d'edition /* Prepare le deplacement du texte en cours d'edition
@ -448,12 +29,11 @@ void WinEDA_SchematicFrame::StartMoveCmpField( SCH_CMP_FIELD* Field, wxDC* DC )
{ {
EDA_LibComponentStruct* Entry; EDA_LibComponentStruct* Entry;
SetCurrentField( aField );
CurrentField = Field; if( aField == NULL )
if( Field == NULL )
return; return;
if( Field->m_Text == wxEmptyString ) if( aField->m_Text == wxEmptyString )
{ {
DisplayError( this, _( "No Field to move" ), 10 ); DisplayError( this, _( "No Field to move" ), 10 );
return; return;
@ -461,48 +41,48 @@ void WinEDA_SchematicFrame::StartMoveCmpField( SCH_CMP_FIELD* Field, wxDC* DC )
wxPoint pos, newpos; wxPoint pos, newpos;
int x1, y1; int x1, y1;
SCH_COMPONENT* Cmp = (SCH_COMPONENT*) CurrentField->m_Parent; SCH_COMPONENT* comp = (SCH_COMPONENT*) aField->GetParent();
SAFE_DELETE( g_ItemToUndoCopy ); SAFE_DELETE( g_ItemToUndoCopy );
g_ItemToUndoCopy = Cmp->GenCopy(); g_ItemToUndoCopy = comp->GenCopy();
pos = Cmp->m_Pos; pos = comp->m_Pos;
/* Les positions sont calculees par la matrice TRANSPOSEE de la matrice /* Les positions sont calculees par la matrice TRANSPOSEE de la matrice
* de rotation-miroir */ * de rotation-miroir */
x1 = Field->m_Pos.x - pos.x; x1 = aField->m_Pos.x - pos.x;
y1 = Field->m_Pos.y - pos.y; y1 = aField->m_Pos.y - pos.y;
// Empirically this is necessary. The Y coordinate appears to be inverted // Empirically this is necessary. The Y coordinate appears to be inverted
// under some circumstances, but that inversion is not preserved by all // under some circumstances, but that inversion is not preserved by all
// combinations of mirroring and rotation. The following clause is true // combinations of mirroring and rotation. The following clause is true
// when the number of rotations and the number of mirrorings are both odd. // when the number of rotations and the number of mirrorings are both odd.
if( Cmp->m_Transform[1][0] * Cmp->m_Transform[0][1] < 0 ) if( comp->m_Transform[1][0] * comp->m_Transform[0][1] < 0 )
{ {
y1 = -y1; y1 = -y1;
} }
newpos.x = pos.x + Cmp->m_Transform[0][0] * x1 + Cmp->m_Transform[1][0] * y1; newpos.x = pos.x + comp->m_Transform[0][0] * x1 + comp->m_Transform[1][0] * y1;
newpos.y = pos.y + Cmp->m_Transform[0][1] * x1 + Cmp->m_Transform[1][1] * y1; newpos.y = pos.y + comp->m_Transform[0][1] * x1 + comp->m_Transform[1][1] * y1;
DrawPanel->CursorOff( DC ); DrawPanel->CursorOff( DC );
GetScreen()->m_Curseur = newpos; GetScreen()->m_Curseur = newpos;
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
OldPos = Field->m_Pos; m_OldPos = aField->m_Pos;
Multiflag = 0; m_Multiflag = 0;
if( Field->m_FieldId == REFERENCE ) if( aField->m_FieldId == REFERENCE )
{ {
Entry = FindLibPart( Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); Entry = FindLibPart( comp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( Entry != NULL ) if( Entry != NULL )
{ {
if( Entry->m_UnitCount > 1 ) if( Entry->m_UnitCount > 1 )
Multiflag = 1; m_Multiflag = 1;
} }
} }
DrawPanel->ForceCloseManageCurseur = AbortMoveCmpField; DrawPanel->ForceCloseManageCurseur = AbortMoveCmpField;
DrawPanel->ManageCurseur = MoveCmpField; DrawPanel->ManageCurseur = MoveCmpField;
Field->m_Flags = IS_MOVED; aField->m_Flags = IS_MOVED;
DrawPanel->CursorOn( DC ); DrawPanel->CursorOn( DC );
} }
@ -513,7 +93,7 @@ void WinEDA_SchematicFrame::EditCmpFieldText( SCH_CMP_FIELD* Field, wxDC* DC )
/**********************************************************************************/ /**********************************************************************************/
/* Edit the field Field (text, size) */ /* Edit the field Field (text, size) */
{ {
int FieldNumber, flag; int fieldNdx, flag;
EDA_LibComponentStruct* Entry; EDA_LibComponentStruct* Entry;
if( Field == NULL ) if( Field == NULL )
@ -522,10 +102,10 @@ void WinEDA_SchematicFrame::EditCmpFieldText( SCH_CMP_FIELD* Field, wxDC* DC )
return; return;
} }
SCH_COMPONENT* Cmp = (SCH_COMPONENT*) Field->m_Parent; SCH_COMPONENT* Cmp = (SCH_COMPONENT*) Field->GetParent();
FieldNumber = Field->m_FieldId; fieldNdx = Field->m_FieldId;
if( FieldNumber == VALUE ) if( fieldNdx == VALUE )
{ {
Entry = FindLibPart( Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); Entry = FindLibPart( Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( Entry && (Entry->m_Options == ENTRY_POWER) ) if( Entry && (Entry->m_Options == ENTRY_POWER) )
@ -539,7 +119,7 @@ void WinEDA_SchematicFrame::EditCmpFieldText( SCH_CMP_FIELD* Field, wxDC* DC )
} }
flag = 0; flag = 0;
if( FieldNumber == REFERENCE ) if( fieldNdx == REFERENCE )
{ {
Entry = FindLibPart( Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); Entry = FindLibPart( Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( Entry != NULL ) if( Entry != NULL )
@ -568,20 +148,20 @@ void WinEDA_SchematicFrame::EditCmpFieldText( SCH_CMP_FIELD* Field, wxDC* DC )
if( Field->m_Text.IsEmpty() ) if( Field->m_Text.IsEmpty() )
{ {
Field->m_Pos = Cmp->m_Pos; Field->m_Pos = Cmp->m_Pos;
Field->m_Size.x = Field->m_Size.y = TextFieldSize; Field->m_Size.x = Field->m_Size.y = m_TextFieldSize;
} }
Field->m_Text = newtext; Field->m_Text = newtext;
if( FieldNumber == REFERENCE ){ if( fieldNdx == REFERENCE ){
Cmp->SetRef(GetSheet(), newtext); Cmp->SetRef(GetSheet(), newtext);
} }
} }
else /* Nouveau texte NULL */ else /* Nouveau texte NULL */
{ {
if( FieldNumber == REFERENCE ) if( fieldNdx == REFERENCE )
{ {
DisplayError( this, _( "Reference needed !, No change" ) ); DisplayError( this, _( "Reference needed !, No change" ) );
} }
else if( FieldNumber == VALUE ) else if( fieldNdx == VALUE )
{ {
DisplayError( this, _( "Value needed !, No change" ) ); DisplayError( this, _( "Value needed !, No change" ) );
} }
@ -607,31 +187,36 @@ static void MoveCmpField( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
{ {
wxPoint pos; wxPoint pos;
int x1, y1; int x1, y1;
int FieldNumber; int fieldNdx;
if( CurrentField == NULL ) WinEDA_SchematicFrame* frame = (WinEDA_SchematicFrame*) panel->GetParent();
SCH_CMP_FIELD* currentField = frame->GetCurrentField();
if( currentField == NULL )
return; return;
SCH_COMPONENT* Cmp = (SCH_COMPONENT*) CurrentField->m_Parent; SCH_COMPONENT* component = (SCH_COMPONENT*) currentField->GetParent();
FieldNumber = CurrentField->m_FieldId; fieldNdx = currentField->m_FieldId;
/* Effacement: */ // Effacement:
CurrentField->m_AddExtraText = Multiflag; currentField->m_AddExtraText = frame->m_Multiflag;
if( erase ) if( erase )
{ {
CurrentField->Draw( panel, DC, wxPoint(0,0), g_XorMode ); currentField->Draw( panel, DC, wxPoint(0,0), g_XorMode );
} }
pos = ( (SCH_COMPONENT*) CurrentField->m_Parent )->m_Pos; pos = ( (SCH_COMPONENT*) currentField->GetParent() )->m_Pos;
/* Les positions sont caculees par la matrice TRANSPOSEE de la matrice /* Les positions sont caculees par la matrice TRANSPOSEE de la matrice
* de rotation-miroir */ * de rotation-miroir
*/
x1 = panel->GetScreen()->m_Curseur.x - pos.x; x1 = panel->GetScreen()->m_Curseur.x - pos.x;
y1 = panel->GetScreen()->m_Curseur.y - pos.y; y1 = panel->GetScreen()->m_Curseur.y - pos.y;
CurrentField->m_Pos.x = pos.x + Cmp->m_Transform[0][0] * x1 + Cmp->m_Transform[1][0] * y1;
CurrentField->m_Pos.y = pos.y + Cmp->m_Transform[0][1] * x1 + Cmp->m_Transform[1][1] * y1;
CurrentField->Draw( panel, DC, wxPoint(0,0), g_XorMode ); currentField->m_Pos.x = pos.x + component->m_Transform[0][0] * x1 + component->m_Transform[1][0] * y1;
currentField->m_Pos.y = pos.y + component->m_Transform[0][1] * x1 + component->m_Transform[1][1] * y1;
currentField->Draw( panel, DC, wxPoint(0,0), g_XorMode );
} }
@ -641,15 +226,21 @@ static void AbortMoveCmpField( WinEDA_DrawPanel* Panel, wxDC* DC )
{ {
Panel->ForceCloseManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL;
Panel->ManageCurseur = NULL; Panel->ManageCurseur = NULL;
if( CurrentField )
WinEDA_SchematicFrame* frame = (WinEDA_SchematicFrame*) Panel->GetParent();
SCH_CMP_FIELD* currentField = frame->GetCurrentField();
if( currentField )
{ {
CurrentField->m_AddExtraText = Multiflag; currentField->m_AddExtraText = frame->m_Multiflag;
CurrentField->Draw( Panel, DC, wxPoint(0,0), g_XorMode ); currentField->Draw( Panel, DC, wxPoint(0,0), g_XorMode );
CurrentField->m_Flags = 0; currentField->m_Flags = 0;
CurrentField->m_Pos = OldPos; currentField->m_Pos = frame->m_OldPos;
CurrentField->Draw( Panel, DC, wxPoint(0,0), g_XorMode ); currentField->Draw( Panel, DC, wxPoint(0,0), g_XorMode );
} }
CurrentField = NULL;
frame->SetCurrentField( NULL );
SAFE_DELETE( g_ItemToUndoCopy ); SAFE_DELETE( g_ItemToUndoCopy );
} }
@ -658,7 +249,7 @@ static void AbortMoveCmpField( WinEDA_DrawPanel* Panel, wxDC* DC )
void WinEDA_SchematicFrame::RotateCmpField( SCH_CMP_FIELD* Field, wxDC* DC ) void WinEDA_SchematicFrame::RotateCmpField( SCH_CMP_FIELD* Field, wxDC* DC )
/*********************************************************************************/ /*********************************************************************************/
{ {
int FieldNumber, flag; int fieldNdx, flag;
EDA_LibComponentStruct* Entry; EDA_LibComponentStruct* Entry;
if( Field == NULL ) if( Field == NULL )
@ -666,13 +257,13 @@ void WinEDA_SchematicFrame::RotateCmpField( SCH_CMP_FIELD* Field, wxDC* DC )
if( Field->m_Text == wxEmptyString ) if( Field->m_Text == wxEmptyString )
return; return;
SCH_COMPONENT* Cmp = (SCH_COMPONENT*) Field->m_Parent; SCH_COMPONENT* Cmp = (SCH_COMPONENT*) Field->GetParent();
FieldNumber = Field->m_FieldId; fieldNdx = Field->m_FieldId;
flag = 0; flag = 0;
if( FieldNumber == REFERENCE ) if( fieldNdx == REFERENCE )
{ {
Entry = FindLibPart( ( (SCH_COMPONENT*) Field->m_Parent )->m_ChipName.GetData(), Entry = FindLibPart( ( (SCH_COMPONENT*) Field->GetParent() )->m_ChipName.GetData(),
wxEmptyString, FIND_ROOT ); wxEmptyString, FIND_ROOT );
if( Entry != NULL ) if( Entry != NULL )
{ {
@ -702,26 +293,27 @@ void WinEDA_SchematicFrame::RotateCmpField( SCH_CMP_FIELD* Field, wxDC* DC )
void SCH_CMP_FIELD::Place( WinEDA_SchematicFrame* frame, wxDC* DC ) void SCH_CMP_FIELD::Place( WinEDA_SchematicFrame* frame, wxDC* DC )
/*********************************************************************/ /*********************************************************************/
{ {
int FieldNumber; int fieldNdx;
EDA_LibComponentStruct* Entry; EDA_LibComponentStruct* Entry;
frame->DrawPanel->ManageCurseur = NULL; frame->DrawPanel->ManageCurseur = NULL;
frame->DrawPanel->ForceCloseManageCurseur = NULL; frame->DrawPanel->ForceCloseManageCurseur = NULL;
SCH_COMPONENT* Cmp = (SCH_COMPONENT*) m_Parent; SCH_COMPONENT* component = (SCH_COMPONENT*) GetParent();
/* save old cmp in undo list */
if( g_ItemToUndoCopy && ( g_ItemToUndoCopy->Type() == Cmp->Type()) ) // save old cmp in undo list
if( g_ItemToUndoCopy && ( g_ItemToUndoCopy->Type() == component->Type()) )
{ {
Cmp->SwapData( (SCH_COMPONENT*) g_ItemToUndoCopy ); component->SwapData( (SCH_COMPONENT*) g_ItemToUndoCopy );
( (WinEDA_SchematicFrame*) frame )->SaveCopyInUndoList( Cmp, IS_CHANGED ); frame->SaveCopyInUndoList( component, IS_CHANGED );
Cmp->SwapData( (SCH_COMPONENT*) g_ItemToUndoCopy ); component->SwapData( (SCH_COMPONENT*) g_ItemToUndoCopy );
} }
FieldNumber = m_FieldId; fieldNdx = m_FieldId;
m_AddExtraText = 0; m_AddExtraText = 0;
if( FieldNumber == REFERENCE ) if( fieldNdx == REFERENCE )
{ {
Entry = FindLibPart( Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); Entry = FindLibPart( component->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( Entry != NULL ) if( Entry != NULL )
{ {
if( Entry->m_UnitCount > 1 ) if( Entry->m_UnitCount > 1 )
@ -733,7 +325,7 @@ void SCH_CMP_FIELD::Place( WinEDA_SchematicFrame* frame, wxDC* DC )
m_Flags = 0; m_Flags = 0;
frame->GetScreen()->SetCurItem( NULL ); frame->GetScreen()->SetCurItem( NULL );
frame->GetScreen()->SetModify(); frame->GetScreen()->SetModify();
CurrentField = NULL; frame->SetCurrentField( NULL );
} }
@ -813,6 +405,7 @@ void WinEDA_SchematicFrame::EditComponentValue( SCH_COMPONENT* Cmp, wxDC* DC )
Cmp->Display_Infos( this ); Cmp->Display_Infos( this );
} }
/*****************************************************************************************/ /*****************************************************************************************/
void WinEDA_SchematicFrame::EditComponentFootprint( SCH_COMPONENT* Cmp, wxDC* DC ) void WinEDA_SchematicFrame::EditComponentFootprint( SCH_COMPONENT* Cmp, wxDC* DC )
/*****************************************************************************************/ /*****************************************************************************************/
@ -866,52 +459,4 @@ void WinEDA_SchematicFrame::EditComponentFootprint( SCH_COMPONENT* Cmp, wxDC* DC
Cmp->Display_Infos( this ); Cmp->Display_Infos( this );
} }
/*****************************************************************************/
void WinEDA_ComponentPropertiesFrame::SetInitCmp( wxCommandEvent& event )
/*****************************************************************************/
/* Replace le composant en position normale, dimensions et positions
* fields comme definies en librairie
*/
{
EDA_LibComponentStruct* Entry;
if( m_Cmp == NULL )
return;
Entry = FindLibPart( m_Cmp->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( Entry == NULL )
return;
wxClientDC dc( m_Parent->DrawPanel );
m_Parent->DrawPanel->PrepareGraphicContext( &dc );
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, g_XorMode );
/* Mise aux valeurs par defaut des champs et orientation */
m_Cmp->GetField( REFERENCE )->m_Pos.x =
Entry->m_Prefix.m_Pos.x + m_Cmp->m_Pos.x;
m_Cmp->GetField( REFERENCE )->m_Pos.y =
Entry->m_Prefix.m_Pos.y + m_Cmp->m_Pos.y;
m_Cmp->GetField( REFERENCE )->m_Orient = Entry->m_Prefix.m_Orient;
m_Cmp->GetField( REFERENCE )->m_Size = Entry->m_Prefix.m_Size;
m_Cmp->GetField( REFERENCE )->m_HJustify = Entry->m_Prefix.m_HJustify;
m_Cmp->GetField( REFERENCE )->m_VJustify = Entry->m_Prefix.m_VJustify;
m_Cmp->GetField( VALUE )->m_Pos.x =
Entry->m_Name.m_Pos.x + m_Cmp->m_Pos.x;
m_Cmp->GetField( VALUE )->m_Pos.y =
Entry->m_Name.m_Pos.y + m_Cmp->m_Pos.y;
m_Cmp->GetField( VALUE )->m_Orient = Entry->m_Name.m_Orient;
m_Cmp->GetField( VALUE )->m_Size = Entry->m_Name.m_Size;
m_Cmp->GetField( VALUE )->m_HJustify = Entry->m_Name.m_HJustify;
m_Cmp->GetField( VALUE )->m_VJustify = Entry->m_Name.m_VJustify;
m_Cmp->SetRotationMiroir( CMP_NORMAL );
m_Parent->GetScreen()->SetModify();
RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, GR_DEFAULT_DRAWMODE );
EndModal( 1 );
}

View File

@ -378,7 +378,7 @@ void WinEDA_SchematicFrame::ConvertTextType( SCH_TEXT* Text,
/* add the new text in linked list if old text is in list */ /* add the new text in linked list if old text is in list */
if( (flags & IS_NEW) == 0 ) if( (flags & IS_NEW) == 0 )
{ {
newtext->Pnext = GetScreen()->EEDrawList; newtext->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = newtext; GetScreen()->EEDrawList = newtext;
GetScreen()->SetModify(); GetScreen()->SetModify();
} }

View File

@ -78,7 +78,7 @@ void CreateDummyCmp()
Text->m_Text = wxT( "??" ); Text->m_Text = wxT( "??" );
DummyCmp->m_Drawings = Square; DummyCmp->m_Drawings = Square;
Square->Pnext = Text; Square->SetNext( Text );
} }
@ -153,7 +153,7 @@ void DrawLibEntry( WinEDA_DrawPanel* panel, wxDC* DC,
if( (LibEntry->m_Name.m_Flags & IS_MOVED) == 0 ) if( (LibEntry->m_Name.m_Flags & IS_MOVED) == 0 )
LibEntry->m_Name.Draw( panel, DC, aOffset, color, DrawMode, NULL, TransMat ); LibEntry->m_Name.Draw( panel, DC, aOffset, color, DrawMode, NULL, TransMat );
for( Field = LibEntry->Fields; Field != NULL; Field = (LibDrawField*) Field->Pnext ) for( Field = LibEntry->Fields; Field != NULL; Field = Field->Next() )
{ {
if( Field->m_Text.IsEmpty() ) if( Field->m_Text.IsEmpty() )
return; return;

View File

@ -803,7 +803,8 @@ static LibEDA_BaseStruct* GetDrawEntry( WinEDA_DrawFrame* frame, FILE* f, char*
Head = Tail = New; Head = Tail = New;
else else
{ {
Tail->Pnext = New; Tail = New; Tail->SetNext( New );
Tail = New;
} }
} }
} }
@ -935,7 +936,7 @@ static bool GetLibEntryField( EDA_LibComponentStruct* LibEntry, char* line )
Field = new LibDrawField( NumOfField ); Field = new LibDrawField( NumOfField );
Field->Pnext = LibEntry->Fields; Field->SetNext( LibEntry->Fields );
LibEntry->Fields = Field; LibEntry->Fields = Field;
break; break;
} }
@ -1154,7 +1155,7 @@ void EDA_LibComponentStruct::SortDrawItems()
Bufentry = BufentryBase; Bufentry = BufentryBase;
for( ii = 0; ii < nbitems; ii++ ) for( ii = 0; ii < nbitems; ii++ )
{ {
(*Bufentry)->Pnext = *(Bufentry + 1); (*Bufentry)->SetNext( *(Bufentry + 1) );
Bufentry++; Bufentry++;
} }

View File

@ -428,7 +428,7 @@ void WinEDA_ErcFrame::DelERCMarkers( wxCommandEvent& event )
// Delete markers for the current screen // Delete markers for the current screen
DrawStruct = m_Parent->GetScreen()->EEDrawList; DrawStruct = m_Parent->GetScreen()->EEDrawList;
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext ) for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
{ {
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE ) if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
continue; continue;
@ -533,7 +533,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
Marker->m_Type = MARQ_ERC; Marker->m_Type = MARQ_ERC;
Marker->m_MarkFlags = WAR; Marker->m_MarkFlags = WAR;
screen = NetItemRef->m_SheetList.LastScreen(); screen = NetItemRef->m_SheetList.LastScreen();
Marker->Pnext = screen->EEDrawList; Marker->SetNext( screen->EEDrawList );
screen->EEDrawList = Marker; screen->EEDrawList = Marker;
g_EESchemaVar.NbErrorErc++; g_EESchemaVar.NbErrorErc++;
g_EESchemaVar.NbWarningErc++; g_EESchemaVar.NbWarningErc++;
@ -741,7 +741,7 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
fprintf( OutErc, "%s", CONV_TO_UTF8( msg ) ); fprintf( OutErc, "%s", CONV_TO_UTF8( msg ) );
DrawStruct = Sheet->LastDrawList(); DrawStruct = Sheet->LastDrawList();
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext ) for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
{ {
if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE ) if( DrawStruct->Type() != DRAW_MARKER_STRUCT_TYPE )
continue; continue;

View File

@ -216,7 +216,7 @@ SCH_SCREEN* WinEDA_SchematicFrame::CreateNewScreen(
NewScreen->m_Company = OldScreen->m_Company; NewScreen->m_Company = OldScreen->m_Company;
NewScreen->m_TimeStamp = TimeStamp; NewScreen->m_TimeStamp = TimeStamp;
NewScreen->Pback = OldScreen; NewScreen->SetBack( OldScreen );
return NewScreen; return NewScreen;
} }

View File

@ -218,7 +218,7 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC,
DrawLibItem->GetField( REFERENCE )->m_VJustify = Entry->m_Prefix.m_VJustify; DrawLibItem->GetField( REFERENCE )->m_VJustify = Entry->m_Prefix.m_VJustify;
/* Init des autres champs si predefinis dans la librairie */ /* Init des autres champs si predefinis dans la librairie */
for( Field = Entry->Fields; Field != NULL; Field = (LibDrawField*) Field->Pnext ) for( Field = Entry->Fields; Field != NULL; Field = Field->Next() )
{ {
if( Field->m_Text.IsEmpty() && Field->m_Name.IsEmpty() ) if( Field->m_Text.IsEmpty() && Field->m_Name.IsEmpty() )
continue; continue;

View File

@ -233,7 +233,7 @@ void WinEDA_HierFrame::BuildSheetList( DrawSheetPath* list,
m_Tree->Expand( menu ); m_Tree->Expand( menu );
list->Pop(); list->Pop();
} }
bs = bs->Pnext; bs = bs->Next();
} }
maxposx -= m_Tree->GetIndent(); maxposx -= m_Tree->GetIndent();

View File

@ -25,34 +25,37 @@ EDA_LibComponentStruct * CopyItem;
CopyItem = CopyLibEntryStruct( this, (EDA_LibComponentStruct*) ItemToCopy ); CopyItem = CopyLibEntryStruct( this, (EDA_LibComponentStruct*) ItemToCopy );
GetScreen()->AddItemToUndoList( (EDA_BaseStruct*) CopyItem ); GetScreen()->AddItemToUndoList( (EDA_BaseStruct*) CopyItem );
/* Clear current flags (which can be temporary set by a current edit command) */ /* Clear current flags (which can be temporary set by a current edit command) */
for ( item = CopyItem->m_Drawings; item != NULL; item = item->Pnext ) for( item = CopyItem->m_Drawings; item != NULL; item = item->Next() )
item->m_Flags = 0; item->m_Flags = 0;
/* Clear redo list, because after new save there is no redo to do */ /* Clear redo list, because after new save there is no redo to do */
while( GetScreen()->m_RedoList ) while( GetScreen()->m_RedoList )
{ {
item = GetScreen()->m_RedoList->Pnext; item = GetScreen()->m_RedoList->Next();
delete( GetScreen()->m_RedoList ); delete( GetScreen()->m_RedoList );
GetScreen()->m_RedoList = item; GetScreen()->m_RedoList = item;
} }
} }
/******************************************************/ /******************************************************/
bool WinEDA_LibeditFrame::GetComponentFromRedoList() bool WinEDA_LibeditFrame::GetComponentFromRedoList()
/******************************************************/ /******************************************************/
/* Redo the last edition: /* Redo the last edition:
- Place the current edited library component in undo list * - Place the current edited library component in undo list
- Get old version of the current edited library component * - Get old version of the current edited library component
* @return FALSE if nothing done, else TRUE * @return FALSE if nothing done, else TRUE
*/ */
{ {
if ( GetScreen()->m_RedoList == NULL ) return FALSE; if( GetScreen()->m_RedoList == NULL )
return FALSE;
GetScreen()->AddItemToUndoList( (EDA_BaseStruct*) CurrentLibEntry ); GetScreen()->AddItemToUndoList( (EDA_BaseStruct*) CurrentLibEntry );
CurrentLibEntry = CurrentLibEntry =
(EDA_LibComponentStruct*) GetScreen()->GetItemFromRedoList(); (EDA_LibComponentStruct*) GetScreen()->GetItemFromRedoList();
if ( CurrentLibEntry ) CurrentLibEntry->Pnext = NULL; if( CurrentLibEntry )
CurrentLibEntry->SetNext( NULL );
CurrentDrawItem = NULL; CurrentDrawItem = NULL;
GetScreen()->SetModify(); GetScreen()->SetModify();
ReCreateHToolbar(); ReCreateHToolbar();
@ -61,22 +64,26 @@ bool WinEDA_LibeditFrame::GetComponentFromRedoList()
return TRUE; return TRUE;
} }
/******************************************************/ /******************************************************/
bool WinEDA_LibeditFrame::GetComponentFromUndoList() bool WinEDA_LibeditFrame::GetComponentFromUndoList()
/******************************************************/ /******************************************************/
/* Undo the last edition: /* Undo the last edition:
- Place the current edited library component in Redo list * - Place the current edited library component in Redo list
- Get old version of the current edited library component * - Get old version of the current edited library component
* @return FALSE if nothing done, else TRUE * @return FALSE if nothing done, else TRUE
*/ */
{ {
if ( GetScreen()->m_UndoList == NULL ) return FALSE; if( GetScreen()->m_UndoList == NULL )
return FALSE;
GetScreen()->AddItemToRedoList( (EDA_BaseStruct*) CurrentLibEntry ); GetScreen()->AddItemToRedoList( (EDA_BaseStruct*) CurrentLibEntry );
CurrentLibEntry = CurrentLibEntry =
(EDA_LibComponentStruct*) GetScreen()->GetItemFromUndoList(); (EDA_LibComponentStruct*) GetScreen()->GetItemFromUndoList();
if ( CurrentLibEntry ) CurrentLibEntry->Pnext = NULL; if( CurrentLibEntry )
CurrentLibEntry->SetNext( NULL );
CurrentDrawItem = NULL; CurrentDrawItem = NULL;
GetScreen()->SetModify(); GetScreen()->SetModify();
ReCreateHToolbar(); ReCreateHToolbar();

View File

@ -29,10 +29,10 @@ static wxPoint StartCursor, LastTextPosition;
static void ExitMoveField( WinEDA_DrawPanel* Panel, wxDC* DC ) static void ExitMoveField( WinEDA_DrawPanel* Panel, wxDC* DC )
/***********************************************************/ /***********************************************************/
{ {
Panel->ManageCurseur = NULL; Panel->ManageCurseur = NULL;
Panel->ForceCloseManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL;
if(CurrentDrawItem == NULL) return; if( CurrentDrawItem == NULL )
return;
wxPoint curpos; wxPoint curpos;
curpos = Panel->GetScreen()->m_Curseur; curpos = Panel->GetScreen()->m_Curseur;
@ -45,7 +45,6 @@ static void ExitMoveField(WinEDA_DrawPanel * Panel, wxDC * DC)
} }
/****************************************************************************/ /****************************************************************************/
void WinEDA_LibeditFrame::StartMoveField( wxDC* DC, LibDrawField* field ) void WinEDA_LibeditFrame::StartMoveField( wxDC* DC, LibDrawField* field )
/****************************************************************************/ /****************************************************************************/
@ -53,7 +52,8 @@ void WinEDA_LibeditFrame::StartMoveField(wxDC * DC, LibDrawField *field)
{ {
wxPoint startPos; wxPoint startPos;
if( (CurrentLibEntry == NULL) || ( field == NULL ) ) return; if( (CurrentLibEntry == NULL) || ( field == NULL ) )
return;
CurrentDrawItem = field; CurrentDrawItem = field;
LastTextPosition = field->m_Pos; LastTextPosition = field->m_Pos;
CurrentDrawItem->m_Flags |= IS_MOVED; CurrentDrawItem->m_Flags |= IS_MOVED;
@ -72,6 +72,7 @@ wxPoint startPos;
DrawPanel->CursorOn( DC ); DrawPanel->CursorOn( DC );
} }
/*****************************************************************/ /*****************************************************************/
/* Routine d'affichage du texte 'Field' en cours de deplacement. */ /* Routine d'affichage du texte 'Field' en cours de deplacement. */
/* Routine normalement attachee au curseur */ /* Routine normalement attachee au curseur */
@ -81,7 +82,8 @@ static void ShowMoveField(WinEDA_DrawPanel * panel, wxDC *DC, bool erase)
int color; int color;
LibDrawField* Field = (LibDrawField*) CurrentDrawItem; LibDrawField* Field = (LibDrawField*) CurrentDrawItem;
if( (CurrentLibEntry == NULL) || (Field == NULL) ) return; if( (CurrentLibEntry == NULL) || (Field == NULL) )
return;
switch( Field->m_FieldId ) switch( Field->m_FieldId )
{ {
@ -106,7 +108,8 @@ LibDrawField *Field = (LibDrawField *)CurrentDrawItem;
TransMat[0][0] = 1; TransMat[1][1] = -1; TransMat[0][0] = 1; TransMat[1][1] = -1;
TransMat[1][0] = TransMat[0][1] = 0; TransMat[1][0] = TransMat[0][1] = 0;
if( Field->m_Attributs & TEXT_NO_VISIBLE ) color = DARKGRAY; if( Field->m_Attributs & TEXT_NO_VISIBLE )
color = DARKGRAY;
if( erase ) if( erase )
Field->Draw( panel, DC, wxPoint( 0, 0 ), Field->Draw( panel, DC, wxPoint( 0, 0 ),
color, color,
@ -123,13 +126,15 @@ LibDrawField *Field = (LibDrawField *)CurrentDrawItem;
g_XorMode, &text, TransMat ); g_XorMode, &text, TransMat );
} }
/*******************************************************************/ /*******************************************************************/
void WinEDA_LibeditFrame::PlaceField( wxDC* DC, LibDrawField* Field ) void WinEDA_LibeditFrame::PlaceField( wxDC* DC, LibDrawField* Field )
/*******************************************************************/ /*******************************************************************/
{ {
int color; int color;
if(Field == NULL ) return; if( Field == NULL )
return;
switch( Field->m_FieldId ) switch( Field->m_FieldId )
{ {
@ -149,7 +154,8 @@ int color;
Field->m_Flags = 0; Field->m_Flags = 0;
if( (Field->m_Attributs & TEXT_NO_VISIBLE) != 0 ) color = DARKGRAY; if( (Field->m_Attributs & TEXT_NO_VISIBLE) != 0 )
color = DARKGRAY;
Field->m_Pos.x = GetScreen()->m_Curseur.x; Field->m_Pos.x = GetScreen()->m_Curseur.x;
Field->m_Pos.y = -GetScreen()->m_Curseur.y; Field->m_Pos.y = -GetScreen()->m_Curseur.y;
int LineWidth = MAX( Field->m_Width, g_DrawMinimunLineWidth ); int LineWidth = MAX( Field->m_Width, g_DrawMinimunLineWidth );
@ -180,7 +186,8 @@ void WinEDA_LibeditFrame::EditField(wxDC * DC, LibDrawField *Field)
int color; int color;
int LineWidth = MAX( Field->m_Width, g_DrawMinimunLineWidth ); int LineWidth = MAX( Field->m_Width, g_DrawMinimunLineWidth );
if( Field == NULL) return; if( Field == NULL )
return;
switch( Field->m_FieldId ) switch( Field->m_FieldId )
{ {
@ -199,7 +206,8 @@ void WinEDA_LibeditFrame::EditField(wxDC * DC, LibDrawField *Field)
break; break;
} }
if( Field->m_Attributs & TEXT_NO_VISIBLE ) color = DARKGRAY; if( Field->m_Attributs & TEXT_NO_VISIBLE )
color = DARKGRAY;
Text = Field->m_Text; Text = Field->m_Text;
Get_Message( title, _( "Edit field" ), Text, this ); Get_Message( title, _( "Edit field" ), Text, this );
@ -217,9 +225,11 @@ void WinEDA_LibeditFrame::EditField(wxDC * DC, LibDrawField *Field)
SaveCopyInUndoList( CurrentLibEntry ); SaveCopyInUndoList( CurrentLibEntry );
Field->m_Text = Text; Field->m_Text = Text;
} }
else DisplayError(this, _("No new text: no change") ); else
DisplayError( this, _( "No new text: no change" ) );
if( Field->m_Flags == 0 ) GRSetDrawMode(DC, GR_DEFAULT_DRAWMODE); if( Field->m_Flags == 0 )
GRSetDrawMode( DC, GR_DEFAULT_DRAWMODE );
DrawGraphicText( DrawPanel, DC, wxPoint( Field->m_Pos.x, -Field->m_Pos.y ), DrawGraphicText( DrawPanel, DC, wxPoint( Field->m_Pos.x, -Field->m_Pos.y ),
color, Field->m_Text, color, Field->m_Text,
@ -229,22 +239,27 @@ void WinEDA_LibeditFrame::EditField(wxDC * DC, LibDrawField *Field)
GetScreen()->SetModify(); GetScreen()->SetModify();
if ( Field->m_FieldId == VALUE ) ReCreateHToolbar(); if( Field->m_FieldId == VALUE )
ReCreateHToolbar();
} }
/********************************************************************/ /********************************************************************/
void WinEDA_LibeditFrame::RotateField( wxDC* DC, LibDrawField* Field ) void WinEDA_LibeditFrame::RotateField( wxDC* DC, LibDrawField* Field )
/********************************************************************/ /********************************************************************/
/* Routine de modification de l'orientation ( Horiz ou Vert. ) du champ. /* Routine de modification de l'orientation ( Horiz ou Vert. ) du champ.
si un champ est en cours d'edition, modif de celui ci. * si un champ est en cours d'edition, modif de celui ci.
sinon Modif du champ pointe par la souris * sinon Modif du champ pointe par la souris
*/ */
{ {
int color; int color;
if( Field == NULL) return; if( Field == NULL )
return;
GetScreen()->SetModify(); GetScreen()->SetModify();
switch( Field->m_FieldId ) switch( Field->m_FieldId )
{ {
case REFERENCE: case REFERENCE:
@ -260,7 +275,8 @@ int color;
break; break;
} }
if( (Field->m_Attributs & TEXT_NO_VISIBLE) != 0 ) color = DARKGRAY; if( (Field->m_Attributs & TEXT_NO_VISIBLE) != 0 )
color = DARKGRAY;
DrawPanel->CursorOff( DC ); DrawPanel->CursorOff( DC );
@ -272,10 +288,13 @@ int LineWidth = MAX(Field->m_Width, g_DrawMinimunLineWidth);
Field->m_Size, Field->m_Size,
Field->m_HJustify, Field->m_VJustify, LineWidth ); Field->m_HJustify, Field->m_VJustify, LineWidth );
if( Field->m_Orient) Field->m_Orient = 0; if( Field->m_Orient )
else Field->m_Orient = 1; Field->m_Orient = 0;
else
Field->m_Orient = 1;
if( Field->m_Flags == 0 ) GRSetDrawMode(DC, GR_DEFAULT_DRAWMODE); if( Field->m_Flags == 0 )
GRSetDrawMode( DC, GR_DEFAULT_DRAWMODE );
DrawGraphicText( DrawPanel, DC, wxPoint( Field->m_Pos.x, -Field->m_Pos.y ), DrawGraphicText( DrawPanel, DC, wxPoint( Field->m_Pos.x, -Field->m_Pos.y ),
color, Field->m_Text, color, Field->m_Text,
@ -285,16 +304,18 @@ int LineWidth = MAX(Field->m_Width, g_DrawMinimunLineWidth);
DrawPanel->CursorOn( DC ); DrawPanel->CursorOn( DC );
} }
/****************************************************************************/ /****************************************************************************/
LibDrawField* WinEDA_LibeditFrame::LocateField( EDA_LibComponentStruct* LibEntry ) LibDrawField* WinEDA_LibeditFrame::LocateField( EDA_LibComponentStruct* LibEntry )
/****************************************************************************/ /****************************************************************************/
/* Locate the component fiels (ref, name or auxiliary fields) under the mouse cursor /* Locate the component fiels (ref, name or auxiliary fields) under the mouse cursor
return: * return:
pointer on the field (or NULL ) * pointer on the field (or NULL )
*/ */
{ {
wxPoint refpos; wxPoint refpos;
refpos.x = GetScreen()->m_Curseur.x; refpos.x = GetScreen()->m_Curseur.x;
refpos.y = -GetScreen()->m_Curseur.y; // Y axis is from bottom to top in library refpos.y = -GetScreen()->m_Curseur.y; // Y axis is from bottom to top in library
/* Test reference */ /* Test reference */
@ -306,28 +327,32 @@ LibDrawField * WinEDA_LibeditFrame::LocateField(EDA_LibComponentStruct *LibEntry
return &LibEntry->m_Prefix; return &LibEntry->m_Prefix;
/* Localisation des autres fields */ /* Localisation des autres fields */
for (LibDrawField * Field = LibEntry->Fields; Field != NULL; for( LibDrawField* field = LibEntry->Fields; field; field = field->Next() )
Field = (LibDrawField*)Field->Pnext)
{ {
if ( Field->m_Text.IsEmpty() ) continue; if( field->m_Text.IsEmpty() )
if (Field->HitTest(refpos) ) continue;
return(Field);
if( field->HitTest( refpos ) )
return field;
} }
return NULL; return NULL;
} }
/********************************************************************************/ /********************************************************************************/
LibEDA_BaseStruct* WinEDA_LibeditFrame::LocateItemUsingCursor() LibEDA_BaseStruct* WinEDA_LibeditFrame::LocateItemUsingCursor()
/********************************************************************************/ /********************************************************************************/
{ {
LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; LibEDA_BaseStruct* DrawEntry = CurrentDrawItem;
if ( CurrentLibEntry == NULL ) return NULL; if( CurrentLibEntry == NULL )
return NULL;
if( (DrawEntry == NULL) || (DrawEntry->m_Flags == 0) ) if( (DrawEntry == NULL) || (DrawEntry->m_Flags == 0) )
{ // Simple localisation des elements { // Simple localisation des elements
DrawEntry = LocatePin(GetScreen()->m_Curseur, CurrentLibEntry, CurrentUnit, CurrentConvert); DrawEntry = LocatePin(
GetScreen()->m_Curseur, CurrentLibEntry, CurrentUnit, CurrentConvert );
if( DrawEntry == NULL ) if( DrawEntry == NULL )
{ {
DrawEntry = CurrentDrawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(), DrawEntry = CurrentDrawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(),
@ -336,7 +361,8 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::LocateItemUsingCursor()
} }
if( DrawEntry == NULL ) if( DrawEntry == NULL )
{ {
DrawEntry = CurrentDrawItem = LocateDrawItem((SCH_SCREEN*)GetScreen(), GetScreen()->m_Curseur, CurrentLibEntry,CurrentUnit, DrawEntry = CurrentDrawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(),
GetScreen()->m_Curseur, CurrentLibEntry, CurrentUnit,
CurrentConvert, LOCATE_ALL_DRAW_ITEM ); CurrentConvert, LOCATE_ALL_DRAW_ITEM );
} }
if( DrawEntry == NULL ) if( DrawEntry == NULL )

View File

@ -212,7 +212,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
if( !Failed ) if( !Failed )
{ {
SegmentStruct->Pnext = screen->EEDrawList; SegmentStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = SegmentStruct; screen->EEDrawList = SegmentStruct;
} }
break; break;
@ -251,7 +251,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
{ {
RaccordStruct->m_Size.x -= RaccordStruct->m_Pos.x; RaccordStruct->m_Size.x -= RaccordStruct->m_Pos.x;
RaccordStruct->m_Size.y -= RaccordStruct->m_Pos.y; RaccordStruct->m_Size.y -= RaccordStruct->m_Pos.y;
RaccordStruct->Pnext = screen->EEDrawList; RaccordStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = RaccordStruct; screen->EEDrawList = RaccordStruct;
} }
break; break;
@ -294,7 +294,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
if( !Failed ) if( !Failed )
{ {
PolylineStruct->Pnext = screen->EEDrawList; PolylineStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = PolylineStruct; screen->EEDrawList = PolylineStruct;
} }
break; break;
@ -314,7 +314,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
} }
else else
{ {
ConnectionStruct->Pnext = screen->EEDrawList; ConnectionStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = ConnectionStruct; screen->EEDrawList = ConnectionStruct;
} }
break; break;
@ -331,7 +331,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
{ {
NoConnectStruct = new DrawNoConnectStruct( pos ); NoConnectStruct = new DrawNoConnectStruct( pos );
NoConnectStruct->Pnext = screen->EEDrawList; NoConnectStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = NoConnectStruct; screen->EEDrawList = NoConnectStruct;
} }
break; break;
@ -362,7 +362,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
sscanf( text + 3, "%X", &ii ); sscanf( text + 3, "%X", &ii );
MarkerStruct->m_MarkFlags = ii; MarkerStruct->m_MarkFlags = ii;
} }
MarkerStruct->Pnext = screen->EEDrawList; MarkerStruct->SetNext( screen->EEDrawList );
screen->EEDrawList = MarkerStruct; screen->EEDrawList = MarkerStruct;
} }
break; break;
@ -452,7 +452,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
} }
if( Struct ) if( Struct )
{ {
Struct->Pnext = screen->EEDrawList; Struct->SetNext( screen->EEDrawList );
screen->EEDrawList = Struct; screen->EEDrawList = Struct;
} }
} }
@ -480,7 +480,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F
{ {
Pnext = screen->EEDrawList; Pnext = screen->EEDrawList;
screen->EEDrawList = screen->EEDrawList->Next(); screen->EEDrawList = screen->EEDrawList->Next();
Pnext->Pnext = Phead; Pnext->SetNext( Phead );
Phead = Pnext; Phead = Pnext;
} }
@ -825,9 +825,9 @@ static int ReadPartDescr( wxWindow* frame, char* Line, FILE* f,
if( !Failed ) if( !Failed )
{ {
component->Pnext = Window->EEDrawList; component->SetNext( Window->EEDrawList );
Window->EEDrawList = component; Window->EEDrawList = component;
component->m_Parent = Window; component->SetParent( Window );
} }
return Failed; /* Fin lecture 1 composant */ return Failed; /* Fin lecture 1 composant */
@ -965,7 +965,7 @@ static int ReadSheetDescr( wxWindow* frame, char* Line, FILE* f, BASE_SCREEN* Wi
if( SheetStruct->m_Label == NULL ) if( SheetStruct->m_Label == NULL )
OldSheetLabel = SheetStruct->m_Label = SheetLabelStruct; OldSheetLabel = SheetStruct->m_Label = SheetLabelStruct;
else else
OldSheetLabel->Pnext = (EDA_BaseStruct*) SheetLabelStruct; OldSheetLabel->SetNext( (EDA_BaseStruct*) SheetLabelStruct );
OldSheetLabel = SheetLabelStruct; OldSheetLabel = SheetLabelStruct;
/* Lecture des coordonnees */ /* Lecture des coordonnees */
@ -1017,9 +1017,9 @@ static int ReadSheetDescr( wxWindow* frame, char* Line, FILE* f, BASE_SCREEN* Wi
} }
if( !Failed ) if( !Failed )
{ {
SheetStruct->Pnext = Window->EEDrawList; SheetStruct->SetNext( Window->EEDrawList );
Window->EEDrawList = SheetStruct; Window->EEDrawList = SheetStruct;
SheetStruct->m_Parent = Window; SheetStruct->SetParent( Window );
} }
return Failed; /* Fin lecture 1 composant */ return Failed; /* Fin lecture 1 composant */
} }

View File

@ -165,12 +165,12 @@ SCH_ITEM* PickStruct( EDA_Rect& block, BASE_SCREEN* screen, int SearchMask )
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
PickedItem = new DrawPickedStruct( DrawStruct ); PickedItem = new DrawPickedStruct( DrawStruct );
PickedItem->Pnext = PickedList; PickedItem->SetNext( PickedList );
PickedList = PickedItem; PickedList = PickedItem;
} }
} }
if( PickedList && PickedList->Pnext == NULL ) if( PickedList && PickedList->Next() == NULL )
{ {
/* Only one item was picked - convert to scalar form (no list): */ /* Only one item was picked - convert to scalar form (no list): */
PickedItem = PickedList; PickedItem = PickedList;
@ -1192,7 +1192,7 @@ Hierarchical_PIN_Sheet_Struct* LocateSheetLabel( DrawSheetStruct* Sheet, const w
&& (pos.x <= maxx) && (pos.x <= maxx)
&& (pos.x >= minx) ) && (pos.x >= minx) )
return SheetLabel; return SheetLabel;
SheetLabel = (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Pnext; SheetLabel = SheetLabel->Next();
} }
return NULL; return NULL;

View File

@ -289,7 +289,7 @@ void Write_GENERIC_NetList( WinEDA_SchematicFrame* frame,
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
for( SchItem = sheet->LastDrawList(); SchItem != NULL; SchItem = SchItem->Pnext ) for( SchItem = sheet->LastDrawList(); SchItem != NULL; SchItem = SchItem->Next() )
{ {
SchItem = Component = FindNextComponentAndCreatPinList( SchItem, sheet ); SchItem = Component = FindNextComponentAndCreatPinList( SchItem, sheet );
@ -413,7 +413,7 @@ static void WriteNetListPspice( WinEDA_SchematicFrame* frame, FILE* f,
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Pnext ) for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Next() )
{ {
wxChar ident; wxChar ident;
if( DrawList->Type() != TYPE_SCH_TEXT ) if( DrawList->Type() != TYPE_SCH_TEXT )
@ -467,7 +467,7 @@ static void WriteNetListPspice( WinEDA_SchematicFrame* frame, FILE* f,
ClearUsedFlags(); /* Reset the flags FlagControlMulti in all schematic files*/ ClearUsedFlags(); /* Reset the flags FlagControlMulti in all schematic files*/
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Pnext ) for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Next() )
{ {
DrawList = Component = FindNextComponentAndCreatPinList( DrawList, sheet ); DrawList = Component = FindNextComponentAndCreatPinList( DrawList, sheet );
if( Component == NULL ) if( Component == NULL )
@ -556,7 +556,7 @@ static void WriteNetListPCBNEW( WinEDA_SchematicFrame* frame, FILE* f, bool with
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Pnext ) for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Next() )
{ {
DrawList = Component = FindNextComponentAndCreatPinList( DrawList, sheet ); DrawList = Component = FindNextComponentAndCreatPinList( DrawList, sheet );
if( Component == NULL ) if( Component == NULL )
@ -771,7 +771,7 @@ static void FindAllsInstancesOfComponent( SCH_COMPONENT* Component_in,
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
for( SchItem = sheet->LastDrawList(); SchItem; SchItem = SchItem->Pnext ) for( SchItem = sheet->LastDrawList(); SchItem; SchItem = SchItem->Next() )
{ {
if( SchItem->Type() != TYPE_SCH_COMPONENT ) if( SchItem->Type() != TYPE_SCH_COMPONENT )
continue; continue;
@ -960,7 +960,7 @@ static void WriteNetListCADSTAR( WinEDA_SchematicFrame* frame, FILE* f )
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Pnext ) for( DrawList = sheet->LastDrawList(); DrawList != NULL; DrawList = DrawList->Next() )
{ {
DrawList = Component = FindNextComponentAndCreatPinList( DrawList, sheet ); DrawList = Component = FindNextComponentAndCreatPinList( DrawList, sheet );
if( Component == NULL ) if( Component == NULL )

View File

@ -489,7 +489,7 @@ static int ListeObjetConnection( DrawSheetPath* sheetlist, ObjetNetListStruct* O
DrawSheetPath list; DrawSheetPath list;
DrawList = sheetlist->LastScreen()->EEDrawList; DrawList = sheetlist->LastScreen()->EEDrawList;
for( ; DrawList; DrawList = DrawList->Pnext ) for( ; DrawList; DrawList = DrawList->Next() )
{ {
switch( DrawList->Type() ) switch( DrawList->Type() )
{ {
@ -678,7 +678,7 @@ static int ListeObjetConnection( DrawSheetPath* sheetlist, ObjetNetListStruct* O
list.Push( STRUCT ); list.Push( STRUCT );
SheetLabel = STRUCT->m_Label; SheetLabel = STRUCT->m_Label;
for( ; SheetLabel != NULL; for( ; SheetLabel != NULL;
SheetLabel = (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Pnext ) SheetLabel = SheetLabel->Next() )
{ {
ii = IsBusLabel( SheetLabel->m_Text ); ii = IsBusLabel( SheetLabel->m_Text );
if( ObjNet ) if( ObjNet )

View File

@ -135,7 +135,7 @@ void WinEDA_LibeditFrame::InitEditOnePin()
/* Marquage des pins a traiter,Si edition d'une pin non deja selectionnee */ /* Marquage des pins a traiter,Si edition d'une pin non deja selectionnee */
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -200,7 +200,7 @@ void WinEDA_LibeditFrame::PlacePin( wxDC* DC )
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
// Tst for an other pin in same new position: // Tst for an other pin in same new position:
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -239,7 +239,7 @@ void WinEDA_LibeditFrame::PlacePin( wxDC* DC )
/* Put linked pins in new position, and clear flags */ /* Put linked pins in new position, and clear flags */
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -276,7 +276,7 @@ void WinEDA_PinPropertiesFrame::SetPinOrient( int neworient )
RefPin->m_Orient = neworient; RefPin->m_Orient = neworient;
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->m_Flags == 0 ) if( Pin->m_Flags == 0 )
continue; continue;
@ -302,7 +302,7 @@ void WinEDA_LibeditFrame::StartMovePin( wxDC* DC )
/* Marquage des pins a traiter */ /* Marquage des pins a traiter */
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
Pin->m_Flags = 0; Pin->m_Flags = 0;
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
@ -381,7 +381,7 @@ void WinEDA_PinPropertiesFrame::SetPinShape( int newshape )
CurrentPin->Display_Infos_DrawEntry( m_Parent ); CurrentPin->Display_Infos_DrawEntry( m_Parent );
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -414,7 +414,7 @@ void WinEDA_PinPropertiesFrame::SetPinType( int newtype )
m_Parent->GetScreen()->SetModify(); m_Parent->GetScreen()->SetModify();
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -450,7 +450,7 @@ void WinEDA_PinPropertiesFrame::SetPinName( const wxString& newname, int newsize
/* Traitement des autres pins */ /* Traitement des autres pins */
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -492,7 +492,7 @@ void WinEDA_PinPropertiesFrame::SetPinNum( const wxString& newnum, int newsize )
m_Parent->GetScreen()->SetModify(); m_Parent->GetScreen()->SetModify();
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -539,7 +539,8 @@ void WinEDA_LibeditFrame::DeletePin( wxDC* DC,
{ {
if( DrawItem->Type() != COMPONENT_PIN_DRAW_TYPE ) if( DrawItem->Type() != COMPONENT_PIN_DRAW_TYPE )
{ {
DrawItem = DrawItem->Next(); continue; DrawItem = DrawItem->Next();
continue;
} }
Pin = (LibDrawPin*) DrawItem; Pin = (LibDrawPin*) DrawItem;
DrawItem = DrawItem->Next(); DrawItem = DrawItem->Next();
@ -602,7 +603,7 @@ void WinEDA_LibeditFrame::CreatePin( wxDC* DC )
else else
CurrentPin->m_Attributs &= ~PINNOTDRAW; CurrentPin->m_Attributs &= ~PINNOTDRAW;
CurrentPin->Pnext = CurrentLibEntry->m_Drawings; CurrentPin->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = CurrentPin; CurrentLibEntry->m_Drawings = CurrentPin;
CurrentLibEntry->SortDrawItems(); CurrentLibEntry->SortDrawItems();
@ -725,7 +726,7 @@ void WinEDA_PinPropertiesFrame::SetAttributsPin( bool draw,
CurrentPin->m_Attributs &= ~PINNOTDRAW; CurrentPin->m_Attributs &= ~PINNOTDRAW;
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->m_Flags == 0 ) if( Pin->m_Flags == 0 )
continue; continue;
@ -765,7 +766,7 @@ void WinEDA_PinPropertiesFrame::NewSizePin( int newsize )
if( g_EditPinByPinIsOn == FALSE ) if( g_EditPinByPinIsOn == FALSE )
{ {
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -805,7 +806,7 @@ static void CreateImagePins( LibDrawPin* Pin )
NewPin->m_Convert = 1; NewPin->m_Convert = 1;
else else
NewPin->m_Convert = 2; NewPin->m_Convert = 2;
NewPin->Pnext = CurrentLibEntry->m_Drawings; NewPin->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = NewPin; CurrentLibEntry->m_Drawings = NewPin;
} }
@ -821,7 +822,7 @@ static void CreateImagePins( LibDrawPin* Pin )
if( CurrentConvert != 0 ) if( CurrentConvert != 0 )
NewPin->m_Convert = 1; NewPin->m_Convert = 1;
NewPin->m_Unit = ii; NewPin->m_Unit = ii;
NewPin->Pnext = CurrentLibEntry->m_Drawings; NewPin->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = NewPin; CurrentLibEntry->m_Drawings = NewPin;
/* Creation pour la representation "Convert" */ /* Creation pour la representation "Convert" */
@ -832,7 +833,7 @@ static void CreateImagePins( LibDrawPin* Pin )
NewPin->m_Convert = 2; NewPin->m_Convert = 2;
if( Pin->m_Unit != 0 ) if( Pin->m_Unit != 0 )
NewPin->m_Unit = ii; NewPin->m_Unit = ii;
NewPin->Pnext = CurrentLibEntry->m_Drawings; NewPin->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = NewPin; CurrentLibEntry->m_Drawings = NewPin;
} }
} }
@ -861,7 +862,7 @@ void WinEDA_LibeditFrame::GlobalSetPins( wxDC* DC,
GetScreen()->SetModify(); GetScreen()->SetModify();
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE )
continue; continue;
@ -911,7 +912,7 @@ void WinEDA_LibeditFrame::RepeatPinItem( wxDC* DC, LibDrawPin* SourcePin )
return; return;
Pin = SourcePin->GenCopy(); Pin = SourcePin->GenCopy();
Pin->Pnext = CurrentLibEntry->m_Drawings; Pin->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = Pin; CurrentLibEntry->m_Drawings = Pin;
Pin->m_Flags = IS_NEW; Pin->m_Flags = IS_NEW;
@ -961,7 +962,8 @@ bool WinEDA_LibeditFrame::TestPins( EDA_LibComponentStruct* LibEntry )
// Test des pins ( duplicates...) // Test des pins ( duplicates...)
{ {
int nb_pins, ii, error; int nb_pins, ii, error;
LibDrawPin* Pin, ** PinList; LibDrawPin* Pin;
LibDrawPin** PinList;
wxString msg; wxString msg;
if( CurrentLibEntry == NULL ) if( CurrentLibEntry == NULL )
@ -969,7 +971,7 @@ bool WinEDA_LibeditFrame::TestPins( EDA_LibComponentStruct* LibEntry )
// Construction de la liste des pins: // Construction de la liste des pins:
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( nb_pins = 0; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( nb_pins = 0; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() == COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() == COMPONENT_PIN_DRAW_TYPE )
nb_pins++; nb_pins++;
@ -977,7 +979,7 @@ bool WinEDA_LibeditFrame::TestPins( EDA_LibComponentStruct* LibEntry )
PinList = (LibDrawPin**) MyZMalloc( (nb_pins + 1) * sizeof(LibDrawPin*) ); PinList = (LibDrawPin**) MyZMalloc( (nb_pins + 1) * sizeof(LibDrawPin*) );
Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings; Pin = (LibDrawPin*) CurrentLibEntry->m_Drawings;
for( ii = 0; Pin != NULL; Pin = (LibDrawPin*) Pin->Pnext ) for( ii = 0; Pin != NULL; Pin = Pin->Next() )
{ {
if( Pin->Type() == COMPONENT_PIN_DRAW_TYPE ) if( Pin->Type() == COMPONENT_PIN_DRAW_TYPE )
PinList[ii++] = Pin; PinList[ii++] = Pin;
@ -993,23 +995,29 @@ bool WinEDA_LibeditFrame::TestPins( EDA_LibComponentStruct* LibEntry )
wxString aux_msg, StringPinNum; wxString aux_msg, StringPinNum;
LibDrawPin* curr_pin = PinList[ii]; LibDrawPin* curr_pin = PinList[ii];
Pin = PinList[ii - 1]; Pin = PinList[ii - 1];
if( Pin->m_PinNum != curr_pin->m_PinNum ) if( Pin->m_PinNum != curr_pin->m_PinNum )
continue; continue;
if( Pin->m_Convert != curr_pin->m_Convert ) if( Pin->m_Convert != curr_pin->m_Convert )
continue; continue;
if( Pin->m_Unit != curr_pin->m_Unit ) if( Pin->m_Unit != curr_pin->m_Unit )
continue; continue;
error++; error++;
curr_pin->ReturnPinStringNum( StringPinNum ); curr_pin->ReturnPinStringNum( StringPinNum );
msg.Printf( _( "Duplicate Pin %4.4s (Pin %s loc %d, %d, and Pin %s loc %d, %d)" ), msg.Printf( _( "Duplicate Pin %4.4s (Pin %s loc %d, %d, and Pin %s loc %d, %d)" ),
StringPinNum.GetData(), StringPinNum.GetData(),
curr_pin->m_PinName.GetData(), curr_pin->m_Pos.x, -curr_pin->m_Pos.y, curr_pin->m_PinName.GetData(), curr_pin->m_Pos.x, -curr_pin->m_Pos.y,
Pin->m_PinName.GetData(), Pin->m_Pos.x, -Pin->m_Pos.y ); Pin->m_PinName.GetData(), Pin->m_Pos.x, -Pin->m_Pos.y );
if( CurrentLibEntry->m_UnitCount > 1 ) if( CurrentLibEntry->m_UnitCount > 1 )
{ {
aux_msg.Printf( _( " Part %d" ), curr_pin->m_Unit ); aux_msg.Printf( _( " Part %d" ), curr_pin->m_Unit );
msg += aux_msg; msg += aux_msg;
} }
if( g_AsDeMorgan ) if( g_AsDeMorgan )
{ {
if( curr_pin->m_Convert ) if( curr_pin->m_Convert )
@ -1017,6 +1025,7 @@ bool WinEDA_LibeditFrame::TestPins( EDA_LibComponentStruct* LibEntry )
else else
msg += _( " Normal" ); msg += _( " Normal" );
} }
DisplayError( this, msg ); DisplayError( this, msg );
} }

View File

@ -772,20 +772,26 @@ void PlotSheetStruct( DrawSheetStruct* Struct )
Move_Plume( Struct->m_Pos, 'U' ); Move_Plume( Struct->m_Pos, 'U' );
pos = Struct->m_Pos; pos.x += Struct->m_Size.x; pos = Struct->m_Pos; pos.x += Struct->m_Size.x;
Move_Plume( pos, 'D' ); Move_Plume( pos, 'D' );
pos.y += Struct->m_Size.y; pos.y += Struct->m_Size.y;
Move_Plume( pos, 'D' ); Move_Plume( pos, 'D' );
pos = Struct->m_Pos; pos.y += Struct->m_Size.y; pos = Struct->m_Pos; pos.y += Struct->m_Size.y;
Move_Plume( pos, 'D' ); Move_Plume( pos, 'D' );
Move_Plume( Struct->m_Pos, 'D' ); Move_Plume( Struct->m_Pos, 'D' );
Plume( 'U' ); Plume( 'U' );
/* Trace des textes : SheetName */ /* Trace des textes : SheetName */
Text = Struct->m_SheetName; Text = Struct->m_SheetName;
size = wxSize( Struct->m_SheetNameSize, Struct->m_SheetNameSize ); size = wxSize( Struct->m_SheetNameSize, Struct->m_SheetNameSize );
pos = Struct->m_Pos; pos.y -= 4; pos = Struct->m_Pos; pos.y -= 4;
if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt ) if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt )
SetColorMapPS( ReturnLayerColor( LAYER_SHEETNAME ) ); SetColorMapPS( ReturnLayerColor( LAYER_SHEETNAME ) );
PlotGraphicText( g_PlotFormat, pos, txtcolor, PlotGraphicText( g_PlotFormat, pos, txtcolor,
Text, TEXT_ORIENT_HORIZ, size, Text, TEXT_ORIENT_HORIZ, size,
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_BOTTOM ); GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_BOTTOM );
@ -793,8 +799,10 @@ void PlotSheetStruct( DrawSheetStruct* Struct )
/* Trace des textes : FileName */ /* Trace des textes : FileName */
Text = Struct->GetFileName(); Text = Struct->GetFileName();
size = wxSize( Struct->m_FileNameSize, Struct->m_FileNameSize ); size = wxSize( Struct->m_FileNameSize, Struct->m_FileNameSize );
if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt ) if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt )
SetColorMapPS( ReturnLayerColor( LAYER_SHEETFILENAME ) ); SetColorMapPS( ReturnLayerColor( LAYER_SHEETFILENAME ) );
PlotGraphicText( g_PlotFormat, PlotGraphicText( g_PlotFormat,
wxPoint( Struct->m_Pos.x, Struct->m_Pos.y + Struct->m_Size.y + 4 ), wxPoint( Struct->m_Pos.x, Struct->m_Pos.y + Struct->m_Size.y + 4 ),
txtcolor, txtcolor,
@ -805,9 +813,10 @@ void PlotSheetStruct( DrawSheetStruct* Struct )
SheetLabelStruct = Struct->m_Label; SheetLabelStruct = Struct->m_Label;
if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt ) if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt )
SetColorMapPS( ReturnLayerColor( Struct->m_Layer ) ); SetColorMapPS( ReturnLayerColor( Struct->m_Layer ) );
while( SheetLabelStruct != NULL ) while( SheetLabelStruct != NULL )
{ {
PlotSheetLabelStruct( SheetLabelStruct ); PlotSheetLabelStruct( SheetLabelStruct );
SheetLabelStruct = (Hierarchical_PIN_Sheet_Struct*) (SheetLabelStruct->Pnext); SheetLabelStruct = SheetLabelStruct->Next();
} }
} }

View File

@ -572,7 +572,7 @@ void WinEDA_PlotHPGLFrame::Plot_Schematic_HPGL( int Select_PlotAll, int HPGL_She
InitPlotParametresHPGL( PlotOffset, g_PlotScaleX, g_PlotScaleY ); InitPlotParametresHPGL( PlotOffset, g_PlotScaleX, g_PlotScaleY );
Plot_1_Page_HPGL( PlotFileName, screen ); Plot_1_Page_HPGL( PlotFileName, screen );
SetLocaleTo_Default( ); SetLocaleTo_Default( );
screen = (BASE_SCREEN*) screen->Pnext; screen = screen->Next();
if( Select_PlotAll == FALSE ) if( Select_PlotAll == FALSE )
break; break;
} }
@ -721,7 +721,7 @@ void WinEDA_PlotHPGLFrame::Plot_1_Page_HPGL( const wxString& FullFileName,
} }
Plume( 'U' ); Plume( 'U' );
DrawList = DrawList->Pnext; DrawList = DrawList->Next();
} }
/* fin */ /* fin */

View File

@ -401,7 +401,7 @@ void WinEDA_PlotPSFrame::CreatePSFile( int AllPages, int pagesize )
PlotOneSheetPS( PlotFileName, screen, RealSheet, BBox, plot_offset ); PlotOneSheetPS( PlotFileName, screen, RealSheet, BBox, plot_offset );
screen = (BASE_SCREEN*) screen->Pnext; screen = screen->Next();
if( AllPages == FALSE ) if( AllPages == FALSE )
break; break;

View File

@ -80,6 +80,9 @@ public:
EDA_DrawLineStruct( const wxPoint& pos, int layer ); EDA_DrawLineStruct( const wxPoint& pos, int layer );
~EDA_DrawLineStruct() { } ~EDA_DrawLineStruct() { }
EDA_DrawLineStruct* Next() const { return (EDA_DrawLineStruct*) Pnext; }
EDA_DrawLineStruct* Back() const { return (EDA_DrawLineStruct*) Pback; }
virtual wxString GetClass() const virtual wxString GetClass() const
{ {
return wxT( "EDA_DrawLine" ); return wxT( "EDA_DrawLine" );

View File

@ -310,10 +310,10 @@ EDA_LibComponentStruct* CopyLibEntryStruct( wxWindow* frame, EDA_LibComponentStr
/* Copie des champs */ /* Copie des champs */
for( OldField = OldEntry->Fields; OldField != NULL; for( OldField = OldEntry->Fields; OldField != NULL;
OldField = (LibDrawField*) OldField->Pnext ) OldField = (LibDrawField*) OldField->Next() )
{ {
NewField = OldField->GenCopy(); NewField = OldField->GenCopy();
NewField->Pnext = NewStruct->Fields; NewField->SetNext( NewStruct->Fields );
NewStruct->Fields = NewField; NewStruct->Fields = NewField;
} }
@ -330,10 +330,10 @@ EDA_LibComponentStruct* CopyLibEntryStruct( wxWindow* frame, EDA_LibComponentStr
if( LastItem == NULL ) if( LastItem == NULL )
NewStruct->m_Drawings = NewDrawings; NewStruct->m_Drawings = NewDrawings;
else else
LastItem->Pnext = NewDrawings; LastItem->SetNext( NewDrawings );
LastItem = NewDrawings; LastItem = NewDrawings;
NewDrawings->Pnext = NULL; NewDrawings->SetNext( NULL );
} }
else // Should nevers occurs, just in case... else // Should nevers occurs, just in case...
{ // CopyDrawEntryStruct() was not able to duplicate the type of OldDrawings { // CopyDrawEntryStruct() was not able to duplicate the type of OldDrawings
@ -395,7 +395,7 @@ bool EDA_LibComponentStruct::Save( FILE* aFile )
m_Name.Save( aFile ); m_Name.Save( aFile );
for( Field = Fields; Field!= NULL; for( Field = Fields; Field!= NULL;
Field = (LibDrawField*) Field->Pnext ) Field = (LibDrawField*) Field->Next() )
{ {
if( Field->m_Text.IsEmpty() && Field->m_Name.IsEmpty() ) if( Field->m_Text.IsEmpty() && Field->m_Name.IsEmpty() )
continue; continue;

View File

@ -217,7 +217,9 @@ void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM * ItemToCopy,
break; break;
case IS_CHANGED: /* Create a copy of schematic */ case IS_CHANGED: /* Create a copy of schematic */
NewList->m_Son = CopyItem = DuplicateStruct( ItemToCopy ); CopyItem = DuplicateStruct( ItemToCopy );
NewList->SetSon( CopyItem );
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE ) if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
{ {
DrawPickedStruct* PickedList = (DrawPickedStruct*) CopyItem; DrawPickedStruct* PickedList = (DrawPickedStruct*) CopyItem;
@ -239,7 +241,7 @@ void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM * ItemToCopy,
case IS_NEW: case IS_NEW:
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE ) if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
{ {
NewList->m_Son = ItemToCopy; NewList->SetSon( ItemToCopy );
DrawPickedStruct* PickedList = (DrawPickedStruct*) ItemToCopy; DrawPickedStruct* PickedList = (DrawPickedStruct*) ItemToCopy;
while( PickedList ) while( PickedList )
{ {
@ -258,11 +260,11 @@ void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM * ItemToCopy,
case IS_NEW | IS_CHANGED: case IS_NEW | IS_CHANGED:
case IS_WIRE_IMAGE: case IS_WIRE_IMAGE:
NewList->m_Son = ItemToCopy; NewList->SetSon( ItemToCopy );
break; break;
case IS_DELETED: case IS_DELETED:
NewList->m_Son = ItemToCopy; NewList->SetSon( ItemToCopy );
ItemToCopy->m_Flags = flag_type_command; ItemToCopy->m_Flags = flag_type_command;
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE ) if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
{ {
@ -327,7 +329,7 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( DrawPickedStruct* List )
* Put data pointed by List in the previous state, i.e. the state memorised by List * Put data pointed by List in the previous state, i.e. the state memorised by List
*/ */
{ {
SCH_ITEM* FirstItem = (SCH_ITEM*) List->m_Son; SCH_ITEM* FirstItem = (SCH_ITEM*) List->GetSon();
SCH_ITEM* item; SCH_ITEM* item;
DrawPickedStruct* PickedList; DrawPickedStruct* PickedList;
@ -374,7 +376,7 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( DrawPickedStruct* List )
FirstItem = (SCH_ITEM*)List->m_Image; FirstItem = (SCH_ITEM*)List->m_Image;
( (SCH_SCREEN*) GetScreen() )->RemoveFromDrawList( FirstItem ); ( (SCH_SCREEN*) GetScreen() )->RemoveFromDrawList( FirstItem );
FirstItem->m_Flags = IS_DELETED; FirstItem->m_Flags = IS_DELETED;
List->m_Son = FirstItem; List->SetSon( FirstItem );
} }
break; break;
@ -386,7 +388,7 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( DrawPickedStruct* List )
while( PickedList ) while( PickedList )
{ {
item = PickedList->m_PickedStruct; item = PickedList->m_PickedStruct;
item->Pnext = GetScreen()->EEDrawList; item->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = item; GetScreen()->EEDrawList = item;
item->m_Flags = 0; item->m_Flags = 0;
PickedList->m_PickedStruct = NULL; PickedList->m_PickedStruct = NULL;
@ -397,21 +399,21 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( DrawPickedStruct* List )
} }
else else
{ {
FirstItem->Pnext = GetScreen()->EEDrawList; FirstItem->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = FirstItem; GetScreen()->EEDrawList = FirstItem;
FirstItem->m_Flags = 0; FirstItem->m_Flags = 0;
List->m_Image = List->m_Son; List->m_Image = List->GetSon();
List->m_Son = NULL; List->SetSon( NULL );
} }
break; break;
case IS_WIRE_IMAGE: case IS_WIRE_IMAGE:
/* Exchange the current wires and the oild wires */ /* Exchange the current wires and the oild wires */
List->m_Son = ( (SCH_SCREEN*) GetScreen() )->ExtractWires( FALSE ); List->SetSon( ( (SCH_SCREEN*) GetScreen() )->ExtractWires( FALSE ) );
while( FirstItem ) while( FirstItem )
{ {
SCH_ITEM* nextitem = FirstItem->Next(); SCH_ITEM* nextitem = FirstItem->Next();
FirstItem->Pnext = GetScreen()->EEDrawList; FirstItem->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = FirstItem; GetScreen()->EEDrawList = FirstItem;
FirstItem->m_Flags = 0; FirstItem->m_Flags = 0;
FirstItem = nextitem; FirstItem = nextitem;
@ -445,7 +447,7 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( DrawPickedStruct* List )
case IS_DELETED: case IS_DELETED:
item = PickedList->m_PickedStruct; item = PickedList->m_PickedStruct;
item->Pnext = GetScreen()->EEDrawList; item->SetNext( GetScreen()->EEDrawList );
GetScreen()->EEDrawList = item; GetScreen()->EEDrawList = item;
item->m_Flags = 0; item->m_Flags = 0;
PickedList->m_PickedStruct = NULL; PickedList->m_PickedStruct = NULL;
@ -513,8 +515,8 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List )
for( ; List != NULL; List = nextitem ) for( ; List != NULL; List = nextitem )
{ {
nextitem = List->Pnext; nextitem = List->Next();
FirstItem = List->m_Son; FirstItem = List->GetSon();
CmdType = List->m_Flags; CmdType = List->m_Flags;
SAFE_DELETE( List ); SAFE_DELETE( List );
@ -571,7 +573,7 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List )
{ {
while( FirstItem ) while( FirstItem )
{ {
EDA_BaseStruct* nextitem = FirstItem->Pnext; EDA_BaseStruct* nextitem = FirstItem->Next();
delete FirstItem; delete FirstItem;
FirstItem = nextitem; FirstItem = nextitem;
} }
@ -638,24 +640,25 @@ void SCH_SCREEN::AddItemToUndoList( EDA_BaseStruct* newitem )
return; return;
if( m_UndoList ) if( m_UndoList )
m_UndoList->Pback = newitem; m_UndoList->SetBack( newitem );
newitem->Pnext = m_UndoList;
newitem->Pback = NULL; newitem->SetNext( m_UndoList );
newitem->SetBack( NULL );
m_UndoList = newitem; m_UndoList = newitem;
/* Free oldest items, if count max reached */ /* Free oldest items, if count max reached */
for( ii = 0, item = m_UndoList; ii < m_UndoRedoCountMax; ii++ ) for( ii = 0, item = m_UndoList; ii < m_UndoRedoCountMax; ii++ )
{ {
if( item->Pnext == NULL ) if( item->Next() == NULL )
return; return;
item = item->Pnext; item = item->Next();
} }
if( item == NULL ) if( item == NULL )
return; return;
nextitem = item->Pnext; nextitem = item->Next();
item->Pnext = NULL; // Set end of chain item->SetNext( NULL ); // Set end of chain
// Delete the extra items // Delete the extra items
ClearUndoORRedoList( nextitem ); ClearUndoORRedoList( nextitem );
@ -672,22 +675,23 @@ void SCH_SCREEN::AddItemToRedoList( EDA_BaseStruct* newitem )
if( newitem == NULL ) if( newitem == NULL )
return; return;
newitem->Pback = NULL; newitem->SetBack( NULL );
newitem->Pnext = m_RedoList; newitem->SetNext( m_RedoList );
m_RedoList = newitem; m_RedoList = newitem;
/* Free first items, if count max reached */ /* Free first items, if count max reached */
for( ii = 0, item = m_RedoList; ii < m_UndoRedoCountMax; ii++ ) for( ii = 0, item = m_RedoList; ii < m_UndoRedoCountMax; ii++ )
{ {
if( item->Pnext == NULL ) if( item->Next() == NULL )
break; break;
item = item->Pnext; item = item->Next();
} }
if( item == NULL ) if( item == NULL )
return; return;
nextitem = item->Pnext; nextitem = item->Next();
item->Pnext = NULL; // Set end of chain item->SetNext( NULL ); // Set end of chain
// Delete the extra items // Delete the extra items
ClearUndoORRedoList( nextitem ); ClearUndoORRedoList( nextitem );

View File

@ -140,6 +140,10 @@ WinEDA_SchematicFrame::WinEDA_SchematicFrame( wxWindow* father,
m_Draw_Grid = g_ShowGrid; // TRUE to show a grid m_Draw_Grid = g_ShowGrid; // TRUE to show a grid
m_Draw_Sheet_Ref = TRUE; // TRUE to show sheet references m_Draw_Sheet_Ref = TRUE; // TRUE to show sheet references
m_CurrentSheet = new DrawSheetPath(); m_CurrentSheet = new DrawSheetPath();
m_CurrentField = NULL;
m_Multiflag = 0;
m_TextFieldSize = DEFAULT_SIZE_TEXT;
CreateScreens(); CreateScreens();

View File

@ -348,7 +348,7 @@ DrawSheetStruct* WinEDA_SchematicFrame::CreateSheet( wxDC* DC )
Sheet->m_Flags = IS_NEW | IS_RESIZED; Sheet->m_Flags = IS_NEW | IS_RESIZED;
Sheet->m_TimeStamp = GetTimeStamp(); Sheet->m_TimeStamp = GetTimeStamp();
Sheet->m_Parent = GetScreen(); Sheet->SetParent( GetScreen() );
Sheet->m_AssociatedScreen = NULL; Sheet->m_AssociatedScreen = NULL;
s_SheetMindx = SHEET_MIN_WIDTH; s_SheetMindx = SHEET_MIN_WIDTH;
s_SheetMindy = SHEET_MIN_HEIGHT; s_SheetMindy = SHEET_MIN_HEIGHT;
@ -401,7 +401,7 @@ void WinEDA_SchematicFrame::ReSizeSheet( DrawSheetStruct* Sheet, wxDC* DC )
(int) ( (sheetlabel->GetLength() + (int) ( (sheetlabel->GetLength() +
1) * sheetlabel->m_Size.x ) ); 1) * sheetlabel->m_Size.x ) );
s_SheetMindy = MAX( s_SheetMindy, sheetlabel->m_Pos.y - Sheet->m_Pos.y ); s_SheetMindy = MAX( s_SheetMindy, sheetlabel->m_Pos.y - Sheet->m_Pos.y );
sheetlabel = (Hierarchical_PIN_Sheet_Struct*) sheetlabel->Pnext; sheetlabel = sheetlabel->Next();
} }
DrawPanel->ManageCurseur = DeplaceSheet; DrawPanel->ManageCurseur = DeplaceSheet;
@ -457,7 +457,7 @@ static void DeplaceSheet( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
{ {
if( SheetLabel->m_Edge ) if( SheetLabel->m_Edge )
SheetLabel->m_Pos.x = Sheet->m_Pos.x + Sheet->m_Size.x; SheetLabel->m_Pos.x = Sheet->m_Pos.x + Sheet->m_Size.x;
SheetLabel = (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Pnext; SheetLabel = SheetLabel->Next();
} }
} }
else /* Move Sheet */ else /* Move Sheet */

View File

@ -171,7 +171,7 @@ static void ExitPinSheet( WinEDA_DrawPanel* Panel, wxDC* DC )
*/ */
void Hierarchical_PIN_Sheet_Struct::Place( WinEDA_SchematicFrame* frame, wxDC* DC ) void Hierarchical_PIN_Sheet_Struct::Place( WinEDA_SchematicFrame* frame, wxDC* DC )
{ {
DrawSheetStruct* Sheet = (DrawSheetStruct*) m_Parent; DrawSheetStruct* Sheet = (DrawSheetStruct*) GetParent();
if( m_Flags & IS_NEW ) /* ajout a la liste des structures */ if( m_Flags & IS_NEW ) /* ajout a la liste des structures */
{ {
@ -182,12 +182,12 @@ void Hierarchical_PIN_Sheet_Struct::Place( WinEDA_SchematicFrame* frame, wxDC* D
Hierarchical_PIN_Sheet_Struct* pinsheet = Sheet->m_Label; Hierarchical_PIN_Sheet_Struct* pinsheet = Sheet->m_Label;
while( pinsheet ) while( pinsheet )
{ {
if( pinsheet->Pnext == NULL ) if( pinsheet->Next() == NULL )
{ {
pinsheet->Pnext = this; pinsheet->SetNext( this );
break; break;
} }
pinsheet = (Hierarchical_PIN_Sheet_Struct*) pinsheet->Pnext; pinsheet = pinsheet->Next();
} }
} }
} }
@ -242,7 +242,7 @@ static void Move_PinSheet( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
if( SheetLabel == NULL ) if( SheetLabel == NULL )
return; return;
DrawSheetStruct* Sheet = (DrawSheetStruct*) SheetLabel->m_Parent; DrawSheetStruct* Sheet = (DrawSheetStruct*) SheetLabel->GetParent();
if( Sheet == NULL ) if( Sheet == NULL )
return; return;
@ -362,7 +362,7 @@ Hierarchical_PIN_Sheet_Struct* WinEDA_SchematicFrame::Import_PinSheet( DrawSheet
if(!Sheet->m_AssociatedScreen) return NULL; if(!Sheet->m_AssociatedScreen) return NULL;
DrawStruct = Sheet->m_AssociatedScreen->EEDrawList; DrawStruct = Sheet->m_AssociatedScreen->EEDrawList;
HLabel = NULL; HLabel = NULL;
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext ) for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
{ {
if( DrawStruct->Type() != TYPE_SCH_HIERLABEL ) if( DrawStruct->Type() != TYPE_SCH_HIERLABEL )
continue; continue;
@ -370,7 +370,7 @@ Hierarchical_PIN_Sheet_Struct* WinEDA_SchematicFrame::Import_PinSheet( DrawSheet
/* Ici un G-Label a ete trouve: y a t-il un SheetLabel correspondant */ /* Ici un G-Label a ete trouve: y a t-il un SheetLabel correspondant */
SheetLabel = Sheet->m_Label; SheetLabel = Sheet->m_Label;
for( ; SheetLabel != NULL; SheetLabel = (Hierarchical_PIN_Sheet_Struct*) SheetLabel->Pnext ) for( ; SheetLabel != NULL; SheetLabel = SheetLabel->Next() )
{ {
if( SheetLabel->m_Text.CmpNoCase( HLabel->m_Text ) == 0 ) if( SheetLabel->m_Text.CmpNoCase( HLabel->m_Text ) == 0 )
{ {
@ -419,7 +419,7 @@ void WinEDA_SchematicFrame::DeleteSheetLabel( bool aRedraw,
* si aRedraw == true, effacement a l'ecran du dessin * si aRedraw == true, effacement a l'ecran du dessin
*/ */
{ {
DrawSheetStruct* parent = (DrawSheetStruct*) aSheetLabelToDel->m_Parent; DrawSheetStruct* parent = (DrawSheetStruct*) aSheetLabelToDel->GetParent();
wxASSERT( parent ); wxASSERT( parent );
wxASSERT( parent->Type() == DRAW_SHEET_STRUCT_TYPE ); wxASSERT( parent->Type() == DRAW_SHEET_STRUCT_TYPE );
@ -438,7 +438,7 @@ void WinEDA_SchematicFrame::DeleteSheetLabel( bool aRedraw,
if( label == aSheetLabelToDel ) if( label == aSheetLabelToDel )
{ {
if( prev ) if( prev )
prev->Pnext = label->Next(); prev->SetNext( label->Next() );
else else
parent->m_Label = label->Next(); parent->m_Label = label->Next();

View File

@ -664,7 +664,7 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem( wxDC* DC )
if( CurrentDrawItem->m_Flags & IS_NEW ) if( CurrentDrawItem->m_Flags & IS_NEW )
{ {
SaveCopyInUndoList( CurrentLibEntry ); SaveCopyInUndoList( CurrentLibEntry );
CurrentDrawItem->Pnext = CurrentLibEntry->m_Drawings; CurrentDrawItem->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = CurrentDrawItem; CurrentLibEntry->m_Drawings = CurrentDrawItem;
switch( CurrentDrawItem->Type() ) switch( CurrentDrawItem->Type() )

View File

@ -103,9 +103,9 @@ void WinEDA_LibeditFrame::LoadOneSymbol( wxDC* DC )
DrawEntry->m_Flags = IS_NEW; DrawEntry->m_Flags = IS_NEW;
DrawEntry->m_Selected = IS_SELECTED; DrawEntry->m_Selected = IS_SELECTED;
if( DrawEntry->Pnext == NULL ) if( DrawEntry->Next() == NULL )
{ /* Fin de liste trouvee */ { /* Fin de liste trouvee */
DrawEntry->Pnext = CurrentLibEntry->m_Drawings; DrawEntry->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = LibEntry->m_Drawings; CurrentLibEntry->m_Drawings = LibEntry->m_Drawings;
LibEntry->m_Drawings = NULL; LibEntry->m_Drawings = NULL;
break; break;
@ -235,7 +235,7 @@ void SuppressDuplicateDrawItem( EDA_LibComponentStruct* LibEntry )
DEntryRef = LibEntry->m_Drawings; DEntryRef = LibEntry->m_Drawings;
while( DEntryRef ) while( DEntryRef )
{ {
if( DEntryRef->Pnext == NULL ) if( DEntryRef->Next() == NULL )
return; return;
DEntryCompare = DEntryRef->Next(); DEntryCompare = DEntryRef->Next();
if( DEntryCompare == NULL ) if( DEntryCompare == NULL )

View File

@ -59,7 +59,7 @@ TRACK* WinEDA_GerberFrame::Delete_Segment( wxDC* DC, TRACK* Track )
{ {
// modification du trace // modification du trace
Track = g_CurrentTrackSegment; Track = g_CurrentTrackSegment;
g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; g_CurrentTrackSegment = g_CurrentTrackSegment->Back();
delete Track; delete Track;
@ -68,12 +68,12 @@ TRACK* WinEDA_GerberFrame::Delete_Segment( wxDC* DC, TRACK* Track )
if( g_TrackSegmentCount && (g_CurrentTrackSegment->Type() == TYPEVIA) ) if( g_TrackSegmentCount && (g_CurrentTrackSegment->Type() == TYPEVIA) )
{ {
Track = g_CurrentTrackSegment; Track = g_CurrentTrackSegment;
g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; g_CurrentTrackSegment = g_CurrentTrackSegment->Back();
delete Track; delete Track;
g_TrackSegmentCount--; g_TrackSegmentCount--;
} }
if( g_CurrentTrackSegment ) if( g_CurrentTrackSegment )
g_CurrentTrackSegment->Pnext = NULL; g_CurrentTrackSegment->SetNext( NULL );
Affiche_Status_Box(); Affiche_Status_Box();

View File

@ -161,7 +161,7 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* aFile,
drawitem->m_Start = track->m_Start; drawitem->m_Start = track->m_Start;
drawitem->m_End = track->m_End; drawitem->m_End = track->m_End;
drawitem->m_Width = track->m_Width; drawitem->m_Width = track->m_Width;
drawitem->Pnext = pcb->m_Drawings; drawitem->SetNext( pcb->m_Drawings );
pcb->m_Drawings = drawitem; pcb->m_Drawings = drawitem;
} }
else else

View File

@ -34,7 +34,7 @@ TRACK * pt_piste;
/* trace des pistes */ /* trace des pistes */
pt_piste = Pcb->m_Track; pt_piste = Pcb->m_Track;
for ( ; pt_piste != NULL ; pt_piste = (TRACK*) pt_piste->Pnext ) for( ; pt_piste != NULL ; pt_piste = pt_piste->Next() )
{ {
// if( (printmasklayer & ReturnMaskLayer(pt_piste) ) == 0 ) continue; // if( (printmasklayer & ReturnMaskLayer(pt_piste) ) == 0 ) continue;
Trace_Segment(NULL, DC, pt_piste, drawmode); Trace_Segment(NULL, DC, pt_piste, drawmode);

View File

@ -59,7 +59,7 @@ BOARD_ITEM* WinEDA_GerberFrame::Locate( int typeloc )
Track = TrackLocate; Track = TrackLocate;
if( TrackLocate->Type() == TYPEVIA ) if( TrackLocate->Type() == TYPEVIA )
break; break;
TrackLocate = (TRACK*) TrackLocate->Pnext; TrackLocate = TrackLocate->Next();
} }
Track->Display_Infos( this ); Track->Display_Infos( this );
@ -185,7 +185,7 @@ TRACK* Locate_Pistes( TRACK* start_adresse, wxPoint ref, int Layer )
TRACK* Track; /* pointeur sur les pistes */ TRACK* Track; /* pointeur sur les pistes */
int l_piste; /* demi-largeur de la piste */ int l_piste; /* demi-largeur de la piste */
for( Track = start_adresse; Track != NULL; Track = (TRACK*) Track->Pnext ) for( Track = start_adresse; Track != NULL; Track = Track->Next() )
{ {
if( Track->GetState( BUSY | DELETED ) ) if( Track->GetState( BUSY | DELETED ) )
continue; continue;
@ -249,7 +249,7 @@ TRACK* Locate_Zone( TRACK* start_adresse, wxPoint ref, int layer )
TRACK* Zone; /* pointeur sur les pistes */ TRACK* Zone; /* pointeur sur les pistes */
int l_segm; /* demi-largeur de la piste */ int l_segm; /* demi-largeur de la piste */
for( Zone = start_adresse; Zone != NULL; Zone = (TRACK*) Zone->Pnext ) for( Zone = start_adresse; Zone != NULL; Zone = Zone->Next() )
{ {
/* calcul des coordonnees du segment teste */ /* calcul des coordonnees du segment teste */
l_segm = Zone->m_Width >> 1; /* l_piste = demi largeur piste */ l_segm = Zone->m_Width >> 1; /* l_piste = demi largeur piste */
@ -287,7 +287,7 @@ TEXTE_PCB* Locate_Texte_Pcb( TEXTE_PCB* pt_txt_pcb, int typeloc )
SET_REF_POS( ref ); SET_REF_POS( ref );
PtStruct = (EDA_BaseStruct*) pt_txt_pcb; PtStruct = (EDA_BaseStruct*) pt_txt_pcb;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
if( PtStruct->Type() != TYPETEXTE ) if( PtStruct->Type() != TYPETEXTE )
continue; continue;

View File

@ -817,8 +817,8 @@ bool GERBER::Execute_DCODE_Command( WinEDA_GerberFrame* frame, wxDC* DC,
last = (SEGZONE*) frame->m_Pcb->m_Zone; last = (SEGZONE*) frame->m_Pcb->m_Zone;
if( last ) if( last )
while( last->Pnext ) while( last->Next() )
last = (SEGZONE*) last->Pnext; last = (SEGZONE*) last->Next();
edge_poly->Insert( frame->m_Pcb, last ); edge_poly->Insert( frame->m_Pcb, last );

View File

@ -38,7 +38,7 @@ void Draw_Track_Buffer( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb, int draw_
dcode_hightlight = gerber->m_Selected_Tool; dcode_hightlight = gerber->m_Selected_Tool;
Track = Pcb->m_Track; Track = Pcb->m_Track;
for( ; Track != NULL; Track = (TRACK*) Track->Pnext ) for( ; Track != NULL; Track = Track->Next() )
{ {
if( printmasklayer != -1 ) if( printmasklayer != -1 )
if( (Track->ReturnMaskLayer() & printmasklayer) == 0 ) if( (Track->ReturnMaskLayer() & printmasklayer) == 0 )
@ -226,7 +226,7 @@ void Affiche_DCodes_Pistes( WinEDA_DrawPanel* panel, wxDC* DC, BOARD* Pcb, int d
GRSetDrawMode( DC, drawmode ); GRSetDrawMode( DC, drawmode );
track = Pcb->m_Track; track = Pcb->m_Track;
for( ; track != NULL; track = (TRACK*) track->Pnext ) for( ; track != NULL; track = track->Next() )
{ {
if( (track->m_Shape == S_ARC) if( (track->m_Shape == S_ARC)
|| (track->m_Shape == S_CIRCLE) || (track->m_Shape == S_CIRCLE)

View File

@ -101,8 +101,11 @@ BOARD_ITEM* SaveItemEfface( BOARD_ITEM* PtItem, int nbitems )
PtStruct->SetState( DELETED, ON ); PtStruct->SetState( DELETED, ON );
if( nbitems <= 1 ) if( nbitems <= 1 )
NextS = NULL; /* fin de chaine */ NextS = NULL; /* fin de chaine */
PtStruct->Pnext = NextS;
PtStruct->Pback = Back; Back = PtStruct; PtStruct->SetNext( NextS );
PtStruct->SetBack( Back );
Back = PtStruct;
if( NextS == NULL ) if( NextS == NULL )
break; break;
} }

View File

@ -92,6 +92,7 @@ class WinEDA_DrawFrame;
class BOARD; class BOARD;
class EDA_Rect; class EDA_Rect;
/** /**
* Class INSPECTOR * Class INSPECTOR
* is an abstract class that is used to inspect and possibly collect the * is an abstract class that is used to inspect and possibly collect the
@ -209,9 +210,11 @@ public:
/* Basic Classes : used classes are derived from them */ /* Basic Classes : used classes are derived from them */
/******************************************************/ /******************************************************/
/** class EDA_BaseStruct class DHEAD;
* Basic class, not directly used.
* All the kicad classes used to describe a shematic or a board item are derived from. /**
* Class EDA_BaseStruct
* is a base class for most all the kicad significant classes, used in schematics and boards.
*/ */
class EDA_BaseStruct class EDA_BaseStruct
{ {
@ -223,13 +226,15 @@ private:
*/ */
KICAD_T m_StructType; KICAD_T m_StructType;
public: protected:
EDA_BaseStruct* Pnext; /* Linked list: Link (next struct) */ EDA_BaseStruct* Pnext; /* Linked list: Link (next struct) */
EDA_BaseStruct* Pback; /* Linked list: Link (previous struct) */ EDA_BaseStruct* Pback; /* Linked list: Link (previous struct) */
EDA_BaseStruct* m_Parent; /* Linked list: Link (parent struct) */ EDA_BaseStruct* m_Parent; /* Linked list: Link (parent struct) */
EDA_BaseStruct* m_Son; /* Linked list: Link (son struct) */ EDA_BaseStruct* m_Son; /* Linked list: Link (son struct) */
EDA_BaseStruct* m_Image; /* Link to an image copy for undelete or abort command */ DHEAD* m_List; ///< which DLIST I am on.
public:
int m_Flags; // flags for editing and other misc. uses int m_Flags; // flags for editing and other misc. uses
#define IS_CHANGED (1 << 0) #define IS_CHANGED (1 << 0)
#define IS_LINKED (1 << 1) #define IS_LINKED (1 << 1)
@ -248,6 +253,10 @@ public:
#define CANDIDATE (1 << 14) ///< flag indiquant que la structure est connectee #define CANDIDATE (1 << 14) ///< flag indiquant que la structure est connectee
#define SKIP_STRUCT (1 << 15) ///< flag indiquant que la structure ne doit pas etre traitee #define SKIP_STRUCT (1 << 15) ///< flag indiquant que la structure ne doit pas etre traitee
#define DO_NOT_DRAW (1 << 16) ///< Used to disable draw function #define DO_NOT_DRAW (1 << 16) ///< Used to disable draw function
#define DRAW_ERASED (1 << 17) ///< draw in background color, used by classs TRACK in gerbview
EDA_BaseStruct* m_Image; /* Link to an image copy for undelete or abort command */
unsigned long m_TimeStamp; // Time stamp used for logical links unsigned long m_TimeStamp; // Time stamp used for logical links
int m_Selected; /* Used by block commands, and selective editing */ int m_Selected; /* Used by block commands, and selective editing */
@ -276,8 +285,15 @@ public:
EDA_BaseStruct* Next() const { return (EDA_BaseStruct*) Pnext; } EDA_BaseStruct* Next() const { return (EDA_BaseStruct*) Pnext; }
EDA_BaseStruct* Back() const { return (EDA_BaseStruct*) Pback; } EDA_BaseStruct* Back() const { return (EDA_BaseStruct*) Pback; }
EDA_BaseStruct* GetParent() const { return (EDA_BaseStruct*) m_Parent; } EDA_BaseStruct* GetParent() const { return m_Parent; }
EDA_BaseStruct* GetSon() const { return m_Son; }
DHEAD* GetList() const { return m_List; }
void SetNext( EDA_BaseStruct* aNext ) { Pnext = aNext; }
void SetBack( EDA_BaseStruct* aBack ) { Pback = aBack; }
void SetParent( EDA_BaseStruct* aParent ) { m_Parent = aParent; }
void SetSon( EDA_BaseStruct* aSon ) { m_Son = aSon; }
void SetList( DHEAD* aList ) { m_List = aList; }
/* Gestion de l'etat (status) de la structure (active, deleted..) */ /* Gestion de l'etat (status) de la structure (active, deleted..) */

View File

@ -187,10 +187,14 @@ class BOARD_CONNECTED_ITEM: public BOARD_ITEM
{ {
protected: protected:
int m_NetCode; // Net number int m_NetCode; // Net number
int m_Subnet; /* In rastnest routines : for the current net, int m_Subnet; /* In rastnest routines : for the current net,
* block number (number common to the current connected items found) */ * block number (number common to the current connected items found)
*/
int m_ZoneSubnet; // variable used in rastnest computations : for the current net, int m_ZoneSubnet; // variable used in rastnest computations : for the current net,
// handle block number in zone connection // handle block number in zone connection
public: public:
BOARD_CONNECTED_ITEM( BOARD_ITEM* StructFather, KICAD_T idtype ); BOARD_CONNECTED_ITEM( BOARD_ITEM* StructFather, KICAD_T idtype );
BOARD_CONNECTED_ITEM( const BOARD_CONNECTED_ITEM& src ); BOARD_CONNECTED_ITEM( const BOARD_CONNECTED_ITEM& src );

View File

@ -40,7 +40,7 @@ protected:
EDA_BaseStruct* first; ///< first element in list, or NULL if list empty EDA_BaseStruct* first; ///< first element in list, or NULL if list empty
EDA_BaseStruct* last; ///< last elment in list, or NULL if empty EDA_BaseStruct* last; ///< last elment in list, or NULL if empty
unsigned count; ///< how many elements are in the list unsigned count; ///< how many elements are in the list
bool meOwner; ///< I must delete the objects in my destructor bool meOwner; ///< I must delete the objects I hold in my destructor
/** /**
* Constructor DHEAD * Constructor DHEAD
@ -113,6 +113,7 @@ public:
* is the head of a doubly linked list. It contains pointers to the first * is the head of a doubly linked list. It contains pointers to the first
* and last elements in a doubly linked list. The elements in the list must * and last elements in a doubly linked list. The elements in the list must
* be of class T or derived from T, and T must be derived from EDA_BaseStruct. * be of class T or derived from T, and T must be derived from EDA_BaseStruct.
* @see DHEAD for additional public functions.
*/ */
template <class T> template <class T>
class DLIST : public DHEAD class DLIST : public DHEAD

View File

@ -269,6 +269,10 @@ public:
BASE_SCREEN( int idscreen, KICAD_T aType = SCREEN_STRUCT_TYPE ); BASE_SCREEN( int idscreen, KICAD_T aType = SCREEN_STRUCT_TYPE );
~BASE_SCREEN(); ~BASE_SCREEN();
BASE_SCREEN* Next() const { return (BASE_SCREEN*) Pnext; }
BASE_SCREEN* Back() const { return (BASE_SCREEN*) Pback; }
/** /**
* Function setCurItem * Function setCurItem
* sets the currently selected object, m_CurrentItem. * sets the currently selected object, m_CurrentItem.

View File

@ -49,10 +49,18 @@ class WinEDA_SchematicFrame : public WinEDA_DrawFrame
{ {
public: public:
WinEDAChoiceBox* m_SelPartBox; WinEDAChoiceBox* m_SelPartBox;
DrawSheetPath* m_CurrentSheet; //which sheet we are presently working on. DrawSheetPath* m_CurrentSheet; ///< which sheet we are presently working on.
int m_Multiflag;
wxPoint m_OldPos;
private: private:
wxMenu* m_FilesMenu; wxMenu* m_FilesMenu;
SCH_CMP_FIELD* m_CurrentField;
int m_TextFieldSize;
public: public:
WinEDA_SchematicFrame( wxWindow* father, WinEDA_App* parent, WinEDA_SchematicFrame( wxWindow* father, WinEDA_App* parent,
const wxString& title, const wxString& title,
@ -81,6 +89,13 @@ public:
int hotkey, int hotkey,
EDA_BaseStruct* DrawStruct ); EDA_BaseStruct* DrawStruct );
SCH_CMP_FIELD* GetCurrentField() { return m_CurrentField; }
void SetCurrentField( SCH_CMP_FIELD* aCurrentField )
{
m_CurrentField = aCurrentField;
}
DrawSheetPath* GetSheet(); DrawSheetPath* GetSheet();
SCH_SCREEN* GetScreen() const; SCH_SCREEN* GetScreen() const;
@ -105,8 +120,9 @@ public:
bool bool
IncludePin ); IncludePin );
/** function FillFootprintFieldForAllInstancesofComponent /**
* Search for component "aReference", and place a Footprint in Footprint field * Function FillFootprintFieldForAllInstancesofComponent
* searches for component "aReference", and places a Footprint in Footprint field
* @param aReference = reference of the component to initialise * @param aReference = reference of the component to initialise
* @param aFootPrint = new value for the filed Fottprint component * @param aFootPrint = new value for the filed Fottprint component
* @param aSetVisible = true to have the field visible, false to set the invisible flag * @param aSetVisible = true to have the field visible, false to set the invisible flag
@ -119,6 +135,7 @@ public:
bool FillFootprintFieldForAllInstancesofComponent( const wxString& aReference, bool FillFootprintFieldForAllInstancesofComponent( const wxString& aReference,
const wxString& aFootPrint, const wxString& aFootPrint,
bool aSetVisible ); bool aSetVisible );
SCH_ITEM* FindComponentAndItem( const wxString& component_reference, SCH_ITEM* FindComponentAndItem( const wxString& component_reference,
bool Find_in_hierarchy, bool Find_in_hierarchy,
int SearchType, int SearchType,
@ -131,7 +148,9 @@ public:
/* netlist generation */ /* netlist generation */
void* BuildNetListBase(); void* BuildNetListBase();
/** Function DeleteAnnotation
/**
* Function DeleteAnnotation
* Remove current component annotations * Remove current component annotations
* @param aCurrentSheetOnly : if false: remove all annotations, else remove annotation relative to the current sheet only * @param aCurrentSheetOnly : if false: remove all annotations, else remove annotation relative to the current sheet only
* @param aRedraw : true to refresh display * @param aRedraw : true to refresh display
@ -142,7 +161,8 @@ public:
void InstallPreviousSheet(); void InstallPreviousSheet();
void InstallNextScreen( DrawSheetStruct* Sheet ); void InstallNextScreen( DrawSheetStruct* Sheet );
/** Function SetSheetNumberAndCount /**
* Function SetSheetNumberAndCount
* Set the m_ScreenNumber and m_NumberOfScreen members for screens * Set the m_ScreenNumber and m_NumberOfScreen members for screens
* must be called after a delete or add sheet command, and when entering a sheet * must be called after a delete or add sheet command, and when entering a sheet
*/ */

View File

@ -40,9 +40,9 @@ void Affiche_Infos_Equipot( int netcode, WinEDA_BasePcbFrame* frame )
Affiche_1_Parametre( frame, 30, _( "Net Code" ), txt, RED ); Affiche_1_Parametre( frame, 30, _( "Net Code" ), txt, RED );
for( ii = 0, module = frame->m_Pcb->m_Modules; module != 0; for( ii = 0, module = frame->m_Pcb->m_Modules; module != 0;
module = (MODULE*) module->Pnext ) module = module->Next() )
{ {
for( pad = module->m_Pads; pad != 0; pad = (D_PAD*) pad->Pnext ) for( pad = module->m_Pads; pad != 0; pad = pad->Next() )
{ {
if( pad->GetNet() == netcode ) if( pad->GetNet() == netcode )
ii++; ii++;
@ -52,7 +52,7 @@ void Affiche_Infos_Equipot( int netcode, WinEDA_BasePcbFrame* frame )
txt.Printf( wxT( "%d" ), ii ); txt.Printf( wxT( "%d" ), ii );
Affiche_1_Parametre( frame, 40, _( "Pads" ), txt, DARKGREEN ); Affiche_1_Parametre( frame, 40, _( "Pads" ), txt, DARKGREEN );
for( ii = 0, Struct = frame->m_Pcb->m_Track; Struct != NULL; Struct = Struct->Pnext ) for( ii = 0, Struct = frame->m_Pcb->m_Track; Struct != NULL; Struct = Struct->Next() )
{ {
ii++; ii++;
if( Struct->Type() == TYPEVIA ) if( Struct->Type() == TYPEVIA )

View File

@ -51,7 +51,7 @@ void WinEDA_PcbFrame::Attribut_Track( TRACK* track, wxDC* DC, bool Flag_On )
{ {
Track->SetState( SEGM_FIXE, Flag_On ); Track->SetState( SEGM_FIXE, Flag_On );
Track->SetState( BUSY, OFF ); Track->SetState( BUSY, OFF );
Track = (TRACK*) Track->Pnext; Track = Track->Next();
} }
DrawPanel->CursorOn( DC ); // Display cursor shape DrawPanel->CursorOn( DC ); // Display cursor shape
@ -74,7 +74,7 @@ void WinEDA_PcbFrame::Attribut_net( wxDC* DC, int net_code, bool Flag_On )
/* search the first segment for the selected net_code */ /* search the first segment for the selected net_code */
if( net_code >= 0 ) if( net_code >= 0 )
{ {
for( ; Track != NULL; Track = (TRACK*) Track->Pnext ) for( ; Track != NULL; Track = Track->Next() )
{ {
if( net_code == Track->GetNet() ) if( net_code == Track->GetNet() )
break; break;

View File

@ -223,7 +223,7 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( wxDC* DC, bool PlaceModulesHorsPcb )
} }
Module = m_Pcb->m_Modules; Module = m_Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) // remise a jour du rect d'encadrement for( ; Module != NULL; Module = Module->Next() ) // remise a jour du rect d'encadrement
{ {
Module->Set_Rectangle_Encadrement(); Module->Set_Rectangle_Encadrement();
Module->SetRectangleExinscrit(); Module->SetRectangleExinscrit();
@ -315,7 +315,7 @@ void WinEDA_PcbFrame::FixeModule( MODULE* Module, bool Fixe )
else else
{ {
Module = m_Pcb->m_Modules; Module = m_Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) for( ; Module != NULL; Module = Module->Next() )
{ {
if( WildCompareString( ModulesMaskSelection, Module->m_Reference->m_Text ) ) if( WildCompareString( ModulesMaskSelection, Module->m_Reference->m_Text ) )
{ {
@ -346,7 +346,7 @@ MODULE** GenListeModules( BOARD* Pcb, int* NbModules )
* peut deplacer */ * peut deplacer */
Module = Pcb->m_Modules; Module = Pcb->m_Modules;
NbMod = 0; NbMod = 0;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) for( ; Module != NULL; Module = Module->Next() )
NbMod++; NbMod++;
ListeMod = (MODULE**) MyZMalloc( (NbMod + 1) * sizeof(MODULE *) ); ListeMod = (MODULE**) MyZMalloc( (NbMod + 1) * sizeof(MODULE *) );
@ -359,7 +359,7 @@ MODULE** GenListeModules( BOARD* Pcb, int* NbModules )
PtList = ListeMod; PtList = ListeMod;
Module = Pcb->m_Modules; Module = Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) for( ; Module != NULL; Module = Module->Next() )
{ {
*PtList = Module; PtList++; *PtList = Module; PtList++;
Module->SetRectangleExinscrit(); Module->SetRectangleExinscrit();

View File

@ -127,7 +127,7 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC
/* Compute module parmeters used in auto place */ /* Compute module parmeters used in auto place */
Module = m_Pcb->m_Modules; Module = m_Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) // remise a jour du rect d'encadrement for( ; Module != NULL; Module = Module->Next() ) // remise a jour du rect d'encadrement
{ {
Module->Set_Rectangle_Encadrement(); Module->Set_Rectangle_Encadrement();
Module->SetRectangleExinscrit(); Module->SetRectangleExinscrit();
@ -143,7 +143,7 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC
/* Placement des modules fixes sur le plan de placement */ /* Placement des modules fixes sur le plan de placement */
Module = m_Pcb->m_Modules; Module = m_Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) for( ; Module != NULL; Module = Module->Next() )
{ {
Module->m_ModuleStatus &= ~MODULE_to_PLACE; Module->m_ModuleStatus &= ~MODULE_to_PLACE;
@ -306,7 +306,7 @@ end_of_tst:
g_GridRoutingSize = OldPasRoute; g_GridRoutingSize = OldPasRoute;
Module = m_Pcb->m_Modules; Module = m_Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) for( ; Module != NULL; Module = Module->Next() )
{ {
Module->Set_Rectangle_Encadrement(); Module->Set_Rectangle_Encadrement();
} }
@ -452,7 +452,7 @@ int WinEDA_PcbFrame::GenPlaceBoard()
TmpSegm.SetLayer( -1 ); TmpSegm.SetLayer( -1 );
TmpSegm.SetNet( -1 ); TmpSegm.SetNet( -1 );
TmpSegm.m_Width = g_GridRoutingSize / 2; TmpSegm.m_Width = g_GridRoutingSize / 2;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
DRAWSEGMENT* DrawSegm; DRAWSEGMENT* DrawSegm;
@ -548,7 +548,7 @@ void WinEDA_PcbFrame::GenModuleOnBoard( MODULE* Module )
/* Trace des pads et leur surface de securite */ /* Trace des pads et leur surface de securite */
marge = g_DesignSettings.m_TrackClearence + g_DesignSettings.m_CurrentTrackWidth; marge = g_DesignSettings.m_TrackClearence + g_DesignSettings.m_CurrentTrackWidth;
for( Pad = Module->m_Pads; Pad != NULL; Pad = (D_PAD*) Pad->Pnext ) for( Pad = Module->m_Pads; Pad != NULL; Pad = Pad->Next() )
{ {
Place_1_Pad_Board( m_Pcb, Pad, CELL_is_MODULE, marge, WRITE_OR_CELL ); Place_1_Pad_Board( m_Pcb, Pad, CELL_is_MODULE, marge, WRITE_OR_CELL );
} }
@ -619,7 +619,7 @@ int WinEDA_PcbFrame::RecherchePlacementModule( MODULE* Module, wxDC* DC )
if( Module->GetLayer() == COPPER_LAYER_N ) if( Module->GetLayer() == COPPER_LAYER_N )
masque_otherlayer = CMP_LAYER; masque_otherlayer = CMP_LAYER;
for( Pad = Module->m_Pads; Pad != NULL; Pad = (D_PAD*) Pad->Pnext ) for( Pad = Module->m_Pads; Pad != NULL; Pad = Pad->Next() )
{ {
if( (Pad->m_Masque_Layer & masque_otherlayer) == 0 ) if( (Pad->m_Masque_Layer & masque_otherlayer) == 0 )
continue; continue;
@ -949,12 +949,12 @@ void Build_PlacedPads_List( BOARD* Pcb )
/* Calcul du nombre de pads utiles */ /* Calcul du nombre de pads utiles */
Module = Pcb->m_Modules; Module = Pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext ) for( ; Module != NULL; Module = Module->Next() )
{ {
if( Module->m_ModuleStatus & MODULE_to_PLACE ) if( Module->m_ModuleStatus & MODULE_to_PLACE )
continue; continue;
PtPad = (D_PAD*) Module->m_Pads; PtPad = (D_PAD*) Module->m_Pads;
for( ; PtPad != NULL; PtPad = (D_PAD*) PtPad->Pnext ) for( ; PtPad != NULL; PtPad = PtPad->Next() )
{ {
Pcb->m_NbPads++; Pcb->m_NbPads++;
} }
@ -969,17 +969,17 @@ void Build_PlacedPads_List( BOARD* Pcb )
/* Initialisation du buffer et des variables de travail */ /* Initialisation du buffer et des variables de travail */
Module = Pcb->m_Modules; Module = Pcb->m_Modules;
for( ; (Module != NULL) && (pt_liste_pad != NULL); Module = (MODULE*) Module->Pnext ) for( ; (Module != NULL) && (pt_liste_pad != NULL); Module = Module->Next() )
{ {
if( Module->m_ModuleStatus & MODULE_to_PLACE ) if( Module->m_ModuleStatus & MODULE_to_PLACE )
continue; continue;
PtPad = (D_PAD*) Module->m_Pads; PtPad = (D_PAD*) Module->m_Pads;
for( ; PtPad != NULL; PtPad = (D_PAD*) PtPad->Pnext ) for( ; PtPad != NULL; PtPad = PtPad->Next() )
{ {
*pt_liste_pad = PtPad; *pt_liste_pad = PtPad;
PtPad->SetSubNet( 0 ); PtPad->SetSubNet( 0 );
PtPad->SetSubRatsnest( 0 ); PtPad->SetSubRatsnest( 0 );
PtPad->m_Parent = Module; PtPad->SetParent( Module );
if( PtPad->GetNet() ) if( PtPad->GetNet() )
Pcb->m_NbNodes++; Pcb->m_NbNodes++;
pt_liste_pad++; pt_liste_pad++;

View File

@ -100,7 +100,7 @@ void WinEDA_PcbFrame::Autoroute( wxDC* DC, int mode )
case ROUTE_MODULE: case ROUTE_MODULE:
{ {
D_PAD* pt_pad = (D_PAD*) Module->m_Pads; D_PAD* pt_pad = (D_PAD*) Module->m_Pads;
for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext ) for( ; pt_pad != NULL; pt_pad = pt_pad->Next() )
{ {
if( ptmp->pad_start == pt_pad ) if( ptmp->pad_start == pt_pad )
ptmp->status |= CH_ROUTE_REQ; ptmp->status |= CH_ROUTE_REQ;

View File

@ -615,7 +615,7 @@ void WinEDA_BasePcbFrame::Block_Rotate( wxDC* DC )
bool Show_Ratsnest_tmp = g_Show_Ratsnest; g_Show_Ratsnest = false; bool Show_Ratsnest_tmp = g_Show_Ratsnest; g_Show_Ratsnest = false;
int Angle_Rot_Module = 900; int Angle_Rot_Module = 900;
module = m_Pcb->m_Modules; module = m_Pcb->m_Modules;
for( ; module != NULL; module = (MODULE*) module->Pnext ) for( ; module != NULL; module = module->Next() )
{ {
if( ! module->HitTest( GetScreen()->BlockLocate ) ) if( ! module->HitTest( GetScreen()->BlockLocate ) )
continue; continue;
@ -684,7 +684,7 @@ void WinEDA_BasePcbFrame::Block_Rotate( wxDC* DC )
/* Move and rotate the graphic items */ /* Move and rotate the graphic items */
PtStruct = m_Pcb->m_Drawings; PtStruct = m_Pcb->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
switch( PtStruct->Type() ) switch( PtStruct->Type() )
{ {
@ -780,7 +780,7 @@ void WinEDA_BasePcbFrame::Block_Invert( wxDC* DC )
{ {
bool Show_Ratsnest_tmp = g_Show_Ratsnest; g_Show_Ratsnest = false; bool Show_Ratsnest_tmp = g_Show_Ratsnest; g_Show_Ratsnest = false;
module = m_Pcb->m_Modules; module = m_Pcb->m_Modules;
for( ; module != NULL; module = (MODULE*) module->Pnext ) for( ; module != NULL; module = module->Next() )
{ {
if( ! module->HitTest( GetScreen()->BlockLocate ) ) if( ! module->HitTest( GetScreen()->BlockLocate ) )
continue; continue;
@ -823,7 +823,7 @@ void WinEDA_BasePcbFrame::Block_Invert( wxDC* DC )
track->SetLayer( ChangeSideNumLayer( track->GetLayer() ) ); track->SetLayer( ChangeSideNumLayer( track->GetLayer() ) );
} }
} }
track = (TRACK*) track->Pnext; track = track->Next();
} }
} }
@ -841,7 +841,7 @@ void WinEDA_BasePcbFrame::Block_Invert( wxDC* DC )
INVERT( track->m_End.y ); INVERT( track->m_End.y );
track->SetLayer( ChangeSideNumLayer( track->GetLayer() ) ); track->SetLayer( ChangeSideNumLayer( track->GetLayer() ) );
} }
track = (TRACK*) track->Pnext; track = track->Next();
} }
for ( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ ) for ( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ )
{ {
@ -860,7 +860,7 @@ void WinEDA_BasePcbFrame::Block_Invert( wxDC* DC )
masque_layer &= ~EDGE_LAYER; masque_layer &= ~EDGE_LAYER;
PtStruct = m_Pcb->m_Drawings; PtStruct = m_Pcb->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
switch( PtStruct->Type() ) switch( PtStruct->Type() )
{ {
@ -967,7 +967,7 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC )
module = m_Pcb->m_Modules; module = m_Pcb->m_Modules;
oldpos = GetScreen()->m_Curseur; oldpos = GetScreen()->m_Curseur;
for( ; module != NULL; module = (MODULE*) module->Pnext ) for( ; module != NULL; module = module->Next() )
{ {
if( ! module->HitTest( GetScreen()->BlockLocate ) ) if( ! module->HitTest( GetScreen()->BlockLocate ) )
continue; continue;
@ -995,7 +995,7 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC )
track->m_Start += MoveVector; track->m_Start += MoveVector;
track->m_End += MoveVector; track->m_End += MoveVector;
} }
track = (TRACK*) track->Pnext; track = track->Next();
} }
} }
@ -1011,7 +1011,7 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC )
track->m_Start += MoveVector; track->m_Start += MoveVector;
track->m_End += MoveVector; track->m_End += MoveVector;
} }
track = (TRACK*) track->Pnext; track = track->Next();
} }
for ( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ ) for ( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ )
{ {
@ -1029,7 +1029,7 @@ void WinEDA_BasePcbFrame::Block_Move( wxDC* DC )
masque_layer &= ~EDGE_LAYER; masque_layer &= ~EDGE_LAYER;
PtStruct = m_Pcb->m_Drawings; PtStruct = m_Pcb->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
switch( PtStruct->Type() ) switch( PtStruct->Type() )
{ {
@ -1123,7 +1123,7 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
module = m_Pcb->m_Modules; module = m_Pcb->m_Modules;
oldpos = GetScreen()->m_Curseur; oldpos = GetScreen()->m_Curseur;
for( ; module != NULL; module = (MODULE*) module->Pnext ) for( ; module != NULL; module = module->Next() )
{ {
MODULE* new_module; MODULE* new_module;
if( ! module->HitTest( GetScreen()->BlockLocate ) ) if( ! module->HitTest( GetScreen()->BlockLocate ) )
@ -1134,9 +1134,9 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
new_module = new MODULE( m_Pcb ); new_module = new MODULE( m_Pcb );
new_module->Copy( module ); new_module->Copy( module );
new_module->m_TimeStamp = GetTimeStamp(); new_module->m_TimeStamp = GetTimeStamp();
new_module->Pnext = m_Pcb->m_Modules; new_module->SetNext( m_Pcb->m_Modules );
new_module->Pback = m_Pcb; new_module->SetBack( m_Pcb );
m_Pcb->m_Modules->Pback = new_module; m_Pcb->m_Modules->SetBack( new_module );
m_Pcb->m_Modules = new_module; m_Pcb->m_Modules = new_module;
GetScreen()->m_Curseur = module->m_Pos + MoveVector; GetScreen()->m_Curseur = module->m_Pos + MoveVector;
Place_Module( new_module, DC ); Place_Module( new_module, DC );
@ -1208,7 +1208,7 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
masque_layer &= ~EDGE_LAYER; masque_layer &= ~EDGE_LAYER;
PtStruct = m_Pcb->m_Drawings; PtStruct = m_Pcb->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
switch( PtStruct->Type() ) switch( PtStruct->Type() )
{ {
@ -1225,9 +1225,9 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
DRAWSEGMENT* new_drawsegment = new DRAWSEGMENT( m_Pcb ); DRAWSEGMENT* new_drawsegment = new DRAWSEGMENT( m_Pcb );
new_drawsegment->Copy( STRUCT ); new_drawsegment->Copy( STRUCT );
new_drawsegment->Pnext = m_Pcb->m_Drawings; new_drawsegment->SetNext( m_Pcb->m_Drawings );
new_drawsegment->Pback = m_Pcb; new_drawsegment->SetBack( m_Pcb );
m_Pcb->m_Drawings->Pback = new_drawsegment; m_Pcb->m_Drawings->SetBack( new_drawsegment );
m_Pcb->m_Drawings = new_drawsegment; m_Pcb->m_Drawings = new_drawsegment;
new_drawsegment->m_Start += MoveVector; new_drawsegment->m_Start += MoveVector;
new_drawsegment->m_End += MoveVector; new_drawsegment->m_End += MoveVector;
@ -1246,9 +1246,9 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
/* le texte est ici bon a etre deplace */ /* le texte est ici bon a etre deplace */
TEXTE_PCB* new_pcbtext = new TEXTE_PCB( m_Pcb ); TEXTE_PCB* new_pcbtext = new TEXTE_PCB( m_Pcb );
new_pcbtext->Copy( STRUCT ); new_pcbtext->Copy( STRUCT );
new_pcbtext->Pnext = m_Pcb->m_Drawings; new_pcbtext->SetNext( m_Pcb->m_Drawings );
new_pcbtext->Pback = m_Pcb; new_pcbtext->SetBack( m_Pcb );
m_Pcb->m_Drawings->Pback = new_pcbtext; m_Pcb->m_Drawings->SetBack( new_pcbtext );
m_Pcb->m_Drawings = new_pcbtext; m_Pcb->m_Drawings = new_pcbtext;
/* Redessin du Texte */ /* Redessin du Texte */
new_pcbtext->m_Pos += MoveVector; new_pcbtext->m_Pos += MoveVector;
@ -1267,9 +1267,9 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
/* l'element est ici bon a etre efface */ /* l'element est ici bon a etre efface */
MIREPCB* new_mire = new MIREPCB( m_Pcb ); MIREPCB* new_mire = new MIREPCB( m_Pcb );
new_mire->Copy( STRUCT ); new_mire->Copy( STRUCT );
new_mire->Pnext = m_Pcb->m_Drawings; new_mire->SetNext( m_Pcb->m_Drawings );
new_mire->Pback = m_Pcb; new_mire->SetBack( m_Pcb );
m_Pcb->m_Drawings->Pback = new_mire; m_Pcb->m_Drawings->SetBack( new_mire );
m_Pcb->m_Drawings = new_mire; m_Pcb->m_Drawings = new_mire;
new_mire->m_Pos += MoveVector; new_mire->m_Pos += MoveVector;
new_mire->Draw( DrawPanel, DC, GR_OR ); new_mire->Draw( DrawPanel, DC, GR_OR );
@ -1287,9 +1287,9 @@ void WinEDA_BasePcbFrame::Block_Duplicate( wxDC* DC )
/* l'element est ici bon a etre copie */ /* l'element est ici bon a etre copie */
COTATION* new_cotation = new COTATION( m_Pcb ); COTATION* new_cotation = new COTATION( m_Pcb );
new_cotation->Copy( STRUCT ); new_cotation->Copy( STRUCT );
new_cotation->Pnext = m_Pcb->m_Drawings; new_cotation->SetNext( m_Pcb->m_Drawings );
new_cotation->Pback = m_Pcb; new_cotation->SetBack( m_Pcb );
m_Pcb->m_Drawings->Pback = new_cotation; m_Pcb->m_Drawings->SetBack( new_cotation );
m_Pcb->m_Drawings = new_cotation; m_Pcb->m_Drawings = new_cotation;
new_cotation->Move( MoveVector ); new_cotation->Move( MoveVector );
new_cotation->Draw( DrawPanel, DC, GR_OR ); new_cotation->Draw( DrawPanel, DC, GR_OR );

View File

@ -404,9 +404,9 @@ void CopyMarkedItems( MODULE* module, wxPoint offset )
D_PAD* NewPad = new D_PAD( module ); D_PAD* NewPad = new D_PAD( module );
NewPad->Copy( pad ); NewPad->Copy( pad );
NewPad->m_Selected = IS_SELECTED; NewPad->m_Selected = IS_SELECTED;
NewPad->Pnext = module->m_Pads; NewPad->SetNext( module->m_Pads );
NewPad->Pback = module; NewPad->SetBack( module );
module->m_Pads->Pback = NewPad; module->m_Pads->SetBack( NewPad );
module->m_Pads = NewPad; module->m_Pads = NewPad;
} }
@ -438,9 +438,9 @@ void CopyMarkedItems( MODULE* module, wxPoint offset )
if( NewStruct == NULL ) if( NewStruct == NULL )
break; break;
NewStruct->m_Selected = IS_SELECTED; NewStruct->m_Selected = IS_SELECTED;
NewStruct->Pnext = module->m_Drawings; NewStruct->SetNext( module->m_Drawings );
NewStruct->Pback = module; NewStruct->SetBack( module );
module->m_Drawings->Pback = module; module->m_Drawings->SetBack( module );
module->m_Drawings = NewStruct; module->m_Drawings = NewStruct;
} }

View File

@ -312,7 +312,7 @@ void PlaceCells( BOARD* Pcb, int net_code, int flag )
/* Put tracks and vias on matrix */ /* Put tracks and vias on matrix */
pt_segm = Pcb->m_Track; pt_segm = Pcb->m_Track;
for( ; pt_segm != NULL; pt_segm = (TRACK*) pt_segm->Pnext ) for( ; pt_segm != NULL; pt_segm = pt_segm->Next() )
{ {
if( net_code == pt_segm->GetNet() ) if( net_code == pt_segm->GetNet() )
continue; continue;
@ -323,7 +323,7 @@ void PlaceCells( BOARD* Pcb, int net_code, int flag )
/* Put zone filling on matrix */ /* Put zone filling on matrix */
pt_segm = (TRACK*) Pcb->m_Zone; pt_segm = (TRACK*) Pcb->m_Zone;
for( ; pt_segm != NULL; pt_segm = (TRACK*) pt_segm->Pnext ) for( ; pt_segm != NULL; pt_segm = pt_segm->Next() )
{ {
if( net_code == pt_segm->GetNet() ) if( net_code == pt_segm->GetNet() )
continue; continue;

View File

@ -217,11 +217,11 @@ wxPoint& BOARD::GetPosition()
void BOARD::UnLink() void BOARD::UnLink()
{ {
/* Modification du chainage arriere */ /* Modification du chainage arriere */
if( Pback ) if( Back() )
{ {
if( Pback->Type() == TYPEPCB ) if( Back()->Type() == TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
@ -230,10 +230,11 @@ void BOARD::UnLink()
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }
@ -249,13 +250,13 @@ void BOARD::Add( BOARD_ITEM* aBoardItem, int aControl )
{ {
// this one uses a vector // this one uses a vector
case TYPEMARKER: case TYPEMARKER:
aBoardItem->m_Parent = this; aBoardItem->SetParent( this );
m_markers.push_back( (MARKER*) aBoardItem ); m_markers.push_back( (MARKER*) aBoardItem );
break; break;
// this one uses a vector // this one uses a vector
case TYPEZONE_CONTAINER: case TYPEZONE_CONTAINER:
aBoardItem->m_Parent = this; aBoardItem->SetParent( this );
m_ZoneDescriptorList.push_back( (ZONE_CONTAINER*) aBoardItem ); m_ZoneDescriptorList.push_back( (ZONE_CONTAINER*) aBoardItem );
break; break;
@ -270,11 +271,11 @@ void BOARD::Add( BOARD_ITEM* aBoardItem, int aControl )
case TYPEMODULE: case TYPEMODULE:
// this is an insert, not an append which may also be needed. // this is an insert, not an append which may also be needed.
{ {
aBoardItem->Pback = this; aBoardItem->SetBack( this );
BOARD_ITEM* next = m_Modules; BOARD_ITEM* next = m_Modules;
aBoardItem->Pnext = next; aBoardItem->SetNext( next );
if( next ) if( next )
next->Pback = aBoardItem; next->SetBack( aBoardItem );
m_Modules = (MODULE*) aBoardItem; m_Modules = (MODULE*) aBoardItem;
} }
break; break;
@ -408,17 +409,16 @@ bool BOARD::ComputeBoundaryBox()
*/ */
{ {
int rayon, cx, cy, d, xmin, ymin, xmax, ymax; int rayon, cx, cy, d, xmin, ymin, xmax, ymax;
bool Has_Items = FALSE; bool hasItems = FALSE;
EDA_BaseStruct* PtStruct; EDA_BaseStruct* PtStruct;
DRAWSEGMENT* ptr; DRAWSEGMENT* ptr;
TRACK* Track;
xmin = ymin = 0x7FFFFFFFl; xmin = ymin = 0x7FFFFFFFl;
xmax = ymax = -0x7FFFFFFFl; xmax = ymax = -0x7FFFFFFFl;
/* Analyse PCB edges*/ /* Analyse PCB edges*/
PtStruct = m_Drawings; PtStruct = m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
if( PtStruct->Type() != TYPEDRAWSEGMENT ) if( PtStruct->Type() != TYPEDRAWSEGMENT )
continue; continue;
@ -435,7 +435,7 @@ bool BOARD::ComputeBoundaryBox()
ymin = MIN( ymin, cy - rayon ); ymin = MIN( ymin, cy - rayon );
xmax = MAX( xmax, cx + rayon ); xmax = MAX( xmax, cx + rayon );
ymax = MAX( ymax, cy + rayon ); ymax = MAX( ymax, cy + rayon );
Has_Items = TRUE; hasItems = TRUE;
} }
else else
{ {
@ -447,22 +447,22 @@ bool BOARD::ComputeBoundaryBox()
cy = MAX( ptr->m_Start.y, ptr->m_End.y ); cy = MAX( ptr->m_Start.y, ptr->m_End.y );
xmax = MAX( xmax, cx + d ); xmax = MAX( xmax, cx + d );
ymax = MAX( ymax, cy + d ); ymax = MAX( ymax, cy + d );
Has_Items = TRUE; hasItems = TRUE;
} }
} }
/* Analyse footprints */ /* Analyse footprints */
MODULE* module = m_Modules;
for( ; module != NULL; module = (MODULE*) module->Pnext ) for( MODULE* module = m_Modules; module; module = module->Next() )
{ {
Has_Items = TRUE; hasItems = TRUE;
xmin = MIN( xmin, ( module->m_Pos.x + module->m_BoundaryBox.GetX() ) ); xmin = MIN( xmin, ( module->m_Pos.x + module->m_BoundaryBox.GetX() ) );
ymin = MIN( ymin, ( module->m_Pos.y + module->m_BoundaryBox.GetY() ) ); ymin = MIN( ymin, ( module->m_Pos.y + module->m_BoundaryBox.GetY() ) );
xmax = MAX( xmax, module->m_Pos.x + module->m_BoundaryBox.GetRight() ); xmax = MAX( xmax, module->m_Pos.x + module->m_BoundaryBox.GetRight() );
ymax = MAX( ymax, module->m_Pos.y + module->m_BoundaryBox.GetBottom() ); ymax = MAX( ymax, module->m_Pos.y + module->m_BoundaryBox.GetBottom() );
D_PAD* pt_pad = module->m_Pads;
for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext ) for( D_PAD* pt_pad = module->m_Pads; pt_pad; pt_pad = pt_pad->Next() )
{ {
const wxPoint& pos = pt_pad->GetPosition(); const wxPoint& pos = pt_pad->GetPosition();
@ -475,35 +475,35 @@ bool BOARD::ComputeBoundaryBox()
} }
/* Analyse track and zones */ /* Analyse track and zones */
for( Track = m_Track; Track != NULL; Track = (TRACK*) Track->Pnext ) for( TRACK* track = m_Track; track; track = track->Next() )
{ {
d = (Track->m_Width / 2) + 1; d = (track->m_Width / 2) + 1;
cx = MIN( Track->m_Start.x, Track->m_End.x ); cx = MIN( track->m_Start.x, track->m_End.x );
cy = MIN( Track->m_Start.y, Track->m_End.y ); cy = MIN( track->m_Start.y, track->m_End.y );
xmin = MIN( xmin, cx - d ); xmin = MIN( xmin, cx - d );
ymin = MIN( ymin, cy - d ); ymin = MIN( ymin, cy - d );
cx = MAX( Track->m_Start.x, Track->m_End.x ); cx = MAX( track->m_Start.x, track->m_End.x );
cy = MAX( Track->m_Start.y, Track->m_End.y ); cy = MAX( track->m_Start.y, track->m_End.y );
xmax = MAX( xmax, cx + d ); xmax = MAX( xmax, cx + d );
ymax = MAX( ymax, cy + d ); ymax = MAX( ymax, cy + d );
Has_Items = TRUE; hasItems = TRUE;
} }
for( Track = m_Zone; Track != NULL; Track = (TRACK*) Track->Pnext ) for( TRACK* track = m_Zone; track; track = track->Next() )
{ {
d = (Track->m_Width / 2) + 1; d = (track->m_Width / 2) + 1;
cx = MIN( Track->m_Start.x, Track->m_End.x ); cx = MIN( track->m_Start.x, track->m_End.x );
cy = MIN( Track->m_Start.y, Track->m_End.y ); cy = MIN( track->m_Start.y, track->m_End.y );
xmin = MIN( xmin, cx - d ); xmin = MIN( xmin, cx - d );
ymin = MIN( ymin, cy - d ); ymin = MIN( ymin, cy - d );
cx = MAX( Track->m_Start.x, Track->m_End.x ); cx = MAX( track->m_Start.x, track->m_End.x );
cy = MAX( Track->m_Start.y, Track->m_End.y ); cy = MAX( track->m_Start.y, track->m_End.y );
xmax = MAX( xmax, cx + d ); xmax = MAX( xmax, cx + d );
ymax = MAX( ymax, cy + d ); ymax = MAX( ymax, cy + d );
Has_Items = TRUE; hasItems = TRUE;
} }
if( !Has_Items && m_PcbFrame ) if( !hasItems && m_PcbFrame )
{ {
if( m_PcbFrame->m_Draw_Sheet_Ref ) if( m_PcbFrame->m_Draw_Sheet_Ref )
{ {
@ -525,7 +525,7 @@ bool BOARD::ComputeBoundaryBox()
m_BoundaryBox.SetWidth( xmax - xmin ); m_BoundaryBox.SetWidth( xmax - xmin );
m_BoundaryBox.SetHeight( ymax - ymin ); m_BoundaryBox.SetHeight( ymax - ymin );
return Has_Items; return hasItems;
} }
@ -541,8 +541,6 @@ void BOARD::Display_Infos( WinEDA_DrawFrame* frame )
#define POS_AFF_NBCONNECT 40 #define POS_AFF_NBCONNECT 40
#define POS_AFF_NBNOCONNECT 48 #define POS_AFF_NBNOCONNECT 48
int nb_vias = 0, ii;
EDA_BaseStruct* Struct;
wxString txt; wxString txt;
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
@ -550,10 +548,10 @@ void BOARD::Display_Infos( WinEDA_DrawFrame* frame )
txt.Printf( wxT( "%d" ), m_NbPads ); txt.Printf( wxT( "%d" ), m_NbPads );
Affiche_1_Parametre( frame, POS_AFF_NBPADS, _( "Pads" ), txt, DARKGREEN ); Affiche_1_Parametre( frame, POS_AFF_NBPADS, _( "Pads" ), txt, DARKGREEN );
for( ii = 0, Struct = m_Track; Struct != NULL; Struct = Struct->Pnext ) int nb_vias = 0;
for( BOARD_ITEM* item = m_Track; item; item = item->Next() )
{ {
ii++; if( item->Type() == TYPEVIA )
if( Struct->Type() == TYPEVIA )
nb_vias++; nb_vias++;
} }

View File

@ -35,24 +35,23 @@ COTATION::~COTATION()
*/ */
void COTATION::UnLink() void COTATION::UnLink()
{ {
/* Modification du chainage arriere */ if( Back() )
if( Pback )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (BOARD*) Pback )->m_Drawings = (BOARD_ITEM*) Pnext; ((BOARD*) Back() )->m_Drawings = Next();
} }
} }
/* Modification du chainage avant */ if( Next() )
if( Pnext ) Next()->SetBack( Back() );
Pnext->Pback = Pback;
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }

View File

@ -28,6 +28,9 @@ public:
COTATION( BOARD_ITEM* StructFather ); COTATION( BOARD_ITEM* StructFather );
~COTATION(); ~COTATION();
COTATION* Next() const { return (COTATION*) Pnext; }
COTATION* Back() const { return (COTATION*) Pback; }
wxPoint& GetPosition() wxPoint& GetPosition()
{ {
return m_Pos; return m_Pos;

View File

@ -31,30 +31,25 @@ DRAWSEGMENT:: ~DRAWSEGMENT()
void DRAWSEGMENT::UnLink() void DRAWSEGMENT::UnLink()
/**
* Function UnLink
* remove item from linked list.
*/
{ {
/* ereas back link */ if( Back() )
if( Pback )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (BOARD*) Pback )->m_Drawings = (BOARD_ITEM*) Pnext; ( (BOARD*) Back() )->m_Drawings = Next();
} }
} }
/* erase forward link */ /* erase forward link */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }

View File

@ -20,6 +20,8 @@ public:
DRAWSEGMENT( BOARD_ITEM* StructFather, KICAD_T idtype = TYPEDRAWSEGMENT ); DRAWSEGMENT( BOARD_ITEM* StructFather, KICAD_T idtype = TYPEDRAWSEGMENT );
~DRAWSEGMENT(); ~DRAWSEGMENT();
DRAWSEGMENT* Next() const { return (DRAWSEGMENT*) Pnext; }
DRAWSEGMENT* Back() const { return (DRAWSEGMENT*) Pback; }
/** /**
* Function GetPosition * Function GetPosition
@ -55,7 +57,10 @@ public:
bool ReadDrawSegmentDescr( FILE* File, int* LineNum ); bool ReadDrawSegmentDescr( FILE* File, int* LineNum );
/* remove this from the linked list */ /**
* Function UnLink
* remove item from linked list.
*/
void UnLink(); void UnLink();
void Copy( DRAWSEGMENT* source ); void Copy( DRAWSEGMENT* source );

View File

@ -84,23 +84,24 @@ void EDGE_MODULE::UnLink()
/********************************/ /********************************/
{ {
/* Modification du chainage arriere */ /* Modification du chainage arriere */
if( Pback ) if( Back() )
{ {
if( Pback->Type() != TYPEMODULE ) if( Back()->Type() != TYPEMODULE )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (MODULE*) Pback )->m_Drawings = (BOARD_ITEM*) Pnext; ( (MODULE*) Back() )->m_Drawings = Next();
} }
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }
@ -275,7 +276,7 @@ void EDGE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
if( !module ) if( !module )
return; return;
BOARD* board = (BOARD*) module->m_Parent; BOARD* board = (BOARD*) module->GetParent();
if( !board ) if( !board )
return; return;

View File

@ -29,6 +29,14 @@ public:
EDGE_MODULE( EDGE_MODULE* edge ); EDGE_MODULE( EDGE_MODULE* edge );
~EDGE_MODULE(); ~EDGE_MODULE();
EDGE_MODULE* Next() const { return (EDGE_MODULE*) Pnext; }
EDGE_MODULE* Back() const { return (EDGE_MODULE*) Pback; }
/**
* Function UnLink
* remove item from linked list.
*/
/** /**
* Function GetPosition * Function GetPosition

View File

@ -55,23 +55,24 @@ wxPoint& EQUIPOT::GetPosition()
void EQUIPOT::UnLink() void EQUIPOT::UnLink()
{ {
/* Modification du chainage arriere */ /* Modification du chainage arriere */
if( Pback ) if( Back() )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (BOARD*) Pback )->m_Equipots = (EQUIPOT*) Pnext; ( (BOARD*) Back() )->m_Equipots = Next();
} }
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }

View File

@ -28,7 +28,8 @@ public:
EQUIPOT( BOARD_ITEM* StructFather ); EQUIPOT( BOARD_ITEM* StructFather );
~EQUIPOT(); ~EQUIPOT();
EQUIPOT* Next() { return (EQUIPOT*) Pnext; } EQUIPOT* Next() const { return (EQUIPOT*) Pnext; }
EQUIPOT* Back() const { return (EQUIPOT*) Pback; }
/** /**
* Function GetPosition * Function GetPosition

View File

@ -25,29 +25,24 @@ MIREPCB::~MIREPCB()
/***************************/ /***************************/
void MIREPCB::UnLink() void MIREPCB::UnLink()
/***************************/ /***************************/
/* supprime du chainage la structure Struct
* les structures arrieres et avant sont chainees directement
*/
{ {
/* Modification du chainage arriere */ if( Back() )
if( Pback )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (BOARD*) Pback )->m_Drawings = (BOARD_ITEM*) Pnext; ( (BOARD*) Back() )->m_Drawings = Next();
} }
} }
/* Modification du chainage avant */ if( Next() )
if( Pnext ) Next()->SetBack( Back() );
Pnext->Pback = Pback;
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }

View File

@ -19,6 +19,9 @@ public:
MIREPCB( BOARD_ITEM* StructFather ); MIREPCB( BOARD_ITEM* StructFather );
~MIREPCB(); ~MIREPCB();
MIREPCB* Next() const { return (MIREPCB*) Pnext; }
MIREPCB* Back() const { return (MIREPCB*) Pnext; }
wxPoint& GetPosition() wxPoint& GetPosition()
{ {
return m_Pos; return m_Pos;

View File

@ -54,8 +54,6 @@ void MODULE::DrawAncre( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset
/*************************************************/ /*************************************************/
/* Class MODULE : description d'un composant pcb */ /* Class MODULE : description d'un composant pcb */
/*************************************************/ /*************************************************/
/* Constructeur de la classe MODULE */
MODULE::MODULE( BOARD* parent ) : MODULE::MODULE( BOARD* parent ) :
BOARD_ITEM( parent, TYPEMODULE ) BOARD_ITEM( parent, TYPEMODULE )
{ {
@ -71,53 +69,51 @@ MODULE::MODULE( BOARD* parent ) :
m_Surface = 0; m_Surface = 0;
m_Link = 0; m_Link = 0;
m_LastEdit_Time = time( NULL ); m_LastEdit_Time = time( NULL );
m_Reference = new TEXTE_MODULE( this, TEXT_is_REFERENCE ); m_Reference = new TEXTE_MODULE( this, TEXT_is_REFERENCE );
m_Reference->Pback = this; m_Reference->SetBack( this );
m_Value = new TEXTE_MODULE( this, TEXT_is_VALUE ); m_Value = new TEXTE_MODULE( this, TEXT_is_VALUE );
m_Value->Pback = this; m_Value->SetBack( this );
m_3D_Drawings = new Struct3D_Master( this ); m_3D_Drawings = new Struct3D_Master( this );
} }
/* Destructeur */
MODULE::~MODULE() MODULE::~MODULE()
{ {
D_PAD* Pad; EDA_BaseStruct* item;
EDA_BaseStruct* Struct, * NextStruct; EDA_BaseStruct* next;
delete m_Reference; delete m_Reference;
delete m_Value; delete m_Value;
for( Struct = m_3D_Drawings; Struct != NULL; Struct = NextStruct ) for( item = m_3D_Drawings; item; item = next )
{ {
NextStruct = Struct->Pnext; next = item->Next();
delete Struct; delete item;
} }
/* effacement des pads */ for( item = m_Pads; item; item = next )
for( Pad = m_Pads; Pad != NULL; Pad = (D_PAD*) NextStruct )
{ {
NextStruct = Pad->Pnext; next = item->Next();
delete Pad; delete item;
} }
/* effacement des elements de trace */ /* effacement des elements de trace */
for( Struct = m_Drawings; Struct != NULL; Struct = NextStruct ) for( item = m_Drawings; item; item = next )
{ {
NextStruct = Struct->Pnext; next = item->Next();
switch( ( Struct->Type() ) ) switch( item->Type() )
{ {
case TYPEEDGEMODULE: case TYPEEDGEMODULE:
delete (EDGE_MODULE*) Struct;
break;
case TYPETEXTEMODULE: case TYPETEXTEMODULE:
delete (TEXTE_MODULE*) Struct; delete item;
break; break;
default: default:
DisplayError( NULL, wxT( "Warn: ItemType not handled in delete MODULE" ) ); DisplayError( NULL, wxT( "Warning: Item Type not handled in delete MODULE" ) );
NextStruct = NULL; next = NULL;
break; break;
} }
} }
@ -128,7 +124,7 @@ MODULE::~MODULE()
void MODULE::Copy( MODULE* Module ) void MODULE::Copy( MODULE* Module )
/*********************************/ /*********************************/
{ {
D_PAD* pad, * lastpad; D_PAD* lastpad;
m_Pos = Module->m_Pos; m_Pos = Module->m_Pos;
m_Layer = Module->m_Layer; m_Layer = Module->m_Layer;
@ -148,28 +144,30 @@ void MODULE::Copy( MODULE* Module )
m_Value->Copy( Module->m_Value ); m_Value->Copy( Module->m_Value );
/* Copie des structures auxiliaires: Pads */ /* Copie des structures auxiliaires: Pads */
lastpad = NULL; pad = Module->m_Pads; lastpad = NULL;
for( ; pad != NULL; pad = (D_PAD*) pad->Pnext )
for( D_PAD* pad = Module->m_Pads; pad; pad = pad->Next() )
{ {
D_PAD* newpad = new D_PAD( this ); D_PAD* newpad = new D_PAD( this );
newpad->Copy( pad ); newpad->Copy( pad );
if( m_Pads == NULL ) if( m_Pads == NULL )
{ {
newpad->Pback = this; newpad->SetBack( this );
m_Pads = (D_PAD*) newpad; m_Pads = newpad;
} }
else else
{ {
newpad->Pback = lastpad; newpad->SetBack( lastpad );
lastpad->Pnext = newpad; lastpad->SetNext( newpad );
} }
lastpad = newpad; lastpad = newpad;
} }
/* Copy des structures auxiliaires: Drawings */ /* Copy des structures auxiliaires: Drawings */
BOARD_ITEM* OldStruct = Module->m_Drawings;
BOARD_ITEM* NewStruct, * LastStruct = NULL; BOARD_ITEM* NewStruct, * LastStruct = NULL;
BOARD_ITEM* OldStruct = Module->m_Drawings;
for( ; OldStruct; OldStruct = OldStruct->Next() ) for( ; OldStruct; OldStruct = OldStruct->Next() )
{ {
NewStruct = NULL; NewStruct = NULL;
@ -193,15 +191,16 @@ void MODULE::Copy( MODULE* Module )
if( NewStruct == NULL ) if( NewStruct == NULL )
break; break;
if( m_Drawings == NULL ) if( m_Drawings == NULL )
{ {
NewStruct->Pback = this; NewStruct->SetBack( this );
m_Drawings = NewStruct; m_Drawings = NewStruct;
} }
else else
{ {
NewStruct->Pback = LastStruct; NewStruct->SetBack( LastStruct );
LastStruct->Pnext = NewStruct; LastStruct->SetNext( NewStruct );
} }
LastStruct = NewStruct; LastStruct = NewStruct;
} }
@ -211,14 +210,14 @@ void MODULE::Copy( MODULE* Module )
Struct3D_Master* Struct3D, * NewStruct3D, * CurrStruct3D; Struct3D_Master* Struct3D, * NewStruct3D, * CurrStruct3D;
Struct3D = (Struct3D_Master*) Module->m_3D_Drawings->Pnext; Struct3D = Module->m_3D_Drawings->Next();
CurrStruct3D = m_3D_Drawings; CurrStruct3D = m_3D_Drawings;
for( ; Struct3D != NULL; Struct3D = (Struct3D_Master*) Struct3D->Pnext ) for( ; Struct3D != NULL; Struct3D = Struct3D->Next() )
{ {
NewStruct3D = new Struct3D_Master( this ); NewStruct3D = new Struct3D_Master( this );
NewStruct3D->Copy( Struct3D ); NewStruct3D->Copy( Struct3D );
CurrStruct3D->Pnext = NewStruct3D; CurrStruct3D->SetNext( NewStruct3D );
NewStruct3D->Pback = CurrStruct3D; NewStruct3D->SetBack( CurrStruct3D );
CurrStruct3D = NewStruct3D; CurrStruct3D = NewStruct3D;
} }
@ -233,12 +232,11 @@ void MODULE::Copy( MODULE* Module )
*/ */
void MODULE::UnLink() void MODULE::UnLink()
{ {
/* Modification du chainage arriere */ if( Back() )
if( Pback )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
@ -248,18 +246,20 @@ void MODULE::UnLink()
g_UnDeleteStack[g_UnDeleteStackPtr - 1] = Next(); g_UnDeleteStack[g_UnDeleteStackPtr - 1] = Next();
} }
else else
( (BOARD*) Pback )->m_Modules = (MODULE*) Pnext; ( (BOARD*) Back() )->m_Modules = Next();
} }
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }
/**********************************************************/ /**********************************************************/
void MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, void MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
int draw_mode, const wxPoint& offset ) int draw_mode, const wxPoint& offset )
@ -276,13 +276,12 @@ void MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
if( (m_Flags & DO_NOT_DRAW) ) if( (m_Flags & DO_NOT_DRAW) )
return; return;
/* Draw pads */ for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
D_PAD* pt_pad = m_Pads;
for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext )
{ {
if( pt_pad->m_Flags & IS_MOVED ) if( pad->m_Flags & IS_MOVED )
continue; continue;
pt_pad->Draw( panel, DC, draw_mode, offset );
pad->Draw( panel, DC, draw_mode, offset );
} }
// Draws foootprint anchor // Draws foootprint anchor
@ -453,7 +452,7 @@ int MODULE::Write_3D_Descr( FILE* File ) const
char buf[512]; char buf[512];
Struct3D_Master* Struct3D = m_3D_Drawings; Struct3D_Master* Struct3D = m_3D_Drawings;
for( ; Struct3D != NULL; Struct3D = (Struct3D_Master*) Struct3D->Pnext ) for( ; Struct3D != NULL; Struct3D = Struct3D->Next() )
{ {
if( !Struct3D->m_Shape3DName.IsEmpty() ) if( !Struct3D->m_Shape3DName.IsEmpty() )
{ {
@ -503,11 +502,12 @@ int MODULE::Read_3D_Descr( FILE* File, int* LineNum )
if( !Struct3D->m_Shape3DName.IsEmpty() ) if( !Struct3D->m_Shape3DName.IsEmpty() )
{ {
Struct3D_Master* NewStruct3D; Struct3D_Master* NewStruct3D;
while( Struct3D->Pnext ) while( Struct3D->Next() )
Struct3D = (Struct3D_Master*) Struct3D->Pnext; Struct3D = Struct3D->Next();
Struct3D->Pnext = NewStruct3D = new Struct3D_Master( this ); NewStruct3D = new Struct3D_Master( this );
NewStruct3D->Pback = Struct3D; Struct3D->SetNext( NewStruct3D );
NewStruct3D->SetBack( Struct3D );
Struct3D = NewStruct3D; Struct3D = NewStruct3D;
} }
@ -590,13 +590,13 @@ int MODULE::ReadDescr( FILE* File, int* LineNum )
if( LastPad == NULL ) if( LastPad == NULL )
{ {
ptpad->Pback = (EDA_BaseStruct*) this; ptpad->SetBack( this );
m_Pads = ptpad; m_Pads = ptpad;
} }
else else
{ {
ptpad->Pback = (EDA_BaseStruct*) LastPad; ptpad->SetBack( LastPad );
LastPad->Pnext = (EDA_BaseStruct*) ptpad; LastPad->SetNext( ptpad );
} }
LastPad = ptpad; LastPad = ptpad;
continue; continue;
@ -683,13 +683,13 @@ int MODULE::ReadDescr( FILE* File, int* LineNum )
DrawText = new TEXTE_MODULE( this ); DrawText = new TEXTE_MODULE( this );
if( LastModStruct == NULL ) if( LastModStruct == NULL )
{ {
DrawText->Pback = this; DrawText->SetBack( this );
m_Drawings = DrawText; m_Drawings = DrawText;
} }
else else
{ {
DrawText->Pback = LastModStruct; DrawText->SetBack( LastModStruct );
LastModStruct->Pnext = DrawText; LastModStruct->SetNext( DrawText );
} }
LastModStruct = DrawText; LastModStruct = DrawText;
} }
@ -702,13 +702,13 @@ int MODULE::ReadDescr( FILE* File, int* LineNum )
if( LastModStruct == NULL ) if( LastModStruct == NULL )
{ {
DrawSegm->Pback = this; DrawSegm->SetBack( this );
m_Drawings = DrawSegm; m_Drawings = DrawSegm;
} }
else else
{ {
DrawSegm->Pback = LastModStruct; DrawSegm->SetBack( LastModStruct );
LastModStruct->Pnext = DrawSegm; LastModStruct->SetNext( DrawSegm );
} }
LastModStruct = DrawSegm; LastModStruct = DrawSegm;
@ -757,8 +757,7 @@ void MODULE::SetPosition( const wxPoint& newpos )
m_Value->m_Pos.y += deltaY; m_Value->m_Pos.y += deltaY;
/* deplacement des pastilles */ /* deplacement des pastilles */
D_PAD* pad = m_Pads; for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
for( ; pad != NULL; pad = (D_PAD*) pad->Pnext )
{ {
pad->m_Pos.x += deltaX; pad->m_Pos.x += deltaX;
pad->m_Pos.y += deltaY; pad->m_Pos.y += deltaY;
@ -766,7 +765,7 @@ void MODULE::SetPosition( const wxPoint& newpos )
/* deplacement des dessins de l'empreinte : */ /* deplacement des dessins de l'empreinte : */
EDA_BaseStruct* PtStruct = m_Drawings; EDA_BaseStruct* PtStruct = m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
switch( PtStruct->Type() ) switch( PtStruct->Type() )
{ {
@ -809,8 +808,7 @@ void MODULE::SetOrientation( int newangle )
NORMALIZE_ANGLE_POS( m_Orient ); NORMALIZE_ANGLE_POS( m_Orient );
/* deplacement et rotation des pastilles */ /* deplacement et rotation des pastilles */
D_PAD* pad = m_Pads; for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
for( ; pad != NULL; pad = (D_PAD*) pad->Pnext )
{ {
px = pad->m_Pos0.x; px = pad->m_Pos0.x;
py = pad->m_Pos0.y; py = pad->m_Pos0.y;
@ -829,7 +827,7 @@ void MODULE::SetOrientation( int newangle )
/* deplacement des contours et textes de l'empreinte : */ /* deplacement des contours et textes de l'empreinte : */
EDA_BaseStruct* PtStruct = m_Drawings; EDA_BaseStruct* PtStruct = m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Next() )
{ {
if( PtStruct->Type() == TYPEEDGEMODULE ) if( PtStruct->Type() == TYPEEDGEMODULE )
{ {
@ -862,25 +860,23 @@ void MODULE::Set_Rectangle_Encadrement()
* en coord relatives / position ancre * en coord relatives / position ancre
*/ */
{ {
EDGE_MODULE* pt_edge_mod;
D_PAD* pad;
int width; int width;
int cx, cy, uxf, uyf, rayon; int cx, cy, uxf, uyf, rayon;
int xmax, ymax; int xmax, ymax;
/* Init des pointeurs */ /* Init des pointeurs */
pt_edge_mod = (EDGE_MODULE*) m_Drawings;
/* Init des coord du cadre a une valeur limite non nulle */ /* Init des coord du cadre a une valeur limite non nulle */
m_BoundaryBox.m_Pos.x = -500; xmax = 500; m_BoundaryBox.m_Pos.x = -500; xmax = 500;
m_BoundaryBox.m_Pos.y = -500; ymax = 500; m_BoundaryBox.m_Pos.y = -500; ymax = 500;
/* Contours: Recherche des coord min et max et mise a jour du cadre */ /* Contours: Recherche des coord min et max et mise a jour du cadre */
for( ; pt_edge_mod != NULL; pt_edge_mod = (EDGE_MODULE*) pt_edge_mod->Pnext ) for( EDGE_MODULE* pt_edge_mod = (EDGE_MODULE*) m_Drawings;
pt_edge_mod; pt_edge_mod = pt_edge_mod->Next() )
{ {
if( pt_edge_mod->Type() != TYPEEDGEMODULE ) if( pt_edge_mod->Type() != TYPEEDGEMODULE )
continue; continue;
width = pt_edge_mod->m_Width / 2; width = pt_edge_mod->m_Width / 2;
switch( pt_edge_mod->m_Shape ) switch( pt_edge_mod->m_Shape )
@ -913,7 +909,7 @@ void MODULE::Set_Rectangle_Encadrement()
} }
/* Pads: Recherche des coord min et max et mise a jour du cadre */ /* Pads: Recherche des coord min et max et mise a jour du cadre */
for( pad = m_Pads; pad != NULL; pad = (D_PAD*) pad->Pnext ) for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{ {
rayon = pad->m_Rayon; rayon = pad->m_Rayon;
cx = pad->m_Pos0.x; cy = pad->m_Pos0.y; cx = pad->m_Pos0.x; cy = pad->m_Pos0.y;
@ -940,8 +936,6 @@ void MODULE::SetRectangleExinscrit()
* Met egalement a jour la surface (.m_Surface) du module. * Met egalement a jour la surface (.m_Surface) du module.
*/ */
{ {
EDGE_MODULE* EdgeMod;
D_PAD* Pad;
int width; int width;
int cx, cy, uxf, uyf, rayon; int cx, cy, uxf, uyf, rayon;
int xmax, ymax; int xmax, ymax;
@ -950,20 +944,20 @@ void MODULE::SetRectangleExinscrit()
m_RealBoundaryBox.m_Pos.y = ymax = m_Pos.y; m_RealBoundaryBox.m_Pos.y = ymax = m_Pos.y;
/* Contours: Recherche des coord min et max et mise a jour du cadre */ /* Contours: Recherche des coord min et max et mise a jour du cadre */
EdgeMod = (EDGE_MODULE*) m_Drawings; for( EDGE_MODULE* edge = (EDGE_MODULE*) m_Drawings; edge; edge = edge->Next() )
for( ; EdgeMod != NULL; EdgeMod = (EDGE_MODULE*) EdgeMod->Pnext )
{ {
if( EdgeMod->Type() != TYPEEDGEMODULE ) if( edge->Type() != TYPEEDGEMODULE )
continue; continue;
width = EdgeMod->m_Width / 2;
switch( EdgeMod->m_Shape ) width = edge->m_Width / 2;
switch( edge->m_Shape )
{ {
case S_ARC: case S_ARC:
case S_CIRCLE: case S_CIRCLE:
{ {
cx = EdgeMod->m_Start.x; cy = EdgeMod->m_Start.y; // centre cx = edge->m_Start.x; cy = edge->m_Start.y; // centre
uxf = EdgeMod->m_End.x; uyf = EdgeMod->m_End.y; uxf = edge->m_End.x; uyf = edge->m_End.y;
rayon = (int) hypot( (double) (cx - uxf), (double) (cy - uyf) ); rayon = (int) hypot( (double) (cx - uxf), (double) (cy - uyf) );
rayon += width; rayon += width;
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, cx - rayon ); m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, cx - rayon );
@ -974,25 +968,29 @@ void MODULE::SetRectangleExinscrit()
} }
default: default:
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, EdgeMod->m_Start.x - width ); m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, edge->m_Start.x - width );
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, EdgeMod->m_End.x - width ); m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, edge->m_End.x - width );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, EdgeMod->m_Start.y - width ); m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, edge->m_Start.y - width );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, EdgeMod->m_End.y - width ); m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, edge->m_End.y - width );
xmax = MAX( xmax, EdgeMod->m_Start.x + width ); xmax = MAX( xmax, edge->m_Start.x + width );
xmax = MAX( xmax, EdgeMod->m_End.x + width ); xmax = MAX( xmax, edge->m_End.x + width );
ymax = MAX( ymax, EdgeMod->m_Start.y + width ); ymax = MAX( ymax, edge->m_Start.y + width );
ymax = MAX( ymax, EdgeMod->m_End.y + width ); ymax = MAX( ymax, edge->m_End.y + width );
break; break;
} }
} }
/* Pads: Recherche des coord min et max et mise a jour du cadre */ /* Pads: Recherche des coord min et max et mise a jour du cadre */
for( Pad = m_Pads; Pad != NULL; Pad = (D_PAD*) Pad->Pnext ) for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{ {
rayon = Pad->m_Rayon; rayon = pad->m_Rayon;
cx = Pad->m_Pos.x; cy = Pad->m_Pos.y;
cx = pad->m_Pos.x;
cy = pad->m_Pos.y;
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, cx - rayon ); m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, cx - rayon );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, cy - rayon ); m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, cy - rayon );
xmax = MAX( xmax, cx + rayon ); xmax = MAX( xmax, cx + rayon );
ymax = MAX( ymax, cy + rayon ); ymax = MAX( ymax, cy + rayon );
} }
@ -1022,12 +1020,11 @@ EDA_Rect MODULE::GetBoundingBox()
text_area = m_Value->GetBoundingBox(); text_area = m_Value->GetBoundingBox();
area.Merge( text_area ); area.Merge( text_area );
EDGE_MODULE* EdgeMod = (EDGE_MODULE*) m_Drawings; for( EDGE_MODULE* edge = (EDGE_MODULE*) m_Drawings; edge; edge = edge->Next() )
for( ; EdgeMod != NULL; EdgeMod = (EDGE_MODULE*) EdgeMod->Pnext )
{ {
if( EdgeMod->Type() != TYPETEXTEMODULE ) if( edge->Type() != TYPETEXTEMODULE )
continue; continue;
text_area = ((TEXTE_MODULE*)EdgeMod)->GetBoundingBox(); text_area = ((TEXTE_MODULE*)edge)->GetBoundingBox();
area.Merge( text_area ); area.Merge( text_area );
} }
@ -1086,7 +1083,7 @@ void MODULE::Display_Infos( WinEDA_DrawFrame* frame )
while( PtStruct ) while( PtStruct )
{ {
nbpad++; nbpad++;
PtStruct = PtStruct->Pnext; PtStruct = PtStruct->Next();
} }
msg.Printf( wxT( "%d" ), nbpad ); msg.Printf( wxT( "%d" ), nbpad );
@ -1288,20 +1285,20 @@ void MODULE::Show( int nestLevel, std::ostream& os )
NestedSpace( nestLevel + 1, os ) << "<mpads>\n"; NestedSpace( nestLevel + 1, os ) << "<mpads>\n";
p = m_Pads; p = m_Pads;
for( ; p; p = p->Pnext ) for( ; p; p = p->Next() )
p->Show( nestLevel + 2, os ); p->Show( nestLevel + 2, os );
NestedSpace( nestLevel + 1, os ) << "</mpads>\n"; NestedSpace( nestLevel + 1, os ) << "</mpads>\n";
NestedSpace( nestLevel + 1, os ) << "<mdrawings>\n"; NestedSpace( nestLevel + 1, os ) << "<mdrawings>\n";
p = m_Drawings; p = m_Drawings;
for( ; p; p = p->Pnext ) for( ; p; p = p->Next() )
p->Show( nestLevel + 2, os ); p->Show( nestLevel + 2, os );
NestedSpace( nestLevel + 1, os ) << "</mdrawings>\n"; NestedSpace( nestLevel + 1, os ) << "</mdrawings>\n";
p = m_Son; p = m_Son;
for( ; p; p = p->Pnext ) for( ; p; p = p->Next() )
{ {
p->Show( nestLevel + 1, os ); p->Show( nestLevel + 1, os );
} }

View File

@ -74,13 +74,24 @@ public:
MODULE( MODULE* module ); MODULE( MODULE* module );
~MODULE(); ~MODULE();
MODULE* Next() const { return (MODULE*) Pnext; }
MODULE* Back() const { return (MODULE*) Pback; }
void Copy( MODULE* Module ); // Copy structure void Copy( MODULE* Module ); // Copy structure
MODULE* Next() { return (MODULE*) Pnext; }
/** Function Set_Rectangle_Encadrement() /**
* Calculates the bounding box * Function Add
* for orient 0 et origin = module anchor) * adds the given item to this MODULE and takes ownership of its memory.
* @param aBoardItem The item to add to this board.
* @param doInsert If true, then insert, else append
void Add( BOARD_ITEM* aBoardItem, bool doInsert = true );
*/
/**
* Function Set_Rectangle_Encadrement()
* calculates the bounding box for orient 0 et origin = module anchor)
*/ */
void Set_Rectangle_Encadrement(); void Set_Rectangle_Encadrement();
@ -89,6 +100,7 @@ public:
* and also calculates the area value (used in automatic placement) * and also calculates the area value (used in automatic placement)
*/ */
void SetRectangleExinscrit(); void SetRectangleExinscrit();
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* returns the bounding box of this Footprint * returns the bounding box of this Footprint
@ -156,7 +168,7 @@ public:
/** /**
* Function Read_GPCB_Descr * Function Read_GPCB_Descr
* Read a footprint description in GPCB format (newlib version) * reads a footprint description in GPCB format (newlib version)
* @param CmpFullFileName = Full file name (there is one footprint per file. * @param CmpFullFileName = Full file name (there is one footprint per file.
* this is also the footprint name * this is also the footprint name
* @return bool - true if success reading else false. * @return bool - true if success reading else false.

View File

@ -211,23 +211,24 @@ void D_PAD::UnLink()
*/ */
{ {
/* Modification du chainage arriere */ /* Modification du chainage arriere */
if( Pback ) if( Back() )
{ {
if( Pback->Type() != TYPEMODULE ) if( Back()->Type() != TYPEMODULE )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (MODULE*) Pback )->m_Pads = (D_PAD*) Pnext; ( (MODULE*) Back() )->m_Pads = Next();
} }
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }

View File

@ -51,23 +51,24 @@ void TEXTE_PCB::Copy( TEXTE_PCB* source )
void TEXTE_PCB::UnLink() void TEXTE_PCB::UnLink()
{ {
/* Modification du chainage arriere */ /* Modification du chainage arriere */
if( Pback ) if( Back() )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (BOARD*) Pback )->m_Drawings = (BOARD_ITEM*) Pnext; ( (BOARD*) Back() )->m_Drawings = Next();
} }
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }
@ -175,7 +176,7 @@ void TEXTE_PCB::Display_Infos( WinEDA_DrawFrame* frame )
wxASSERT( parent ); wxASSERT( parent );
if( parent->Type() == TYPECOTATION ) if( parent->Type() == TYPECOTATION )
board = (BOARD*) parent->m_Parent; board = (BOARD*) parent->GetParent();
else else
board = (BOARD*) parent; board = (BOARD*) parent;
wxASSERT( board ); wxASSERT( board );

View File

@ -211,23 +211,24 @@ void TEXTE_MODULE::Copy( TEXTE_MODULE* source )
void TEXTE_MODULE::UnLink() void TEXTE_MODULE::UnLink()
{ {
/* Modification du chainage arriere */ /* Modification du chainage arriere */
if( Pback ) if( Back() )
{ {
if( Pback->Type() != TYPEMODULE ) if( Back()->Type() != TYPEMODULE )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
( (MODULE*) Pback )->m_Drawings = (BOARD_ITEM*) Pnext; ( (MODULE*) Back() )->m_Drawings = Next();
} }
} }
/* Modification du chainage avant */ /* Modification du chainage avant */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }
@ -481,7 +482,7 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
if( !module ) if( !module )
return; return;
BOARD* board = (BOARD*) module->m_Parent; BOARD* board = (BOARD*) module->GetParent();
wxASSERT( board ); wxASSERT( board );
static const wxString text_type_msg[3] = { static const wxString text_type_msg[3] = {

View File

@ -33,6 +33,9 @@ public:
TEXTE_MODULE( MODULE* parent, int text_type = TEXT_is_DIVERS ); TEXTE_MODULE( MODULE* parent, int text_type = TEXT_is_DIVERS );
~TEXTE_MODULE(); ~TEXTE_MODULE();
TEXTE_MODULE* Next() const { return (TEXTE_MODULE*) Pnext; }
TEXTE_MODULE* Back() const { return (TEXTE_MODULE*) Pback; }
/** /**
* Function GetPosition * Function GetPosition
* returns the position of this object. * returns the position of this object.

View File

@ -409,11 +409,11 @@ void SEGVIA::ReturnLayerPair( int* top_layer, int* bottom_layer ) const
void TRACK::UnLink() void TRACK::UnLink()
{ {
/* Remove the back link */ /* Remove the back link */
if( Pback ) if( Back() )
{ {
if( Pback->Type() != TYPEPCB ) if( Back()->Type() != TYPEPCB )
{ {
Pback->Pnext = Pnext; Back()->SetNext( Next() );
} }
else /* Le chainage arriere pointe sur la structure "Pere" */ else /* Le chainage arriere pointe sur la structure "Pere" */
{ {
@ -426,26 +426,27 @@ void TRACK::UnLink()
{ {
if( Type() == TYPEZONE ) if( Type() == TYPEZONE )
{ {
( (BOARD*) Pback )->m_Zone = (SEGZONE*) Pnext; ( (BOARD*) Back() )->m_Zone = (SEGZONE*) Next();
} }
else else
{ {
( (BOARD*) Pback )->m_Track = (TRACK*) Pnext; ( (BOARD*) Back() )->m_Track = Next();
} }
} }
} }
} }
/* Remove the forward link */ /* Remove the forward link */
if( Pnext ) if( Next() )
Pnext->Pback = Pback; Next()->SetBack( Back() );
Pnext = Pback = NULL; SetNext( 0 );
SetBack( 0 );
} }
/************************************************************/ /************************************************************/
void TRACK::Insert( BOARD* Pcb, BOARD_ITEM* InsertPoint ) void TRACK::Insert( BOARD* Pcb, TRACK* InsertPoint )
/************************************************************/ /************************************************************/
/* insert this (and its linked segments is exists) /* insert this (and its linked segments is exists)
@ -474,20 +475,20 @@ void TRACK::Insert( BOARD* Pcb, BOARD_ITEM* InsertPoint )
} }
else else
{ {
NextS = (TRACK*) InsertPoint->Pnext; NextS = InsertPoint->Next();
Pback = InsertPoint; Pback = InsertPoint;
InsertPoint->Pnext = this; InsertPoint->SetNext( this );
} }
/* Set the forward link */ /* Set the forward link */
track = this; track = this;
while( track->Pnext ) // Search the end of added chain while( track->Next() ) // Search the end of added chain
track = (TRACK*) track->Pnext; track = track->Next();
/* Link the end of chain */ /* Link the end of chain */
track->Pnext = NextS; track->SetNext( NextS );
if( NextS ) if( NextS )
NextS->Pback = track; NextS->SetBack( track );
} }
@ -626,12 +627,6 @@ bool TRACK::Save( FILE* aFile ) const
/*********************************************************************/ /*********************************************************************/
void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoint& notUsed ) void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoint& notUsed )
/*********************************************************************/ /*********************************************************************/
/** Draws the segment.
* @param panel = current panel
* @param DC = current device context
* @param draw_mode = GR_XOR, GR_OR..
*/
{ {
int l_piste; int l_piste;
int color; int color;
@ -644,9 +639,6 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
GRSetDrawMode( DC, draw_mode ); GRSetDrawMode( DC, draw_mode );
if( Type() == TYPEVIA )
color = g_DesignSettings.m_ViaColor[m_Shape];
else
color = g_DesignSettings.m_LayerColor[m_Layer]; color = g_DesignSettings.m_LayerColor[m_Layer];
if( ( color & (ITEM_NOT_SHOW | HIGHT_LIGHT_FLAG) ) == ITEM_NOT_SHOW ) if( ( color & (ITEM_NOT_SHOW | HIGHT_LIGHT_FLAG) ) == ITEM_NOT_SHOW )
@ -678,88 +670,6 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
l_piste = m_Width >> 1; l_piste = m_Width >> 1;
if( Type() == TYPEVIA ) /* The via is drawn as a circle */
{
rayon = l_piste;
if( rayon < zoom )
rayon = zoom;
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, rayon, color );
if( rayon > (4 * zoom) )
{
int drill_rayon = GetDrillValue() / 2;
int inner_rayon = rayon - (2 * zoom);
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
inner_rayon, color );
// Draw the via hole if the display option allows it
if( DisplayOpt.m_DisplayViaMode != VIA_HOLE_NOT_SHOW )
{
if( (DisplayOpt.m_DisplayViaMode == ALL_VIA_HOLE_SHOW) || // Display all drill holes requested
( (drill_rayon > 0 ) && ! IsDrillDefault() ) ) // Or Display non default holes requested
{
if( drill_rayon < inner_rayon ) // We can show the via hole
{
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
drill_rayon, color );
}
}
}
if( DisplayOpt.DisplayTrackIsol )
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
rayon + g_DesignSettings.m_TrackClearence, color );
// for Micro Vias, draw a partial cross :
// X on component layer, or + on copper layer
// (so we can see 2 superimposed microvias ):
if ( Shape() == VIA_MICROVIA )
{
int ax, ay, bx, by;
if ( IsOnLayer(COPPER_LAYER_N) )
{
ax = rayon; ay = 0;
bx = drill_rayon; by = 0;
}
else
{
ax = ay = (rayon * 707) / 1000;
bx = by = (drill_rayon * 707) / 1000;
}
/* lines | or \ */
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
GRLine( &panel->m_ClipBox, DC, m_Start.x + bx , m_Start.y + by,
m_Start.x + ax , m_Start.y + ay, 0, color );
/* lines - or / */
GRLine( &panel->m_ClipBox, DC, m_Start.x + ay, m_Start.y - ax ,
m_Start.x + by, m_Start.y - bx, 0, color );
GRLine( &panel->m_ClipBox, DC, m_Start.x - by, m_Start.y + bx ,
m_Start.x - ay, m_Start.y + ax, 0, color );
}
// for Buried Vias, draw a partial line :
// orient depending on layer pair
// (so we can see superimposed buried vias ):
if ( Shape() == VIA_BLIND_BURIED )
{
int ax = 0, ay = rayon, bx = 0, by = drill_rayon;
int layer_top, layer_bottom ;
((SEGVIA*)this)->ReturnLayerPair(&layer_top, &layer_bottom);
/* lines for the top layer */
RotatePoint( &ax, &ay, layer_top * 3600 / g_DesignSettings.m_CopperLayerCount);
RotatePoint( &bx, &by, layer_top * 3600 / g_DesignSettings.m_CopperLayerCount);
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
/* lines for the bottom layer */
ax = 0; ay = rayon; bx = 0; by = drill_rayon;
RotatePoint( &ax, &ay, layer_bottom * 3600 / g_DesignSettings.m_CopperLayerCount);
RotatePoint( &bx, &by, layer_bottom * 3600 / g_DesignSettings.m_CopperLayerCount);
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
}
}
return;
}
if( m_Shape == S_CIRCLE ) if( m_Shape == S_CIRCLE )
{ {
rayon = (int) hypot( (double) (m_End.x - m_Start.x), rayon = (int) hypot( (double) (m_End.x - m_Start.x),
@ -806,7 +716,7 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
m_End.x, m_End.y, m_Width, color ); m_End.x, m_End.y, m_Width, color );
} }
/* Shows clearance (for tracks and vias, not for zone segments */ // Show clearance for tracks, not for zone segments
if( ShowClearance( this ) ) if( ShowClearance( this ) )
{ {
GRCSegm( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, GRCSegm( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
@ -816,6 +726,139 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
} }
/*******************************************************************************************/
void SEGVIA::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoint& notUsed )
/*******************************************************************************************/
{
int color;
int zoom;
int rayon;
int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer;
if( Type() == TYPEZONE && !DisplayOpt.DisplayZones )
return;
GRSetDrawMode( DC, draw_mode );
color = g_DesignSettings.m_ViaColor[m_Shape];
if( ( color & (ITEM_NOT_SHOW | HIGHT_LIGHT_FLAG) ) == ITEM_NOT_SHOW )
return;
if( DisplayOpt.ContrastModeDisplay )
{
if( !IsOnLayer( curr_layer ) )
{
color &= ~MASKCOLOR;
color |= DARKDARKGRAY;
}
}
if( draw_mode & GR_SURBRILL )
{
if( draw_mode & GR_AND )
color &= ~HIGHT_LIGHT_FLAG;
else
color |= HIGHT_LIGHT_FLAG;
}
if( color & HIGHT_LIGHT_FLAG )
color = ColorRefs[color & MASKCOLOR].m_LightColor;
SetAlpha( &color, 150 );
zoom = panel->GetZoom();
rayon = m_Width >> 1;
if( rayon < zoom )
rayon = zoom;
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, rayon, color );
if( rayon > (4 * zoom) )
{
int drill_rayon = GetDrillValue() / 2;
int inner_rayon = rayon - (2 * zoom);
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
inner_rayon, color );
// Draw the via hole if the display option allows it
if( DisplayOpt.m_DisplayViaMode != VIA_HOLE_NOT_SHOW )
{
if( (DisplayOpt.m_DisplayViaMode == ALL_VIA_HOLE_SHOW) || // Display all drill holes requested
( (drill_rayon > 0 ) && ! IsDrillDefault() ) ) // Or Display non default holes requested
{
if( drill_rayon < inner_rayon ) // We can show the via hole
{
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
drill_rayon, color );
}
}
}
if( DisplayOpt.DisplayTrackIsol )
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
rayon + g_DesignSettings.m_TrackClearence, color );
// for Micro Vias, draw a partial cross :
// X on component layer, or + on copper layer
// (so we can see 2 superimposed microvias ):
if( Shape() == VIA_MICROVIA )
{
int ax, ay, bx, by;
if( IsOnLayer(COPPER_LAYER_N) )
{
ax = rayon; ay = 0;
bx = drill_rayon; by = 0;
}
else
{
ax = ay = (rayon * 707) / 1000;
bx = by = (drill_rayon * 707) / 1000;
}
/* lines | or \ */
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
GRLine( &panel->m_ClipBox, DC, m_Start.x + bx , m_Start.y + by,
m_Start.x + ax , m_Start.y + ay, 0, color );
/* lines - or / */
GRLine( &panel->m_ClipBox, DC, m_Start.x + ay, m_Start.y - ax ,
m_Start.x + by, m_Start.y - bx, 0, color );
GRLine( &panel->m_ClipBox, DC, m_Start.x - by, m_Start.y + bx ,
m_Start.x - ay, m_Start.y + ax, 0, color );
}
// for Buried Vias, draw a partial line :
// orient depending on layer pair
// (so we can see superimposed buried vias ):
if( Shape() == VIA_BLIND_BURIED )
{
int ax = 0, ay = rayon, bx = 0, by = drill_rayon;
int layer_top, layer_bottom;
((SEGVIA*)this)->ReturnLayerPair(&layer_top, &layer_bottom);
/* lines for the top layer */
RotatePoint( &ax, &ay, layer_top * 3600 / g_DesignSettings.m_CopperLayerCount);
RotatePoint( &bx, &by, layer_top * 3600 / g_DesignSettings.m_CopperLayerCount);
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
/* lines for the bottom layer */
ax = 0; ay = rayon; bx = 0; by = drill_rayon;
RotatePoint( &ax, &ay, layer_bottom * 3600 / g_DesignSettings.m_CopperLayerCount);
RotatePoint( &bx, &by, layer_bottom * 3600 / g_DesignSettings.m_CopperLayerCount);
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
}
}
}
// see class_track.h // see class_track.h
void TRACK::Display_Infos( WinEDA_DrawFrame* frame ) void TRACK::Display_Infos( WinEDA_DrawFrame* frame )
{ {

View File

@ -50,9 +50,9 @@ public:
TRACK* Copy() const; TRACK* Copy() const;
TRACK* Next() const { return (TRACK*) Pnext; } TRACK* Next() const { return (TRACK*) Pnext; }
TRACK* Back() const { return (TRACK*) Pback; } TRACK* Back() const { return (TRACK*) Pback; }
/** /**
* Function GetPosition * Function GetPosition
* returns the position of this object. * returns the position of this object.
@ -89,7 +89,7 @@ public:
* @param aPcb The BOARD to insert into. * @param aPcb The BOARD to insert into.
* @param InsertPoint See above * @param InsertPoint See above
*/ */
void Insert( BOARD* aPcb, BOARD_ITEM* InsertPoint ); void Insert( BOARD* aPcb, TRACK* InsertPoint );
/** /**
* Function GetBestInsertPoint * Function GetBestInsertPoint
@ -277,6 +277,9 @@ public:
} }
void Draw( WinEDA_DrawPanel* panel, wxDC* DC, int aDrawMode, const wxPoint& offset = ZeroOffset );
/** /**
* Function IsOnLayer * Function IsOnLayer
* tests to see if this object is on the given layer. Is virtual * tests to see if this object is on the given layer. Is virtual

View File

@ -53,7 +53,7 @@ static int Merge_Two_SubNets( TRACK* pt_start_conn, TRACK* pt_end_conn, int old_
EXCHG( old_val, new_val ); EXCHG( old_val, new_val );
pt_conn = pt_start_conn; pt_conn = pt_start_conn;
for( ; pt_conn != NULL; pt_conn = (TRACK*) pt_conn->Pnext ) for( ; pt_conn != NULL; pt_conn = pt_conn->Next() )
{ {
if( pt_conn->GetSubNet() != old_val ) if( pt_conn->GetSubNet() != old_val )
{ {
@ -110,7 +110,7 @@ static void Propagate_SubNet( TRACK* pt_start_conn, TRACK* pt_end_conn )
/* Clear variables used in computations */ /* Clear variables used in computations */
pt_conn = pt_start_conn; pt_conn = pt_start_conn;
for( ; pt_conn != NULL; pt_conn = (TRACK*) pt_conn->Pnext ) for( ; pt_conn != NULL; pt_conn = pt_conn->Next() )
{ {
pt_conn->SetSubNet( 0 ); pt_conn->SetSubNet( 0 );
PtStruct = pt_conn->start; PtStruct = pt_conn->start;
@ -130,7 +130,7 @@ static void Propagate_SubNet( TRACK* pt_start_conn, TRACK* pt_end_conn )
/* Start of calculation */ /* Start of calculation */
pt_conn = pt_start_conn; pt_conn = pt_start_conn;
for( ; pt_conn != NULL; pt_conn = (TRACK*) pt_conn->Pnext ) for( ; pt_conn != NULL; pt_conn = pt_conn->Next() )
{ {
/* First: handling connections to pads */ /* First: handling connections to pads */
PtStruct = pt_conn->start; PtStruct = pt_conn->start;
@ -300,7 +300,7 @@ void WinEDA_BasePcbFrame::test_connexions( wxDC* DC )
Build_Pads_Info_Connections_By_Tracks( pt_start_conn, pt_end_conn ); Build_Pads_Info_Connections_By_Tracks( pt_start_conn, pt_end_conn );
pt_start_conn = (TRACK*) pt_end_conn->Pnext; // this is now the first segment of the next net pt_start_conn = pt_end_conn->Next(); // this is now the first segment of the next net
} }
Merge_SubNets_Connected_By_CopperAreas( m_Pcb ); Merge_SubNets_Connected_By_CopperAreas( m_Pcb );
@ -391,7 +391,7 @@ static void Build_Pads_Info_Connections_By_Tracks( TRACK* pt_start_conn, TRACK*
TRACK* Track; TRACK* Track;
/* Reset the old connections type track to track */ /* Reset the old connections type track to track */
for( Track = pt_start_conn; Track != NULL; Track = (TRACK*) Track->Pnext ) for( Track = pt_start_conn; Track != NULL; Track = Track->Next() )
{ {
Track->SetSubNet( 0 ); Track->SetSubNet( 0 );
@ -406,13 +406,13 @@ static void Build_Pads_Info_Connections_By_Tracks( TRACK* pt_start_conn, TRACK*
} }
/* Update connections type track to track */ /* Update connections type track to track */
for( Track = pt_start_conn; Track != NULL; Track = (TRACK*) Track->Pnext ) for( Track = pt_start_conn; Track != NULL; Track = Track->Next() )
{ {
if( Track->Type() == TYPEVIA ) // A via can connect many tracks, we must search for all track segments in this net if( Track->Type() == TYPEVIA ) // A via can connect many tracks, we must search for all track segments in this net
{ {
TRACK* pt_segm; TRACK* pt_segm;
int layermask = Track->ReturnMaskLayer(); int layermask = Track->ReturnMaskLayer();
for( pt_segm = pt_start_conn; pt_segm != NULL; pt_segm = (TRACK*) pt_segm->Pnext ) for( pt_segm = pt_start_conn; pt_segm != NULL; pt_segm = pt_segm->Next() )
{ {
int curlayermask = pt_segm->ReturnMaskLayer(); int curlayermask = pt_segm->ReturnMaskLayer();
@ -607,7 +607,7 @@ void WinEDA_BasePcbFrame::reattribution_reference_piste( int affiche )
/* Reset variables and flags used in computation */ /* Reset variables and flags used in computation */
pt_piste = m_Pcb->m_Track; pt_piste = m_Pcb->m_Track;
for( ; pt_piste != NULL; pt_piste = (TRACK*) pt_piste->Pnext ) for( ; pt_piste != NULL; pt_piste = pt_piste->Next() )
{ {
pt_piste->SetState( BUSY | EDIT | BEGIN_ONPAD | END_ONPAD, OFF ); pt_piste->SetState( BUSY | EDIT | BEGIN_ONPAD | END_ONPAD, OFF );
pt_piste->SetZoneSubNet( 0 ); pt_piste->SetZoneSubNet( 0 );
@ -618,7 +618,7 @@ void WinEDA_BasePcbFrame::reattribution_reference_piste( int affiche )
* if found, set the track net code to the pad netcode * if found, set the track net code to the pad netcode
*/ */
pt_piste = m_Pcb->m_Track; pt_piste = m_Pcb->m_Track;
for( ; pt_piste != NULL; pt_piste = (TRACK*) pt_piste->Pnext ) for( ; pt_piste != NULL; pt_piste = pt_piste->Next() )
{ {
flag = 0; flag = 0;
masque_layer = g_TabOneLayerMask[pt_piste->GetLayer()]; masque_layer = g_TabOneLayerMask[pt_piste->GetLayer()];
@ -821,7 +821,7 @@ static void RebuildTrackChain( BOARD* pcb )
Liste = (TRACK**) MyZMalloc( (nbsegm + 1) * sizeof(TRACK*) ); Liste = (TRACK**) MyZMalloc( (nbsegm + 1) * sizeof(TRACK*) );
ii = 0; Track = pcb->m_Track; ii = 0; Track = pcb->m_Track;
for( ; Track != NULL; ii++, Track = (TRACK*) Track->Pnext ) for( ; Track != NULL; ii++, Track = Track->Next() )
{ {
Liste[ii] = Track; Liste[ii] = Track;
} }
@ -832,13 +832,15 @@ static void RebuildTrackChain( BOARD* pcb )
/* Update the linked list pointers */ /* Update the linked list pointers */
Track = Liste[0]; Track = Liste[0];
Track->Pback = pcb; Track->Pnext = Liste[1]; Track->SetBack( pcb );
Track->SetNext( Liste[1] );
pcb->m_Track = Track; pcb->m_Track = Track;
for( ii = 1; ii < nbsegm; ii++ ) for( ii = 1; ii < nbsegm; ii++ )
{ {
Track = Liste[ii]; Track = Liste[ii];
Track->Pback = Liste[ii - 1]; Track->SetBack( Liste[ii - 1] );
Track->Pnext = Liste[ii + 1]; Track->SetNext( Liste[ii + 1] );
} }
MyFree( Liste ); MyFree( Liste );

View File

@ -280,10 +280,11 @@ COTATION* WinEDA_PcbFrame::Begin_Cotation( COTATION* Cotation, wxDC* DC )
Cotation->m_Flags = 0; Cotation->m_Flags = 0;
/* Insertion de la structure dans le Chainage .Drawings du PCB */ /* Insertion de la structure dans le Chainage .Drawings du PCB */
Cotation->Pback = m_Pcb; Cotation->SetBack( m_Pcb );
Cotation->Pnext = m_Pcb->m_Drawings; Cotation->SetNext( m_Pcb->m_Drawings );
if( m_Pcb->m_Drawings ) if( m_Pcb->m_Drawings )
m_Pcb->m_Drawings->Pback = Cotation; m_Pcb->m_Drawings->SetBack( Cotation );
m_Pcb->m_Drawings = Cotation; m_Pcb->m_Drawings = Cotation;
GetScreen()->SetModify(); GetScreen()->SetModify();

View File

@ -155,7 +155,7 @@ void WinEDA_PcbFrame::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync )
break; break;
case TYPEPAD: case TYPEPAD:
module = (MODULE*) objectToSync->m_Parent; module = (MODULE*) objectToSync->GetParent();
pad = (D_PAD*) objectToSync; pad = (D_PAD*) objectToSync;
msg = pad->ReturnStringPadName(); msg = pad->ReturnStringPadName();
sprintf( cmd, "$PART: \"%s\" $PAD: \"%s\"", sprintf( cmd, "$PART: \"%s\" $PAD: \"%s\"",
@ -166,7 +166,7 @@ void WinEDA_PcbFrame::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync )
case TYPETEXTEMODULE: case TYPETEXTEMODULE:
#define REFERENCE 0 #define REFERENCE 0
#define VALUE 1 #define VALUE 1
module = (MODULE*) objectToSync->m_Parent; module = (MODULE*) objectToSync->GetParent();
text_mod = (TEXTE_MODULE*) objectToSync; text_mod = (TEXTE_MODULE*) objectToSync;
if( text_mod->m_Type == REFERENCE ) if( text_mod->m_Type == REFERENCE )
text_key = "$REF:"; text_key = "$REF:";

View File

@ -49,19 +49,19 @@ TRACK* WinEDA_PcbFrame::Delete_Segment( wxDC* DC, TRACK* Track )
// modification du trace // modification du trace
Track = g_CurrentTrackSegment; Track = g_CurrentTrackSegment;
g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; g_CurrentTrackSegment = g_CurrentTrackSegment->Back();
delete Track; delete Track;
g_TrackSegmentCount--; g_TrackSegmentCount--;
if( g_TwoSegmentTrackBuild ) if( g_TwoSegmentTrackBuild )
{ {
// g_CurrentTrackSegment->Pback must not be a via, or we want delete also the via // g_CurrentTrackSegment->Back() must not be a via, or we want delete also the via
if( (g_TrackSegmentCount >= 2) if( (g_TrackSegmentCount >= 2)
&& (g_CurrentTrackSegment->Type() != TYPEVIA) && (g_CurrentTrackSegment->Type() != TYPEVIA)
&& (g_CurrentTrackSegment->Pback->Type() == TYPEVIA) ) && (g_CurrentTrackSegment->Back()->Type() == TYPEVIA) )
{ {
Track = g_CurrentTrackSegment; Track = g_CurrentTrackSegment;
g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; g_CurrentTrackSegment = g_CurrentTrackSegment->Back();
delete Track; delete Track;
g_TrackSegmentCount--; g_TrackSegmentCount--;
} }
@ -71,7 +71,7 @@ TRACK* WinEDA_PcbFrame::Delete_Segment( wxDC* DC, TRACK* Track )
&& (g_CurrentTrackSegment->Type() == TYPEVIA) ) && (g_CurrentTrackSegment->Type() == TYPEVIA) )
{ {
Track = g_CurrentTrackSegment; Track = g_CurrentTrackSegment;
g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; g_CurrentTrackSegment = g_CurrentTrackSegment->Back();
delete Track; delete Track;
g_TrackSegmentCount--; g_TrackSegmentCount--;
if( g_CurrentTrackSegment && (g_CurrentTrackSegment->Type() != TYPEVIA) ) if( g_CurrentTrackSegment && (g_CurrentTrackSegment->Type() != TYPEVIA) )
@ -79,7 +79,7 @@ TRACK* WinEDA_PcbFrame::Delete_Segment( wxDC* DC, TRACK* Track )
} }
if( g_CurrentTrackSegment ) if( g_CurrentTrackSegment )
g_CurrentTrackSegment->Pnext = NULL; g_CurrentTrackSegment->SetNext( NULL );
// Rectification couche active qui a pu changer si une via // Rectification couche active qui a pu changer si une via
// a ete effacee // a ete effacee

Some files were not shown because too many files have changed in this diff Show More