489 lines
16 KiB
C++
489 lines
16 KiB
C++
/****************************************************************/
|
||
/* Headers fo library definition and lib component definitions */
|
||
/****************************************************************/
|
||
|
||
#ifndef LIBCMP_H
|
||
#define LIBCMP_H
|
||
|
||
#ifndef eda_global
|
||
#define eda_global extern
|
||
#endif
|
||
|
||
#include "priorque.h"
|
||
|
||
#define LIB_VERSION_MAJOR 2
|
||
#define LIB_VERSION_MINOR 3
|
||
#define LIBFILE_IDENT "EESchema-LIBRARY Version" /* Must be at the lib file start. */
|
||
#define DOCFILE_IDENT "EESchema-DOCLIB Version 2.0" /* Must be at the doc file start. */
|
||
#define DOC_EXT wxT( ".dcm" ) /* extension des fichiers de documentation */
|
||
|
||
#define TARGET_PIN_DIAM 12 /* Diam cercle des extremites des pins */
|
||
|
||
#define DEFAULT_TEXT_SIZE 50 /* Default size for field texts */
|
||
#define PART_NAME_LEN 15 /* Maximum length of part name. */
|
||
#define PREFIX_NAME_LEN 5 /* Maximum length of prefix (IC, R, SW etc.). */
|
||
#define PIN_WIDTH 100 /* Width between 2 pins in internal units. */
|
||
#define PIN_LENGTH 300 /* Default Length of each pin to be drawn. */
|
||
|
||
#define INVERT_PIN_RADIUS 35 /* Radius of inverted pin circle. */
|
||
#define CLOCK_PIN_DIM 40 /* Dim of clock pin symbol. */
|
||
#define IEEE_SYMBOL_PIN_DIM 40 /* Dim of special pin symbol. */
|
||
|
||
#define NO_FILL 0 // Poly, Squar, Circle, Arc = option No Fill
|
||
#define FILLED_SHAPE 1 // Poly, Squar, Circle, Arc = option Fill with current color
|
||
#define FILLED_WITH_BG_BODYCOLOR 2 // Poly, Squar, Circle, Arc = option Fill
|
||
// with background body color
|
||
|
||
//Offsets used in editing library component, for handle aliad dats
|
||
#define ALIAS_NAME 0
|
||
#define ALIAS_DOC 1
|
||
#define ALIAS_KEYWORD 2
|
||
#define ALIAS_DOC_FILENAME 3
|
||
#define ALIAS_NEXT 4
|
||
|
||
|
||
typedef enum {
|
||
LOCATE_COMPONENT_ARC_DRAW_TYPE = 1,
|
||
LOCATE_COMPONENT_CIRCLE_DRAW_TYPE = 2,
|
||
LOCATE_COMPONENT_GRAPHIC_TEXT_DRAW_TYPE = 4,
|
||
LOCATE_COMPONENT_RECT_DRAW_TYPE = 8,
|
||
LOCATE_LINE_DRAW_TYPE = 0x10,
|
||
LOCATE_COMPONENT_POLYLINE_DRAW_TYPE = 0x20,
|
||
LOCATE_COMPONENT_LINE_DRAW_TYPE = 0x40
|
||
} LocateDrawStructType;
|
||
|
||
#define LOCATE_ALL_DRAW_ITEM 0xFFFFFFFF
|
||
|
||
/* flags utilises dans FindLibPart() : */
|
||
#define FIND_ROOT 0 /* indique la recherche du composant racine si
|
||
* meme si le composant specifie est un alias */
|
||
#define FIND_ALIAS 1 /* indique la recherche du composant specifie
|
||
* (alias ou racine) */
|
||
|
||
/* definition des types des structures d'elements de librairie */
|
||
typedef enum {
|
||
ROOT, /* Structure est a standard EDA_LibComponentStruct */
|
||
ALIAS /* Structure is an alias */
|
||
} LibrEntryType;
|
||
|
||
/* valeur du membre .m_Options */
|
||
typedef enum {
|
||
ENTRY_NORMAL, // Libentry is standard
|
||
ENTRY_POWER // Libentry is a power symbol
|
||
} LibrEntryOptions;
|
||
|
||
/* Definitions des Pins */
|
||
|
||
typedef enum { /* Type des Pins. si modif: modifier tableau des mgs suivant */
|
||
PIN_INPUT,
|
||
PIN_OUTPUT,
|
||
PIN_BIDI,
|
||
PIN_TRISTATE,
|
||
PIN_PASSIVE,
|
||
PIN_UNSPECIFIED,
|
||
PIN_POWER_IN,
|
||
PIN_POWER_OUT,
|
||
PIN_OPENCOLLECTOR,
|
||
PIN_OPENEMITTER,
|
||
PIN_NC, /* No connect */
|
||
PIN_NMAX /* Valeur limite ( utilisee comme limite de tableaux) */
|
||
} ElectricPinType;
|
||
|
||
/* Messages d'affichage du type electrique */
|
||
eda_global wxChar* MsgPinElectricType[]
|
||
#ifdef MAIN
|
||
= {
|
||
wxT( "input" ),
|
||
wxT( "output" ),
|
||
wxT( "BiDi" ),
|
||
wxT( "3state" ),
|
||
wxT( "passive" ),
|
||
wxT( "unspc" ),
|
||
wxT( "power_in" ),
|
||
wxT( "power_out" ),
|
||
wxT( "openCol" ),
|
||
wxT( "openEm" ),
|
||
wxT( "?????" )
|
||
}
|
||
|
||
|
||
#endif
|
||
;
|
||
|
||
/* Autres bits: bits du membre .Flag des Pins */
|
||
#define PINNOTDRAW 1 /* si 1: pin invisible */
|
||
|
||
typedef enum { /* Forme des Pins */
|
||
NONE = 0,
|
||
INVERT = 1,
|
||
CLOCK = 2,
|
||
LOWLEVEL_IN = 4,
|
||
LOWLEVEL_OUT = 8
|
||
} DrawPinShape;
|
||
|
||
typedef enum { /* Orientation des Pins */
|
||
PIN_RIGHT = 'R',
|
||
PIN_LEFT = 'L',
|
||
PIN_UP = 'U',
|
||
PIN_DOWN = 'D',
|
||
} DrawPinOrient;
|
||
|
||
/*************************************/
|
||
/* Classe representant une librairie */
|
||
/*************************************/
|
||
|
||
class LibraryStruct
|
||
{
|
||
public:
|
||
int m_Type; /* type indicator */
|
||
wxString m_Name; /* Name of library loaded. */
|
||
wxString m_FullFileName; /* Full File Name (with path) of library loaded. */
|
||
wxString m_Header; /* first line of library loaded. */
|
||
int m_NumOfParts; /* Number of parts this library has. */
|
||
PriorQue* m_Entries; /* Parts themselves are saved here. */
|
||
LibraryStruct* m_Pnext; /* Point on next lib in chain. */
|
||
int m_Modified; /* flag indicateur d'edition */
|
||
int m_Size; // Size in bytes (for statistics)
|
||
unsigned long m_TimeStamp; // Signature temporelle
|
||
int m_Flags; // variable used in some functions
|
||
bool m_IsLibCache; // False for the "standard" libraries,
|
||
// True for the library cache
|
||
|
||
public:
|
||
LibraryStruct( int type, const wxString& name, const wxString& fullname );
|
||
~LibraryStruct();
|
||
bool WriteHeader( FILE* file );
|
||
bool ReadHeader( FILE* file, int* LineNum );
|
||
};
|
||
|
||
|
||
/*******************************************************************/
|
||
/* Classes representant les el<65>ments d'un composant d'une libraire */
|
||
/*******************************************************************/
|
||
|
||
|
||
/* class LibEDA_BaseStruct : Basic class for items used in a library component
|
||
* (graphic shapes, texts, fields, pins)
|
||
*/
|
||
|
||
class LibEDA_BaseStruct : public EDA_BaseStruct
|
||
{
|
||
public:
|
||
int m_Unit; /* Unit identification (for multi part per parkage)
|
||
* 0 if the item is common to all units */
|
||
int m_Convert; /* Shape identification (for parts which have a convert shape)
|
||
* 0 if the item is common to all shapes */
|
||
wxPoint m_Pos; /* Position or centre (Arc and Circle) or start point (segments) */
|
||
int m_Width; /* Width of draw lines */
|
||
|
||
public:
|
||
LibEDA_BaseStruct* Next()
|
||
{
|
||
return (LibEDA_BaseStruct*) Pnext;
|
||
}
|
||
|
||
|
||
LibEDA_BaseStruct( KICAD_T struct_type );
|
||
virtual ~LibEDA_BaseStruct() { }
|
||
void Display_Infos_DrawEntry( WinEDA_DrawFrame* frame );
|
||
};
|
||
|
||
|
||
class LibDrawPin : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
int m_PinLen; /* Pin lenght */
|
||
int m_Orient; /* Pin orientation (Up, Down, Left, Right) */
|
||
int m_PinShape; /* Bitwise ORed: Pin shape (see enum DrawPinShape) */
|
||
int m_PinType; /* Electrical pin properties */
|
||
int m_Attributs; /* bit 0 != 0: pin invisible */
|
||
long m_PinNum; /* Pin number: 4 Ascii code like "12" or "anod" or "G6"
|
||
* "12" is really "12\0\0"*/
|
||
wxString m_PinName;
|
||
int m_PinNumSize, m_PinNameSize; /* Pin num and Pin name sizes */
|
||
|
||
// short m_PinNumWidth, m_PinNameWidth; /* (Unused) Pin num and Pin name text width */
|
||
|
||
public:
|
||
LibDrawPin();
|
||
~LibDrawPin() { }
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawPin" );
|
||
}
|
||
|
||
|
||
LibDrawPin* GenCopy();
|
||
bool WriteDescr( FILE* File );
|
||
void Display_Infos( WinEDA_DrawFrame* frame );
|
||
wxPoint ReturnPinEndPoint();
|
||
|
||
int ReturnPinDrawOrient( int TransMat[2][2] );
|
||
void ReturnPinStringNum( wxString& buffer );
|
||
void SetPinNumFromString( wxString& buffer );
|
||
void DrawPinSymbol( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& pin_pos,
|
||
int orient,
|
||
int DrawMode, int Color = -1 );
|
||
|
||
void DrawPinTexts( WinEDA_DrawPanel* panel, wxDC* DC,
|
||
wxPoint& pin_pos, int orient,
|
||
int TextInside, bool DrawPinNum, bool DrawPinName,
|
||
int Color, int DrawMode );
|
||
void PlotPinTexts( wxPoint& pin_pos, int orient,
|
||
int TextInside, bool DrawPinNum, bool DrawPinName );
|
||
};
|
||
|
||
|
||
class LibDrawArc : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
int m_Rayon;
|
||
int m_Fill;
|
||
int t1, t2; /* position des 2 extremites de l'arc en 0,1 degres */
|
||
wxPoint m_ArcStart, m_ArcEnd; /* position des 2 extremites de l'arc en coord reelles*/
|
||
|
||
public:
|
||
LibDrawArc();
|
||
~LibDrawArc() { }
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawArc" );
|
||
}
|
||
|
||
|
||
LibDrawArc* GenCopy();
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
class LibDrawCircle : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
int m_Rayon;
|
||
int m_Fill;
|
||
|
||
public:
|
||
LibDrawCircle();
|
||
~LibDrawCircle() { }
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawCircle" );
|
||
}
|
||
|
||
|
||
LibDrawCircle* GenCopy();
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
class LibDrawText : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
int m_Horiz;
|
||
wxSize m_Size;
|
||
int m_Type;
|
||
wxString m_Text;
|
||
|
||
public:
|
||
LibDrawText();
|
||
~LibDrawText() { }
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawText" );
|
||
}
|
||
|
||
|
||
LibDrawText* GenCopy();
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
class LibDrawSquare : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
wxPoint m_End;
|
||
int m_Fill;
|
||
|
||
public:
|
||
LibDrawSquare();
|
||
~LibDrawSquare() { }
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawSquare" );
|
||
}
|
||
|
||
|
||
LibDrawSquare* GenCopy();
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
class LibDrawSegment : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
wxPoint m_End;
|
||
|
||
public:
|
||
LibDrawSegment();
|
||
~LibDrawSegment() { }
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawSegment" );
|
||
}
|
||
|
||
|
||
LibDrawSegment* GenCopy();
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
class LibDrawPolyline : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
int n, * PolyList;
|
||
int m_Fill;
|
||
|
||
public:
|
||
LibDrawPolyline();
|
||
~LibDrawPolyline()
|
||
{
|
||
if( PolyList )
|
||
free( PolyList );
|
||
}
|
||
|
||
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawPolyline" );
|
||
}
|
||
|
||
|
||
LibDrawPolyline* GenCopy();
|
||
void AddPoint( const wxPoint& point );
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
/* Fields identiques aux fields des composants, pouvant etre predefinis en lib
|
||
* 2 Fields sont toujours presents : Prefix (U, IC..) et Name (74LS00..)*/
|
||
class LibDrawField : public LibEDA_BaseStruct
|
||
{
|
||
public:
|
||
int m_FieldId; // 0 a 11
|
||
// 0 = Name; 1 = Valeur; 2 .. 11 other fields
|
||
wxPoint m_Pos;
|
||
wxSize m_Size;
|
||
int m_Orient; /* Orientation */
|
||
int m_Attributs; /* Attributes (Non visible ...) */
|
||
int m_HJustify, m_VJustify; /* Horiz an Vert Texte Justifications */
|
||
wxString m_Text; /* Field Data */
|
||
wxString m_Name; /* Field Name */
|
||
|
||
public:
|
||
LibDrawField( int idfield = 2 );
|
||
~LibDrawField();
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibDrawField" );
|
||
}
|
||
|
||
|
||
LibDrawField* GenCopy();
|
||
void Copy( LibDrawField* Target );
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
|
||
/* basic class to describe components in libraries (true component or alias), non used directly */
|
||
class LibCmpEntry : public EDA_BaseStruct
|
||
{
|
||
public:
|
||
LibrEntryType Type; /* Type = ROOT;
|
||
* = ALIAS pour struct LibraryAliasType */
|
||
LibDrawField m_Name; // name (74LS00 ..) in lib ( = VALUE )
|
||
wxString m_Doc; /* documentation for info */
|
||
wxString m_KeyWord; /* keyword list (used to select a group of components by keyword) */
|
||
wxString m_DocFile; /* Associed doc filename */
|
||
LibrEntryOptions m_Options; // special features (i.e. Entry is a POWER)
|
||
|
||
public:
|
||
LibCmpEntry( LibrEntryType CmpType, const wxChar* CmpName );
|
||
virtual ~LibCmpEntry();
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "LibCmpEntry" );
|
||
}
|
||
|
||
|
||
bool WriteDescr( FILE* File );
|
||
};
|
||
|
||
class EDA_LibComponentStruct : public LibCmpEntry /* usual component in lib */
|
||
{
|
||
public:
|
||
LibDrawField m_Prefix; /* Prefix ( U, IC ... ) = REFERENCE */
|
||
wxArrayString m_AliasList; /* ALIAS list for the component */
|
||
wxArrayString m_FootprintList; /* list of suitable footprint names for the component (wildcard names accepted)*/
|
||
int m_UnitCount; /* Units (or sections) per package */
|
||
bool m_UnitSelectionLocked; // True if units are differents and their selection is locked
|
||
// (i.e. if part A cannot be automatically changed in part B
|
||
int m_TextInside; /* if 0: pin name drawn on the pin itself
|
||
* if > 0 pin name drawn inside the component,
|
||
* with a distance of m_TextInside in mils */
|
||
bool m_DrawPinNum;
|
||
bool m_DrawPinName;
|
||
LibDrawField* Fields; /* Auxiliairy Field list (id = 2 a 11) */
|
||
LibEDA_BaseStruct* m_Drawings; /* How to draw this part */
|
||
long m_LastDate; // Last change Date
|
||
|
||
public:
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "EDA_LibComponentStruct" );
|
||
}
|
||
|
||
|
||
EDA_LibComponentStruct( const wxChar* CmpName );
|
||
EDA_Rect GetBoundaryBox( int Unit, int Convert ); /* return Box around the part. */
|
||
|
||
~EDA_LibComponentStruct();
|
||
void SortDrawItems();
|
||
};
|
||
|
||
class EDA_LibCmpAliasStruct : public LibCmpEntry /* alias of an usual component in lib (root component) */
|
||
{
|
||
public:
|
||
wxString m_RootName; /* Root component Part name */
|
||
|
||
public:
|
||
EDA_LibCmpAliasStruct( const wxChar* CmpName, const wxChar* CmpRootName );
|
||
~EDA_LibCmpAliasStruct();
|
||
virtual wxString GetClass() const
|
||
{
|
||
return wxT( "EDA_LibCmpAliasStruct" );
|
||
}
|
||
};
|
||
|
||
/* Variables */
|
||
extern LibraryStruct* LibraryList; /* All part libs are saved here. */
|
||
|
||
/* Variables used by LibEdit */
|
||
eda_global LibEDA_BaseStruct* LibItemToRepeat; /* pointeur sur l'<27>l<EFBFBD>ment que l'on
|
||
* peut r<>p<EFBFBD>ter (Pin..;) */
|
||
eda_global LibraryStruct* CurrentLib; /* Current opened library */
|
||
eda_global EDA_LibComponentStruct* CurrentLibEntry; /* Current component */
|
||
eda_global LibEDA_BaseStruct* CurrentDrawItem; /* current edited item */
|
||
|
||
eda_global wxString CurrentAliasName; // Current selected alias (for components which have aliases)
|
||
eda_global bool g_AsDeMorgan; // True if the current component has a "De Morgan" representation
|
||
eda_global int CurrentUnit // Current selected part
|
||
#ifdef MAIN
|
||
= 1
|
||
#endif
|
||
;
|
||
eda_global int CurrentConvert /* Convert = 1 .. 255 */
|
||
#ifdef MAIN
|
||
= 1
|
||
#endif
|
||
;
|
||
|
||
|
||
eda_global wxString FindLibName; /* nom de la librairie ou a ete trouve le
|
||
* dernier composant recherche par FindLibPart() */
|
||
|
||
#endif // LIBCMP_H
|