2007-08-20 01:20:48 +00:00
|
|
|
|
/********************************************/
|
|
|
|
|
/* Definitions for the EESchema program: */
|
|
|
|
|
/********************************************/
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Forward declarations */
|
|
|
|
|
class DrawSheetStruct;
|
2008-02-12 21:12:46 +00:00
|
|
|
|
extern DrawSheetStruct* g_RootSheet;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
|
2007-08-20 01:20:48 +00:00
|
|
|
|
class SCH_SCREEN : public BASE_SCREEN
|
2007-06-05 12:10:51 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
2008-02-12 21:12:46 +00:00
|
|
|
|
int m_RefCount; //how many sheets reference this screen?
|
|
|
|
|
//delete when it goes to zero.
|
|
|
|
|
int m_ScreenNumber;
|
|
|
|
|
int m_NumberOfScreen;
|
2007-09-01 12:00:30 +00:00
|
|
|
|
SCH_SCREEN( int idtype, KICAD_T aType = SCREEN_STRUCT_TYPE );
|
2007-08-20 01:20:48 +00:00
|
|
|
|
~SCH_SCREEN();
|
2007-09-20 21:06:49 +00:00
|
|
|
|
|
2007-09-13 11:28:58 +00:00
|
|
|
|
virtual wxString GetClass() const
|
|
|
|
|
{
|
|
|
|
|
return wxT("SCH_SCREEN");
|
|
|
|
|
}
|
2007-08-20 01:20:48 +00:00
|
|
|
|
|
2007-09-01 12:00:30 +00:00
|
|
|
|
void FreeDrawList(); // Free EESchema drawing list (does not delete the sub hierarchies)
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
2007-08-20 01:20:48 +00:00
|
|
|
|
void Place( WinEDA_DrawFrame* frame, wxDC* DC ) { };
|
|
|
|
|
void RemoveFromDrawList( EDA_BaseStruct* DrawStruct );/* remove DrawStruct from EEDrawList. */
|
2008-02-12 21:12:46 +00:00
|
|
|
|
bool CheckIfOnDrawList( EDA_BaseStruct* st );
|
|
|
|
|
void AddToDrawList( EDA_BaseStruct* DrawStruct );
|
2007-08-20 01:20:48 +00:00
|
|
|
|
void ClearUndoORRedoList( EDA_BaseStruct* List );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
2007-08-20 01:20:48 +00:00
|
|
|
|
bool SchematicCleanUp( wxDC* DC = NULL );
|
|
|
|
|
EDA_BaseStruct* ExtractWires( bool CreateCopy );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
2007-08-20 01:20:48 +00:00
|
|
|
|
/* full undo redo management : */
|
2007-09-01 12:00:30 +00:00
|
|
|
|
virtual void ClearUndoRedoList();
|
2007-08-20 01:20:48 +00:00
|
|
|
|
virtual void AddItemToUndoList( EDA_BaseStruct* item );
|
|
|
|
|
virtual void AddItemToRedoList( EDA_BaseStruct* item );
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2007-08-23 04:28:46 +00:00
|
|
|
|
class DrawSheetLabelStruct : public EDA_BaseStruct, public EDA_TextStruct
|
2007-06-05 12:10:51 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
2007-08-23 04:28:46 +00:00
|
|
|
|
int m_Layer;
|
2007-08-20 01:20:48 +00:00
|
|
|
|
int m_Edge, m_Shape;
|
2008-02-12 21:12:46 +00:00
|
|
|
|
bool m_IsDangling; // TRUE si non connect<63>
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2007-08-20 01:20:48 +00:00
|
|
|
|
DrawSheetLabelStruct( DrawSheetStruct* parent,
|
|
|
|
|
const wxPoint& pos = wxPoint( 0, 0 ),
|
|
|
|
|
const wxString& text = wxEmptyString );
|
|
|
|
|
|
2007-09-01 12:00:30 +00:00
|
|
|
|
~DrawSheetLabelStruct() { }
|
2007-09-13 11:28:58 +00:00
|
|
|
|
virtual wxString GetClass() const
|
|
|
|
|
{
|
|
|
|
|
return wxT("DrawSheetLabelStruct");
|
|
|
|
|
}
|
|
|
|
|
|
2007-09-01 12:00:30 +00:00
|
|
|
|
DrawSheetLabelStruct* GenCopy();
|
2007-08-20 01:20:48 +00:00
|
|
|
|
|
2007-09-01 12:00:30 +00:00
|
|
|
|
DrawSheetLabelStruct* Next()
|
2007-08-20 01:20:48 +00:00
|
|
|
|
{ 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 );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
};
|
|
|
|
|
|
2008-02-12 21:12:46 +00:00
|
|
|
|
WX_DEFINE_ARRAY( DrawSheetStruct*, SheetGrowArray );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
2008-02-12 21:12:46 +00:00
|
|
|
|
class DrawSheetStruct : public EDA_BaseStruct /*public SCH_SCREEN*/ /* Gestion de la hierarchie */
|
2007-06-05 12:10:51 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
2008-02-12 21:12:46 +00:00
|
|
|
|
wxString m_SheetName; //this is equivalent to C101 for components:
|
|
|
|
|
// it is stored in F0 ... of the file.
|
|
|
|
|
wxString m_FileName; //also in SCH_SCREEN (redundant),
|
|
|
|
|
//but need it here for loading after
|
|
|
|
|
//reading the sheet description from file.
|
|
|
|
|
int m_SheetNameSize;
|
2007-08-20 01:20:48 +00:00
|
|
|
|
|
2008-02-12 21:12:46 +00:00
|
|
|
|
int m_FileNameSize;
|
|
|
|
|
wxPoint m_Pos;
|
|
|
|
|
wxSize m_Size; /* Position and Size of sheet symbol */
|
|
|
|
|
int m_Layer;
|
|
|
|
|
DrawSheetLabelStruct* m_Label; /* Points de connection, linked list.*/
|
|
|
|
|
int m_NbLabel; /* Nombre de points de connexion */
|
|
|
|
|
SCH_SCREEN* m_s;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2007-08-20 01:20:48 +00:00
|
|
|
|
DrawSheetStruct( const wxPoint& pos = wxPoint( 0, 0 ) );
|
2007-09-01 12:00:30 +00:00
|
|
|
|
~DrawSheetStruct();
|
2007-09-13 11:28:58 +00:00
|
|
|
|
virtual wxString GetClass() const
|
|
|
|
|
{
|
|
|
|
|
return wxT("DrawSheetStruct");
|
|
|
|
|
}
|
|
|
|
|
|
2007-08-20 01:20:48 +00:00
|
|
|
|
void Place( WinEDA_DrawFrame* frame, wxDC* DC );
|
2007-09-01 12:00:30 +00:00
|
|
|
|
DrawSheetStruct* GenCopy();
|
2007-08-20 01:20:48 +00:00
|
|
|
|
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 );
|
2008-02-12 21:12:46 +00:00
|
|
|
|
void SwapData( DrawSheetStruct* copyitem );
|
|
|
|
|
void DeleteAnnotation( bool recurse );
|
|
|
|
|
int ComponentCount();
|
|
|
|
|
bool Load(WinEDA_SchematicFrame* frame);
|
|
|
|
|
bool SearchHierarchy(wxString filename, SCH_SCREEN **screen);
|
|
|
|
|
bool LocatePathOfScreen(SCH_SCREEN *screen, DrawSheetList* list);
|
|
|
|
|
int CountSheets();
|
|
|
|
|
//void RemoveSheet(DrawSheetStruct* sheet);
|
|
|
|
|
//to remove a sheet, just delete it
|
|
|
|
|
//-- the destructor should take care of everything else.
|
2007-06-05 12:10:51 +00:00
|
|
|
|
};
|
|
|
|
|
|
2008-02-12 21:12:46 +00:00
|
|
|
|
#define DSLSZ 32
|
|
|
|
|
class DrawSheetList
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
int m_numSheets;
|
|
|
|
|
DrawSheetStruct* m_sheets[DSLSZ];
|
|
|
|
|
|
|
|
|
|
DrawSheetList();
|
|
|
|
|
~DrawSheetList(){};
|
|
|
|
|
void Clear(){m_numSheets = 0; }
|
|
|
|
|
int Cmp(DrawSheetList& d);
|
|
|
|
|
DrawSheetStruct* Last();
|
|
|
|
|
SCH_SCREEN* LastScreen();
|
|
|
|
|
EDA_BaseStruct* LastDrawList();
|
|
|
|
|
void Push(DrawSheetStruct* sheet);
|
|
|
|
|
DrawSheetStruct* Pop();
|
|
|
|
|
wxString Path();
|
|
|
|
|
wxString PathHumanReadable();
|
|
|
|
|
void UpdateAllScreenReferences();
|
|
|
|
|
bool operator= (const DrawSheetList& d1);
|
|
|
|
|
bool operator==(const DrawSheetList &d1);
|
|
|
|
|
bool operator!=(const DrawSheetList &d1);
|
|
|
|
|
};
|
|
|
|
|
/* Class to handle the list of *Sheets* in a hierarchy */
|
|
|
|
|
// sheets are not unique - can have many sheets with the same
|
|
|
|
|
// filename and the same SCH_SHEET reference.
|
|
|
|
|
class EDA_SheetList
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
DrawSheetList* m_List;
|
|
|
|
|
int m_count;
|
|
|
|
|
int m_index;
|
|
|
|
|
DrawSheetList m_currList;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
EDA_SheetList( DrawSheetStruct* sheet ){
|
|
|
|
|
m_index = 0;
|
|
|
|
|
m_count = 0;
|
|
|
|
|
m_List = NULL;
|
|
|
|
|
if(sheet == NULL)
|
|
|
|
|
sheet = g_RootSheet;
|
|
|
|
|
BuildSheetList( sheet );
|
|
|
|
|
}
|
|
|
|
|
~EDA_SheetList() {if(m_List){free(m_List);} m_List = NULL;}
|
|
|
|
|
int GetCount() { return m_count; }
|
|
|
|
|
DrawSheetList* GetFirst();
|
|
|
|
|
DrawSheetList* GetNext();
|
|
|
|
|
DrawSheetList* GetSheet(int index );
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void BuildSheetList( DrawSheetStruct* sheet );
|
|
|
|
|
};
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
2008-02-12 21:12:46 +00:00
|
|
|
|
/* Class to handle the list of *screens* in a hierarchy */
|
|
|
|
|
// screens are unique, and correspond to .sch files.
|
|
|
|
|
WX_DEFINE_ARRAY( SCH_SCREEN*, ScreenGrowArray );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
class EDA_ScreenList
|
|
|
|
|
{
|
|
|
|
|
private:
|
2008-02-12 21:12:46 +00:00
|
|
|
|
ScreenGrowArray m_List;
|
|
|
|
|
unsigned int m_Index;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2008-02-12 21:12:46 +00:00
|
|
|
|
EDA_ScreenList(){
|
|
|
|
|
m_Index = 0;
|
|
|
|
|
BuildScreenList(g_RootSheet);
|
|
|
|
|
}
|
|
|
|
|
~EDA_ScreenList() {}
|
|
|
|
|
int GetCount() { return m_List.GetCount(); }
|
2007-09-01 12:00:30 +00:00
|
|
|
|
SCH_SCREEN* GetFirst();
|
|
|
|
|
SCH_SCREEN* GetNext();
|
2008-02-12 21:12:46 +00:00
|
|
|
|
SCH_SCREEN* GetScreen( unsigned int index );
|
|
|
|
|
void UpdateScreenNumberAndDate();
|
2007-08-20 01:20:48 +00:00
|
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
|
private:
|
2008-02-12 21:12:46 +00:00
|
|
|
|
void AddScreenToList( SCH_SCREEN* testscreen );
|
|
|
|
|
void BuildScreenList( EDA_BaseStruct* sheet );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif /* CLASS_SCREEN_H */
|