/********************************************/ /* 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é 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 */