158 lines
4.7 KiB
C++
158 lines
4.7 KiB
C++
/****************************/
|
|
/* EESchema - eesavlib.cpp */
|
|
/****************************/
|
|
|
|
/* Functions to save schematic libraries and library components (::Save()
|
|
* members)
|
|
*/
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
#include "common.h"
|
|
#include "confirm.h"
|
|
#include "kicad_string.h"
|
|
#include "gestfich.h"
|
|
#include "program.h"
|
|
#include "libcmp.h"
|
|
#include "general.h"
|
|
|
|
#include "protos.h"
|
|
|
|
|
|
/** Function CopyDrawEntryStruct
|
|
* Duplicate a DrawLibItem
|
|
* the new item is only created, it is not put in the current component linked
|
|
* list
|
|
* @param DrawEntry = DrawLibItem * item to duplicate
|
|
* @return a pointer to the new item
|
|
* A better way to duplicate a DrawLibItem is to have a virtual GenCopy() in
|
|
* LibEDA_BaseStruct class (ToDo).
|
|
*/
|
|
LibEDA_BaseStruct* CopyDrawEntryStruct( wxWindow* frame,
|
|
LibEDA_BaseStruct* DrawItem )
|
|
{
|
|
LibEDA_BaseStruct* NewDrawItem = NULL;
|
|
wxString msg;
|
|
|
|
switch( DrawItem->Type() )
|
|
{
|
|
case COMPONENT_ARC_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawArc*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
case COMPONENT_CIRCLE_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawCircle*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
case COMPONENT_RECT_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawSquare*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
case COMPONENT_PIN_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawPin*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawText*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
case COMPONENT_POLYLINE_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawPolyline*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
case COMPONENT_BEZIER_DRAW_TYPE:
|
|
NewDrawItem = ( (LibDrawBezier*) DrawItem )->GenCopy();
|
|
break;
|
|
|
|
default:
|
|
msg.Printf( wxT( "CopyDrawLibEntryStruct: unknown Draw Type %d" ),
|
|
DrawItem->Type() );
|
|
DisplayError( frame, msg );
|
|
break;
|
|
}
|
|
|
|
return NewDrawItem;
|
|
}
|
|
|
|
|
|
/*
|
|
* Routine de copie d'une partlib
|
|
* Parametres d'entree: pointeur sur la structure de depart
|
|
* Parametres de sortie: pointeur sur la structure creee
|
|
* Do not copy new items ( i.e. with m_Flag & IS_NEW)
|
|
*/
|
|
EDA_LibComponentStruct* CopyLibEntryStruct( wxWindow* frame,
|
|
EDA_LibComponentStruct* OldEntry )
|
|
{
|
|
EDA_LibComponentStruct* NewStruct;
|
|
LibEDA_BaseStruct* NewDrawings, * OldDrawings;
|
|
LibEDA_BaseStruct* LastItem;
|
|
LibDrawField* OldField, * NewField;
|
|
|
|
if( OldEntry->Type != ROOT )
|
|
{
|
|
DisplayError( frame, wxT( "CopyLibEntryStruct(): Type != ROOT" ) );
|
|
return NULL;
|
|
}
|
|
|
|
NewStruct = new EDA_LibComponentStruct( NULL );
|
|
|
|
OldEntry->m_Prefix.Copy( &NewStruct->m_Prefix );
|
|
OldEntry->m_Name.Copy( &NewStruct->m_Name );
|
|
|
|
NewStruct->m_UnitCount = OldEntry->m_UnitCount;
|
|
NewStruct->m_TextInside = OldEntry->m_TextInside;
|
|
NewStruct->m_DrawPinNum = OldEntry->m_DrawPinNum;
|
|
NewStruct->m_DrawPinName = OldEntry->m_DrawPinName;
|
|
NewStruct->m_Options = OldEntry->m_Options;
|
|
NewStruct->m_UnitSelectionLocked = OldEntry->m_UnitSelectionLocked;
|
|
|
|
/* Copie des sous structures: */
|
|
NewStruct->m_AliasList = OldEntry->m_AliasList;
|
|
NewStruct->m_Doc = OldEntry->m_Doc;
|
|
NewStruct->m_KeyWord = OldEntry->m_KeyWord;
|
|
NewStruct->m_DocFile = OldEntry->m_DocFile;
|
|
|
|
/* Copie des champs */
|
|
for( OldField = OldEntry->m_Fields; OldField != NULL;
|
|
OldField = OldField->Next() )
|
|
{
|
|
NewField = OldField->GenCopy();
|
|
NewStruct->m_Fields.PushBack( NewField );
|
|
}
|
|
|
|
/* Copie des elements type Drawing */
|
|
LastItem = NULL;
|
|
for( OldDrawings = OldEntry->m_Drawings; OldDrawings != NULL;
|
|
OldDrawings = OldDrawings->Next() )
|
|
{
|
|
if( ( OldDrawings->m_Flags & IS_NEW) != 0 )
|
|
continue;
|
|
|
|
NewDrawings = CopyDrawEntryStruct( frame, OldDrawings );
|
|
if( NewDrawings )
|
|
{
|
|
if( LastItem == NULL )
|
|
NewStruct->m_Drawings = NewDrawings;
|
|
else
|
|
LastItem->SetNext( NewDrawings );
|
|
|
|
LastItem = NewDrawings;
|
|
NewDrawings->SetNext( NULL );
|
|
}
|
|
else // Should nevers occurs, just in case...
|
|
{ // CopyDrawEntryStruct() was not able to duplicate the type
|
|
// of OldDrawings
|
|
// occurs when an unexpected type is encountered
|
|
DisplayError( frame, wxT( "CopyLibEntryStruct(): error: aborted" ) );
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* Copy the footprint filter list */
|
|
for( unsigned ii = 0; ii < OldEntry->m_FootprintList.GetCount(); ii++ )
|
|
NewStruct->m_FootprintList.Add( OldEntry->m_FootprintList[ii] );
|
|
|
|
return NewStruct;
|
|
}
|