Commit f7d1c72a authored by charras's avatar charras

more in fields edition. Components in lib can have more than 8 user fields

parent 441efc9f
...@@ -371,6 +371,12 @@ int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::getSelectedFieldNdx() ...@@ -371,6 +371,12 @@ int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::getSelectedFieldNdx()
} }
static bool SortFieldsById(const SCH_CMP_FIELD& item1, const SCH_CMP_FIELD& item2)
{
return item1.m_FieldId < item2.m_FieldId;
}
/*******************************************************************************/ /*******************************************************************************/
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent ) void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent )
/*******************************************************************************/ /*******************************************************************************/
...@@ -391,6 +397,9 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent ...@@ -391,6 +397,9 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent
// copy all the fields to a work area // copy all the fields to a work area
m_FieldsBuf = aComponent->m_Fields; m_FieldsBuf = aComponent->m_Fields;
// Sort files by field id,if they are not entered by id
sort(m_FieldsBuf.begin(), m_FieldsBuf.end(), SortFieldsById);
#if 0 && defined(DEBUG) #if 0 && defined(DEBUG)
for( unsigned i = 0; i<m_FieldsBuf.size(); ++i ) for( unsigned i = 0; i<m_FieldsBuf.size(); ++i )
{ {
......
...@@ -392,7 +392,7 @@ int DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::getSelectedFieldNdx() ...@@ -392,7 +392,7 @@ int DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::getSelectedFieldNdx()
} }
bool SortFieldsById(const LibDrawField& item1, const LibDrawField& item2) static bool SortFieldsById(const LibDrawField& item1, const LibDrawField& item2)
{ {
return item1.m_FieldId < item2.m_FieldId; return item1.m_FieldId < item2.m_FieldId;
} }
......
...@@ -101,8 +101,7 @@ LibraryStruct* LoadLibraryName( WinEDA_DrawFrame* frame, ...@@ -101,8 +101,7 @@ LibraryStruct* LoadLibraryName( WinEDA_DrawFrame* frame,
/******************************************/ /******************************************/
void void LoadLibraries (WinEDA_DrawFrame* frame)
LoadLibraries (WinEDA_DrawFrame* frame)
/******************************************/ /******************************************/
/* Function LoadLibraries /* Function LoadLibraries
...@@ -204,9 +203,7 @@ LoadLibraries (WinEDA_DrawFrame* frame) ...@@ -204,9 +203,7 @@ LoadLibraries (WinEDA_DrawFrame* frame)
/**************************************************************/ /**************************************************************/
void void FreeCmpLibrary (wxWindow* frame, const wxString& LibName)
FreeCmpLibrary (wxWindow* frame,
const wxString& LibName)
/**************************************************************/ /**************************************************************/
/** Function FreeCmpLibrary /** Function FreeCmpLibrary
...@@ -252,8 +249,7 @@ FreeCmpLibrary (wxWindow* frame, ...@@ -252,8 +249,7 @@ FreeCmpLibrary (wxWindow* frame,
/******************************/ /******************************/
const const wxChar** GetLibNames()
wxChar** GetLibNames()
/******************************/ /******************************/
/** GetLibNames() /** GetLibNames()
...@@ -281,9 +277,7 @@ wxChar** GetLibNames() ...@@ -281,9 +277,7 @@ wxChar** GetLibNames()
* Routine to compare two EDA_LibComponentStruct for the PriorQue module. * Routine to compare two EDA_LibComponentStruct for the PriorQue module.
* Comparison (insensitive case) is based on Part name. * Comparison (insensitive case) is based on Part name.
*/ */
int int LibraryEntryCompare (EDA_LibComponentStruct* LE1, EDA_LibComponentStruct* LE2)
LibraryEntryCompare (EDA_LibComponentStruct* LE1,
EDA_LibComponentStruct* LE2)
{ {
return LE1->m_Name.m_Text.CmpNoCase( LE2->m_Name.m_Text ); return LE1->m_Name.m_Text.CmpNoCase( LE2->m_Name.m_Text );
} }
...@@ -953,9 +947,6 @@ static bool GetLibEntryField (EDA_LibComponentStruct* LibEntry, ...@@ -953,9 +947,6 @@ static bool GetLibEntryField (EDA_LibComponentStruct* LibEntry,
break; break;
default: default:
if( NumOfField >= NUMBER_OF_FIELDS )
break;
Field = new LibDrawField( NumOfField ); Field = new LibDrawField( NumOfField );
LibEntry->m_Fields.PushBack( Field ); LibEntry->m_Fields.PushBack( Field );
break; break;
......
...@@ -67,9 +67,8 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC, ...@@ -67,9 +67,8 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC,
*/ */
{ {
int ii, CmpCount = 0; int ii, CmpCount = 0;
LibDrawField* Field;
EDA_LibComponentStruct* Entry = NULL; EDA_LibComponentStruct* Entry = NULL;
SCH_COMPONENT* DrawLibItem = NULL; SCH_COMPONENT* Component = NULL;
LibraryStruct* Library = NULL; LibraryStruct* Library = NULL;
wxString Name, keys, msg; wxString Name, keys, msg;
bool AllowWildSeach = TRUE; bool AllowWildSeach = TRUE;
...@@ -176,17 +175,17 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC, ...@@ -176,17 +175,17 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC,
DrawPanel->ManageCurseur = ShowWhileMoving; DrawPanel->ManageCurseur = ShowWhileMoving;
DrawPanel->ForceCloseManageCurseur = ExitPlaceCmp; DrawPanel->ForceCloseManageCurseur = ExitPlaceCmp;
DrawLibItem = new SCH_COMPONENT( GetScreen()->m_Curseur ); Component = new SCH_COMPONENT( GetScreen()->m_Curseur );
DrawLibItem->m_Multi = 1; /* Selection de l'unite 1 dans le boitier */ Component->m_Multi = 1; /* Selection de l'unite 1 dans le boitier */
DrawLibItem->m_Convert = 1; Component->m_Convert = 1;
DrawLibItem->m_ChipName = Name; Component->m_ChipName = Name;
DrawLibItem->m_TimeStamp = GetTimeStamp(); Component->m_TimeStamp = GetTimeStamp();
DrawLibItem->m_Flags = IS_NEW | IS_MOVED; Component->m_Flags = IS_NEW | IS_MOVED;
/* Init champ Valeur */ /* Init champ Valeur */
DrawLibItem->GetField( VALUE )->m_Pos = Entry->m_Name.m_Pos + DrawLibItem->m_Pos; Component->GetField( VALUE )->m_Pos = Entry->m_Name.m_Pos + Component->m_Pos;
DrawLibItem->GetField( VALUE )->ImportValues( Entry->m_Name ); Component->GetField( VALUE )->ImportValues( Entry->m_Name );
DrawLibItem->GetField( VALUE )->m_Text = DrawLibItem->m_ChipName; Component->GetField( VALUE )->m_Text = Component->m_ChipName;
msg = Entry->m_Prefix.m_Text; msg = Entry->m_Prefix.m_Text;
if( msg.IsEmpty() ) if( msg.IsEmpty() )
...@@ -194,40 +193,48 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC, ...@@ -194,40 +193,48 @@ SCH_COMPONENT* WinEDA_SchematicFrame::Load_Component( wxDC* DC,
msg += wxT( "?" ); msg += wxT( "?" );
// update the reference -- just the prefix for now. // update the reference -- just the prefix for now.
DrawLibItem->SetRef( GetSheet(), msg ); Component->SetRef( GetSheet(), msg );
/* Init champ Reference */ /* Init champ Reference */
DrawLibItem->GetField( REFERENCE )->m_Pos = Entry->m_Prefix.m_Pos + DrawLibItem->m_Pos; Component->GetField( REFERENCE )->m_Pos = Entry->m_Prefix.m_Pos + Component->m_Pos;
DrawLibItem->GetField( REFERENCE )->ImportValues( Entry->m_Prefix ); Component->GetField( REFERENCE )->ImportValues( Entry->m_Prefix );
DrawLibItem->m_PrefixString = Entry->m_Prefix.m_Text; Component->m_PrefixString = Entry->m_Prefix.m_Text;
/* Init des autres champs si predefinis dans la librairie */ /* Init des autres champs si predefinis dans la librairie */
for( Field = Entry->m_Fields; Field != NULL; Field = Field->Next() ) LibDrawField* EntryField;
for( EntryField = Entry->m_Fields; EntryField != NULL; EntryField = EntryField->Next() )
{ {
if( Field->m_Text.IsEmpty() && Field->m_Name.IsEmpty() ) if( EntryField->m_Text.IsEmpty() && EntryField->m_Name.IsEmpty() )
continue; continue;
ii = Field->m_FieldId; ii = EntryField->m_FieldId;
if( ii < 2 ) // Reference or value, already done if( ii < 2 ) // Reference or value, already done
continue; continue;
if( ii >= DrawLibItem->GetFieldCount() ) if( ii >= Component->GetFieldCount() )
continue; { // This entry has more than the default count: add extra fields
while( ii >= Component->GetFieldCount() )
{
int field_id = Component->GetFieldCount();
SCH_CMP_FIELD field( wxPoint( 0, 0 ), field_id, Component, ReturnDefaultFieldName( ii ) );
Component->AddField( field );
}
}
SCH_CMP_FIELD* f = DrawLibItem->GetField( ii ); SCH_CMP_FIELD* curr_field = Component->GetField( ii );
f->m_Pos += Field->m_Pos; curr_field->m_Pos = Component->m_Pos + EntryField->m_Pos;
f->ImportValues( *Field ); curr_field->ImportValues( *EntryField );
f->m_Text = Field->m_Text; curr_field->m_Text = EntryField->m_Text;
f->m_Name = Field->m_Name; curr_field->m_Name = ( ii < FIELD1 ) ? ReturnDefaultFieldName( ii ) : EntryField->m_Name;
} }
DrawStructsInGhost( DrawPanel, DC, DrawLibItem, 0, 0 ); DrawStructsInGhost( DrawPanel, DC, Component, 0, 0 );
MsgPanel->EraseMsgBox(); MsgPanel->EraseMsgBox();
DrawLibItem->Display_Infos( this ); Component->Display_Infos( this );
return DrawLibItem; return Component;
} }
...@@ -241,19 +248,19 @@ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) ...@@ -241,19 +248,19 @@ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
SCH_SCREEN* screen = (SCH_SCREEN*) panel->GetScreen(); SCH_SCREEN* screen = (SCH_SCREEN*) panel->GetScreen();
SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) screen->GetCurItem(); SCH_COMPONENT* Component = (SCH_COMPONENT*) screen->GetCurItem();
/* Effacement du composant */ /* Effacement du composant */
if( erase ) if( erase )
{ {
DrawStructsInGhost( panel, DC, DrawLibItem, 0, 0 ); DrawStructsInGhost( panel, DC, Component, 0, 0 );
} }
move_vector.x = screen->m_Curseur.x - DrawLibItem->m_Pos.x; move_vector.x = screen->m_Curseur.x - Component->m_Pos.x;
move_vector.y = screen->m_Curseur.y - DrawLibItem->m_Pos.y; move_vector.y = screen->m_Curseur.y - Component->m_Pos.y;
MoveOneStruct( DrawLibItem, move_vector ); MoveOneStruct( Component, move_vector );
DrawStructsInGhost( panel, DC, DrawLibItem, 0, 0 ); DrawStructsInGhost( panel, DC, Component, 0, 0 );
} }
...@@ -309,25 +316,25 @@ static void ExitPlaceCmp( WinEDA_DrawPanel* Panel, wxDC* DC ) ...@@ -309,25 +316,25 @@ static void ExitPlaceCmp( WinEDA_DrawPanel* Panel, wxDC* DC )
{ {
SCH_SCREEN* screen = (SCH_SCREEN*) Panel->GetScreen(); SCH_SCREEN* screen = (SCH_SCREEN*) Panel->GetScreen();
SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) screen->GetCurItem(); SCH_COMPONENT* Component = (SCH_COMPONENT*) screen->GetCurItem();
if( DrawLibItem->m_Flags & IS_NEW ) /* Nouveau Placement en cours, on l'efface */ if( Component->m_Flags & IS_NEW ) /* Nouveau Placement en cours, on l'efface */
{ {
DrawLibItem->m_Flags = 0; Component->m_Flags = 0;
SAFE_DELETE( DrawLibItem ); SAFE_DELETE( Component );
} }
else if( DrawLibItem ) /* Deplacement ancien composant en cours */ else if( Component ) /* Deplacement ancien composant en cours */
{ {
wxPoint move_vector; wxPoint move_vector;
move_vector.x = OldPos.x - DrawLibItem->m_Pos.x; move_vector.x = OldPos.x - Component->m_Pos.x;
move_vector.y = OldPos.y - DrawLibItem->m_Pos.y; move_vector.y = OldPos.y - Component->m_Pos.y;
MoveOneStruct( DrawLibItem, move_vector ); MoveOneStruct( Component, move_vector );
memcpy( DrawLibItem->m_Transform, OldTransMat, sizeof(OldTransMat) ); memcpy( Component->m_Transform, OldTransMat, sizeof(OldTransMat) );
DrawLibItem->m_Flags = 0; Component->m_Flags = 0;
} }
Panel->Refresh( TRUE ); Panel->Refresh( TRUE );
......
...@@ -72,8 +72,6 @@ ...@@ -72,8 +72,6 @@
#define GERB_STOP_DRAW 2 // extinction de lumiere ( lever de plume) #define GERB_STOP_DRAW 2 // extinction de lumiere ( lever de plume)
#define GERB_FLASH 3 // Flash #define GERB_FLASH 3 // Flash
#define NEGATE( nb ) (nb) = -(nb)
/* Variables locales : */ /* Variables locales : */
static wxPoint LastPosition; static wxPoint LastPosition;
......
No preview for this file type
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment