178 lines
5.2 KiB
C++
178 lines
5.2 KiB
C++
/********************************************/
|
||
/* Definitions for the EESchema program: */
|
||
/********************************************/
|
||
|
||
#ifndef CLASS_SCREEN_H
|
||
#define CLASS_SCREEN_H
|
||
|
||
#ifndef eda_global
|
||
#define eda_global extern
|
||
#endif
|
||
|
||
#include "macros.h"
|
||
#include "base_struct.h"
|
||
|
||
/* Max number of sheets in a hierarchy project: */
|
||
#define NB_MAX_SHEET 500
|
||
|
||
|
||
/* Type des labels sur sheet (Labels sur hierarchie) et forme des Global-Labels*/
|
||
typedef enum {
|
||
NET_INPUT,
|
||
NET_OUTPUT,
|
||
NET_BIDI,
|
||
NET_TRISTATE,
|
||
NET_UNSPECIFIED,
|
||
NET_TMAX /* Derniere valeur: fin de tableau */
|
||
} TypeSheetLabel;
|
||
|
||
/* Messages correspondants aux types ou forme des labels */
|
||
#ifdef MAIN
|
||
const char * SheetLabelType[] =
|
||
{
|
||
"Input",
|
||
"Output",
|
||
"BiDi",
|
||
"3State",
|
||
"UnSpc",
|
||
"?????"
|
||
};
|
||
#else
|
||
extern const char * SheetLabelType[];
|
||
#endif
|
||
|
||
/* Description du graphisme des icones associes aux types des Global_Labels */
|
||
#ifdef MAIN
|
||
int TemplateIN_HN[] = {6, 0,0, -1,-1, -2,-1, -2,1, -1,1, 0,0};
|
||
int TemplateIN_HI[] = {6, 0,0, 1,1, 2,1, 2,-1, 1,-1, 0,0};
|
||
int TemplateIN_BOTTOM[] = {6, 0,0, 1,-1, 1,-2, -1,-2, -1,-1, 0,0};
|
||
int TemplateIN_UP[] = {6, 0,0, 1,1, 1,2, -1,2, -1,1, 0,0};
|
||
|
||
int TemplateOUT_HN[] = {6, -2,0, -1,1, 0,1, 0,-1, -1,-1, -2,0};
|
||
int TemplateOUT_HI[] = {6, 2,0, 1,-1, 0,-1, 0,1, 1,1, 2,0};
|
||
int TemplateOUT_BOTTOM[] = {6, 0,-2, 1,-1, 1,0, -1,0, -1,-1, 0,-2};
|
||
int TemplateOUT_UP[] = {6, 0,2, 1,1, 1,0, -1,0, -1,1, 0,2};
|
||
|
||
int TemplateUNSPC_HN[] = {5, 0,-1, -2,-1, -2,1, 0,1, 0,-1};
|
||
int TemplateUNSPC_HI[] = {5, 0,-1, 2,-1, 2,1, 0,1, 0,-1};
|
||
int TemplateUNSPC_BOTTOM[] = {5, 1,0, 1,-2, -1,-2, -1,0, 1,0};
|
||
int TemplateUNSPC_UP[] = {5, 1,0, 1,2, -1,2, -1,0, 1,0};
|
||
|
||
int TemplateBIDI_HN[] = {5, 0,0, -1,-1, -2,0, -1,1, 0,0};
|
||
int TemplateBIDI_HI[] = {5, 0,0, 1,-1, 2,0, 1,1, 0,0};
|
||
int TemplateBIDI_BOTTOM[] = {5, 0,0, -1,-1, 0,-2, 1,-1, 0,0};
|
||
int TemplateBIDI_UP[] = {5, 0,0, -1, 1, 0, 2, 1, 1, 0,0};
|
||
|
||
int Template3STATE_HN[] = {5, 0,0, -1,-1, -2,0, -1,1, 0,0};
|
||
int Template3STATE_HI[] = {5, 0,0, 1,-1, 2,0, 1,1, 0,0};
|
||
int Template3STATE_BOTTOM[] = {5, 0,0, -1,-1, 0,-2, 1,-1, 0,0};
|
||
int Template3STATE_UP[] = {5, 0,0, -1,1, 0,2, 1,1, 0,0};
|
||
|
||
int * TemplateShape[5][4] =
|
||
{
|
||
{TemplateIN_HN,TemplateIN_UP,TemplateIN_HI,TemplateIN_BOTTOM},
|
||
{TemplateOUT_HN,TemplateOUT_UP,TemplateOUT_HI,TemplateOUT_BOTTOM},
|
||
{TemplateBIDI_HN,TemplateBIDI_UP,TemplateBIDI_HI,TemplateBIDI_BOTTOM},
|
||
{Template3STATE_HN,Template3STATE_UP,Template3STATE_HI,Template3STATE_BOTTOM},
|
||
{TemplateUNSPC_HN,TemplateUNSPC_UP,TemplateUNSPC_HI,TemplateUNSPC_BOTTOM}
|
||
};
|
||
#else
|
||
extern int * TemplateShape[5][4];
|
||
#endif
|
||
|
||
|
||
/* Forward declarations */
|
||
class DrawSheetStruct;
|
||
|
||
|
||
class SCH_SCREEN: public BASE_SCREEN
|
||
{
|
||
|
||
public:
|
||
SCH_SCREEN(int idtype);
|
||
~SCH_SCREEN();
|
||
|
||
void FreeDrawList(void); // Free EESchema drawing list (does not delete the sub hierarchies)
|
||
void Place(WinEDA_DrawFrame * frame, wxDC * DC) {};
|
||
void RemoveFromDrawList(EDA_BaseStruct *DrawStruct);/* remove DrawStruct from EEDrawList. */
|
||
void ClearUndoORRedoList(EDA_BaseStruct *List);
|
||
|
||
bool SchematicCleanUp( wxDC * DC = NULL );
|
||
EDA_BaseStruct * ExtractWires(bool CreateCopy);
|
||
|
||
/* full undo redo management : */
|
||
virtual void ClearUndoRedoList(void);
|
||
virtual void AddItemToUndoList(EDA_BaseStruct * item);
|
||
virtual void AddItemToRedoList(EDA_BaseStruct * item);
|
||
};
|
||
|
||
|
||
|
||
class DrawSheetLabelStruct: public EDA_BaseStruct, public EDA_TextStruct
|
||
{
|
||
public:
|
||
int m_Edge, m_Shape;
|
||
bool m_IsDangling; // TRUE si non connect<63>
|
||
|
||
public:
|
||
DrawSheetLabelStruct(DrawSheetStruct * parent,
|
||
const wxPoint & pos = wxPoint(0,0), const wxString & text = wxEmptyString);
|
||
~DrawSheetLabelStruct(void) {}
|
||
DrawSheetLabelStruct * GenCopy(void);
|
||
DrawSheetLabelStruct * Next(void)
|
||
{ return (DrawSheetLabelStruct *) Pnext;}
|
||
void Place(WinEDA_DrawFrame * frame, wxDC * DC);
|
||
virtual void Draw(WinEDA_DrawPanel * panel, wxDC * DC, const wxPoint & offset, int draw_mode, int Color = -1);
|
||
};
|
||
|
||
|
||
class DrawSheetStruct: public SCH_SCREEN /* Gestion de la hierarchie */
|
||
{
|
||
public:
|
||
wxString m_SheetName;
|
||
int m_SheetNameSize;
|
||
// wxString m_FileName; in SCH_SCREEN
|
||
int m_FileNameSize;
|
||
wxPoint m_Pos;
|
||
wxSize m_Size; /* Position and Size of sheet symbol */
|
||
int m_Layer;
|
||
DrawSheetLabelStruct *m_Label; /* Points de connection */
|
||
int m_NbLabel; /* Nombre de points de connexion */
|
||
|
||
public:
|
||
DrawSheetStruct(const wxPoint & pos = wxPoint(0,0) );
|
||
~DrawSheetStruct(void);
|
||
void Place(WinEDA_DrawFrame * frame, wxDC * DC);
|
||
DrawSheetStruct * GenCopy(void);
|
||
void Display_Infos(WinEDA_DrawFrame * frame);
|
||
void CleanupSheet(WinEDA_SchematicFrame * frame, wxDC *DC);
|
||
virtual void Draw(WinEDA_DrawPanel * panel, wxDC * DC, const wxPoint & offset, int draw_mode, int Color = -1);
|
||
void SwapData(DrawSheetStruct * copyitem);
|
||
};
|
||
|
||
|
||
/* Class to handle the list of screens in a hierarchy */
|
||
class EDA_ScreenList
|
||
{
|
||
private:
|
||
int m_Count;
|
||
SCH_SCREEN ** m_List;
|
||
int m_Index;
|
||
|
||
public:
|
||
EDA_ScreenList(EDA_BaseStruct * DrawStruct);
|
||
~EDA_ScreenList();
|
||
int GetCount(void) { return m_Count; }
|
||
SCH_SCREEN * GetFirst(void);
|
||
SCH_SCREEN * GetNext(void);
|
||
SCH_SCREEN * GetScreen(int index);
|
||
void UpdateSheetNumberAndDate(void);
|
||
|
||
private:
|
||
SCH_SCREEN ** BuildScreenList(SCH_SCREEN ** ScreenList,
|
||
EDA_BaseStruct * DrawStruct, int * Count);
|
||
};
|
||
|
||
#endif /* CLASS_SCREEN_H */
|
||
|