Browse Source
eeschema: code cleaning. SCH_ITEM class used for all schematic items in eeschema. Files reorganization.
pull/1/head
eeschema: code cleaning. SCH_ITEM class used for all schematic items in eeschema. Files reorganization.
pull/1/head
74 changed files with 1524 additions and 1625 deletions
-
7change_log.txt
-
1common/CMakeLists.txt
-
109common/base_struct.cpp
-
1common/block_commande.cpp
-
84common/class_drawpickedstruct.cpp
-
1common/makefile.include
-
2eeschema/affiche.cpp
-
2eeschema/annotate.cpp
-
5eeschema/annotate_dialog.cpp
-
111eeschema/block.cpp
-
40eeschema/bus-wire-junction.cpp
-
2eeschema/busentry.cpp
-
8eeschema/class_drawsheet.cpp
-
5eeschema/class_drawsheet.h
-
23eeschema/class_screen.cpp
-
8eeschema/class_screen.h
-
3eeschema/class_text-label.cpp
-
17eeschema/cleanup.cpp
-
12eeschema/cmpclass.cpp
-
37eeschema/component_class.cpp
-
17eeschema/component_class.h
-
37eeschema/controle.cpp
-
2eeschema/cross-probing.cpp
-
33eeschema/dangling_ends.cpp
-
42eeschema/delete.cpp
-
1eeschema/delsheet.cpp
-
2eeschema/dialog_eeschema_config.cpp
-
19eeschema/dialog_erc.cpp
-
54eeschema/edit_component_in_schematic.cpp
-
28eeschema/edit_label.cpp
-
2eeschema/eeconfig.cpp
-
11eeschema/eecreate.cpp
-
59eeschema/eelibs_draw_components.cpp
-
24eeschema/eeredraw.cpp
-
3eeschema/eeschema.cpp
-
2eeschema/erc.cpp
-
2eeschema/files-io.cpp
-
28eeschema/find.cpp
-
8eeschema/general.h
-
2eeschema/getpart.cpp
-
52eeschema/hierarch.cpp
-
22eeschema/hotkeys.cpp
-
30eeschema/load_one_schematic_file.cpp
-
137eeschema/locate.cpp
-
2eeschema/menubar.cpp
-
2eeschema/netform.cpp
-
8eeschema/netlist.cpp
-
3eeschema/netlist_control.cpp
-
4eeschema/onleftclick.cpp
-
7eeschema/onrightclick.cpp
-
4eeschema/plot.cpp
-
6eeschema/plothpgl.cpp
-
12eeschema/plotps.cpp
-
18eeschema/program.h
-
59eeschema/protos.h
-
16eeschema/save_schemas.cpp
-
26eeschema/schedit.cpp
-
24eeschema/schematic_undo_redo.cpp
-
3eeschema/schframe.cpp
-
249eeschema/schframe.h
-
10eeschema/sheet.cpp
-
2eeschema/sheetlab.cpp
-
4eeschema/tool_sch.cpp
-
482eeschema/viewlib_frame.cpp
-
219include/base_struct.h
-
148include/board_item_struct.h
-
8include/drawpanel_wxstruct.h
-
1include/pcbstruct.h
-
119include/sch_item_struct.h
-
421include/wxEeschemaStruct.h
-
171include/wxstruct.h
-
12pcbnew/classpcb.cpp
-
1share/svg_print.cpp
-
13todo.txt
@ -0,0 +1,84 @@ |
|||
/****************************************************/ |
|||
/* class_drawpickedstruct.cpp */ |
|||
/****************************************************/ |
|||
|
|||
#include "fctsys.h"
|
|||
#include "common.h"
|
|||
#include "sch_item_struct.h"
|
|||
|
|||
/**************************/ |
|||
/* class DrawPickedStruct */ |
|||
/**************************/ |
|||
|
|||
/* This class has only one useful member: .m_PickedStruct, used as a link.
|
|||
* It does not describe really an item. |
|||
* It is used to create a linked list of selected items (in block selection). |
|||
* Each DrawPickedStruct item has is member: .m_PickedStruct pointing the |
|||
* real selected item |
|||
*/ |
|||
|
|||
/*******************************************************************/ |
|||
DrawPickedStruct::DrawPickedStruct( SCH_ITEM * pickedstruct ) : |
|||
SCH_ITEM( NULL, DRAW_PICK_ITEM_STRUCT_TYPE ) |
|||
/*******************************************************************/ |
|||
{ |
|||
m_PickedStruct = pickedstruct; |
|||
} |
|||
|
|||
|
|||
DrawPickedStruct::~DrawPickedStruct() |
|||
{ |
|||
} |
|||
|
|||
#if defined(DEBUG)
|
|||
void DrawPickedStruct::Show( int nestLevel, std::ostream& os ) |
|||
{ |
|||
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << "/>\n"; |
|||
} |
|||
#endif
|
|||
|
|||
|
|||
EDA_Rect DrawPickedStruct::GetBoundingBox() |
|||
{ |
|||
if( m_PickedStruct ) |
|||
return m_PickedStruct->GetBoundingBox(); |
|||
else |
|||
{ |
|||
return EDA_Rect(); // empty rectangle
|
|||
} |
|||
} |
|||
|
|||
|
|||
EDA_Rect DrawPickedStruct::GetBoundingBoxUnion() |
|||
{ |
|||
EDA_Rect ret; |
|||
|
|||
DrawPickedStruct* cur = this; |
|||
SCH_ITEM* item; |
|||
while( cur && (item = cur->m_PickedStruct) != NULL ) |
|||
{ |
|||
ret.Merge( item->GetBoundingBox() ); |
|||
|
|||
cur = cur->Next(); |
|||
} |
|||
|
|||
return ret; |
|||
} |
|||
|
|||
|
|||
/*********************************************/ |
|||
void DrawPickedStruct::DeleteWrapperList() |
|||
/*********************************************/ |
|||
|
|||
/* Delete this item all the items of the linked list
|
|||
* Free the wrapper, but DOES NOT delete the picked items linked by .m_PickedStruct |
|||
*/ |
|||
{ |
|||
DrawPickedStruct* wrapp_struct, * next_struct; |
|||
|
|||
for( wrapp_struct = Next(); wrapp_struct != NULL; wrapp_struct = next_struct ) |
|||
{ |
|||
next_struct = wrapp_struct->Next(); |
|||
delete wrapp_struct; |
|||
} |
|||
} |
|||
@ -1,249 +0,0 @@ |
|||
/***************************************************************************** |
|||
* |
|||
* schframe.h |
|||
* |
|||
* Header for class definition of WinEDA_SchematicFrame. This is the main |
|||
* window for EESchema. |
|||
* |
|||
*****************************************************************************/ |
|||
|
|||
#ifndef _SCHFRAME_H_ |
|||
#define _SCHFRAME_H_ |
|||
|
|||
class WinEDA_DrawFrame; |
|||
|
|||
class WinEDA_SchematicFrame : public WinEDA_DrawFrame |
|||
{ |
|||
public: |
|||
WinEDAChoiceBox* m_SelPartBox; |
|||
DrawSheetPath* m_CurrentSheet; //which sheet we are presently working on. |
|||
private: |
|||
wxMenu* m_FilesMenu; |
|||
|
|||
public: |
|||
WinEDA_SchematicFrame( wxWindow* father, WinEDA_App* parent, |
|||
const wxString& title, |
|||
const wxPoint& pos, const wxSize& size, |
|||
long style = KICAD_DEFAULT_DRAWFRAME_STYLE ); |
|||
|
|||
~WinEDA_SchematicFrame(); |
|||
|
|||
void OnCloseWindow( wxCloseEvent& Event ); |
|||
void Process_Special_Functions( wxCommandEvent& event ); |
|||
void Process_Config( wxCommandEvent& event ); |
|||
void Save_Config( wxWindow* displayframe ); |
|||
|
|||
void RedrawActiveWindow( wxDC* DC, bool EraseBg ); |
|||
|
|||
void CreateScreens(); |
|||
void ReCreateHToolbar(); |
|||
void ReCreateVToolbar(); |
|||
void ReCreateOptToolbar(); |
|||
void ReCreateMenuBar(); |
|||
void SetToolbars(); |
|||
void OnHotKey( wxDC* DC, |
|||
int hotkey, |
|||
EDA_BaseStruct* DrawStruct ); |
|||
|
|||
DrawSheetPath* GetSheet(); |
|||
virtual BASE_SCREEN* GetScreen(); |
|||
virtual void SetScreen(SCH_SCREEN* screen); |
|||
virtual wxString GetScreenDesc(); |
|||
|
|||
void InstallConfigFrame( const wxPoint& pos ); |
|||
|
|||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); |
|||
void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); |
|||
bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); |
|||
void OnSelectOptionToolbar( wxCommandEvent& event ); |
|||
void ToolOnRightClick( wxCommandEvent& event ); |
|||
int BestZoom(); // Retourne le meilleur zoom |
|||
|
|||
EDA_BaseStruct* SchematicGeneralLocateAndDisplay( bool IncludePin = TRUE ); |
|||
EDA_BaseStruct* SchematicGeneralLocateAndDisplay( const wxPoint& refpoint, |
|||
bool IncludePin ); |
|||
|
|||
EDA_BaseStruct* FindComponentAndItem( const wxString& component_reference, |
|||
bool Find_in_hierarchy, |
|||
int SearchType, |
|||
const wxString& text_to_find, |
|||
bool mouseWarp ); |
|||
|
|||
/* Cross probing with pcbnew */ |
|||
void SendMessageToPCBNEW( EDA_BaseStruct* objectToSync, |
|||
SCH_COMPONENT* LibItem ); |
|||
|
|||
/* netlist generation */ |
|||
void* BuildNetListBase(); |
|||
|
|||
// FUnctions used for hierarchy handling |
|||
void InstallPreviousSheet(); |
|||
void InstallNextScreen( DrawSheetStruct* Sheet ); |
|||
|
|||
void ToPlot_PS( wxCommandEvent& event ); |
|||
void ToPlot_HPGL( wxCommandEvent& event ); |
|||
void ToPostProcess( wxCommandEvent& event ); |
|||
|
|||
void Save_File( wxCommandEvent& event ); |
|||
void SaveProject(); |
|||
int LoadOneEEProject( const wxString& FileName, bool IsNew ); |
|||
bool LoadOneEEFile(SCH_SCREEN* screen, const wxString& FullFileName ); |
|||
bool SaveEEFile( SCH_SCREEN* screen, int FileSave ); |
|||
SCH_SCREEN * CreateNewScreen(SCH_SCREEN * OldScreen, int TimeStamp); |
|||
|
|||
// General search: |
|||
|
|||
/** |
|||
* Function FindSchematicItem |
|||
* finds a string in the schematic. |
|||
* @param pattern The text to search for, either in value, reference or |
|||
* elsewhere. |
|||
* @param SearchType: 0 => Search is made in current sheet |
|||
* 1 => the whole hierarchy |
|||
* 2 => or for the next item |
|||
* @param mouseWarp If true, then move the mouse cursor to the item. |
|||
*/ |
|||
EDA_BaseStruct* FindSchematicItem( const wxString& pattern, |
|||
int SearchType, |
|||
bool mouseWarp = true ); |
|||
|
|||
EDA_BaseStruct* FindMarker( int SearchType ); |
|||
|
|||
private: |
|||
void Process_Move_Item( EDA_BaseStruct* DrawStruct, wxDC* DC ); |
|||
void OnExit( wxCommandEvent& event ); |
|||
void OnAnnotate ( wxCommandEvent& event ); |
|||
void OnErc( wxCommandEvent& event ); |
|||
void OnCreateNetlist( wxCommandEvent& event ); |
|||
void OnCreateBillOfMaterials( wxCommandEvent& event ); |
|||
void OnFindItems( wxCommandEvent& event ); |
|||
void OnLoadFile( wxCommandEvent& event ); |
|||
void OnNewProject( wxCommandEvent& event ); |
|||
void OnLoadProject( wxCommandEvent& event ); |
|||
void OnOpenPcbnew( wxCommandEvent& event ); |
|||
void OnOpenCvpcb( wxCommandEvent& event ); |
|||
void OnOpenLibraryViewer( wxCommandEvent& event ); |
|||
void OnOpenLibraryEditor( wxCommandEvent& event ); |
|||
|
|||
|
|||
// Bus Entry |
|||
DrawBusEntryStruct* CreateBusEntry( wxDC* DC, int entry_type ); |
|||
void SetBusEntryShape( wxDC* DC, |
|||
DrawBusEntryStruct* BusEntry, |
|||
int entry_type ); |
|||
int GetBusEntryShape( DrawBusEntryStruct* BusEntry ); |
|||
void StartMoveBusEntry( DrawBusEntryStruct* DrawLibItem, wxDC* DC ); |
|||
|
|||
// NoConnect |
|||
EDA_BaseStruct* CreateNewNoConnectStruct( wxDC* DC ); |
|||
|
|||
// Junction |
|||
DrawJunctionStruct* CreateNewJunctionStruct( wxDC* DC, |
|||
const wxPoint& pos, |
|||
bool PutInUndoList = FALSE ); |
|||
|
|||
// Text ,label, glabel |
|||
EDA_BaseStruct* CreateNewText( wxDC* DC, int type ); |
|||
void EditSchematicText( SCH_TEXT* TextStruct, wxDC* DC ); |
|||
void ChangeTextOrient( SCH_TEXT* TextStruct, wxDC* DC ); |
|||
void StartMoveTexte( SCH_TEXT* TextStruct, wxDC* DC ); |
|||
void ConvertTextType( SCH_TEXT* Text, wxDC* DC, int newtype ); |
|||
|
|||
// Wire, Bus |
|||
void BeginSegment( wxDC* DC, int type ); |
|||
void EndSegment( wxDC* DC ); |
|||
void DeleteCurrentSegment( wxDC* DC ); |
|||
void DeleteConnection( wxDC* DC, bool DeleteFullConnection ); |
|||
|
|||
// graphic lines |
|||
void Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC ); |
|||
void Drawing_SetNewWidth( DRAWSEGMENT* DrawSegm, wxDC* DC ); |
|||
void Delete_Drawings_All_Layer( DRAWSEGMENT* Segment, wxDC* DC ); |
|||
DRAWSEGMENT* Begin_Edge( DRAWSEGMENT* Segment, wxDC* DC ); |
|||
|
|||
// Hierarchical Sheet & PinSheet |
|||
void InstallHierarchyFrame( wxDC* DC, wxPoint& pos ); |
|||
DrawSheetStruct* CreateSheet( wxDC* DC ); |
|||
void ReSizeSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
|
|||
public: |
|||
bool EditSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
/** Function UpdateSheetNumberAndDate |
|||
* Set a sheet number, the sheet count for sheets in the whole schematic |
|||
* and update the date in all screens |
|||
*/ |
|||
void UpdateSheetNumberAndDate(); |
|||
|
|||
private: |
|||
void StartMoveSheet( DrawSheetStruct* sheet, wxDC* DC ); |
|||
DrawSheetLabelStruct* Create_PinSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
void Edit_PinSheet( DrawSheetLabelStruct* SheetLabel, wxDC* DC ); |
|||
void StartMove_PinSheet( DrawSheetLabelStruct* SheetLabel, wxDC* DC ); |
|||
void Place_PinSheet( DrawSheetLabelStruct* SheetLabel, wxDC* DC ); |
|||
DrawSheetLabelStruct* Import_PinSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
|
|||
public: |
|||
void DeleteSheetLabel( wxDC* DC, DrawSheetLabelStruct* SheetLabelToDel ); |
|||
|
|||
private: |
|||
|
|||
// Component |
|||
SCH_COMPONENT* Load_Component( wxDC* DC, |
|||
const wxString& libname, |
|||
wxArrayString& List, |
|||
bool UseLibBrowser ); |
|||
void StartMovePart( SCH_COMPONENT* DrawLibItem, wxDC* DC ); |
|||
|
|||
public: |
|||
void CmpRotationMiroir( SCH_COMPONENT* DrawComponent, |
|||
wxDC* DC, int type_rotate ); |
|||
|
|||
private: |
|||
void SelPartUnit( SCH_COMPONENT* DrawComponent, |
|||
int unit, wxDC* DC ); |
|||
void ConvertPart( SCH_COMPONENT* DrawComponent, wxDC* DC ); |
|||
void SetInitCmp( SCH_COMPONENT* DrawComponent, wxDC* DC ); |
|||
void EditComponentReference( SCH_COMPONENT* DrawLibItem, |
|||
wxDC* DC ); |
|||
void EditComponentValue( SCH_COMPONENT* DrawLibItem, wxDC* DC ); |
|||
void EditComponentFootprint( SCH_COMPONENT* DrawLibItem, |
|||
wxDC* DC ); |
|||
void StartMoveCmpField( PartTextStruct* Field, wxDC* DC ); |
|||
void EditCmpFieldText( PartTextStruct* Field, wxDC* DC ); |
|||
void RotateCmpField( PartTextStruct* Field, wxDC* DC ); |
|||
|
|||
/* Operations sur bloc */ |
|||
void PasteStruct( wxDC* DC ); |
|||
|
|||
/* Undo - redo */ |
|||
public: |
|||
void SaveCopyInUndoList( EDA_BaseStruct* ItemToCopy, |
|||
int flag_type_command = 0 ); |
|||
|
|||
private: |
|||
void PutDataInPreviousState( DrawPickedStruct* List ); |
|||
bool GetSchematicFromRedoList(); |
|||
bool GetSchematicFromUndoList(); |
|||
|
|||
|
|||
public: |
|||
void Key( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct ); |
|||
|
|||
/* Gestion generale des operations sur block */ |
|||
int ReturnBlockCommand( int key ); |
|||
void InitBlockPasteInfos(); |
|||
void HandleBlockPlace( wxDC* DC ); |
|||
int HandleBlockEnd( wxDC* DC ); |
|||
void HandleBlockEndByPopUp( int Command, wxDC* DC ); |
|||
|
|||
// Repetition automatique de placements |
|||
void RepeatDrawItem( wxDC* DC ); |
|||
|
|||
// Test des points de connexion en l'air (dangling ends) |
|||
void TestDanglingEnds( EDA_BaseStruct* DrawList, wxDC* DC ); |
|||
LibDrawPin* LocatePinEnd( EDA_BaseStruct* DrawList, const wxPoint& pos ); |
|||
|
|||
DECLARE_EVENT_TABLE() |
|||
}; |
|||
|
|||
#endif /* _SCHFRAME_H_ */ |
|||
@ -0,0 +1,148 @@ |
|||
/*********************************************************************/ |
|||
/* board_item_struct.h : Basic classes for BOARD_ITEM descriptions */ |
|||
/*********************************************************************/ |
|||
|
|||
#ifndef BOARD_ITEM_STRUCT_H |
|||
#define BOARD_ITEM_STRUCT_H |
|||
|
|||
|
|||
/** |
|||
* Class BOARD_ITEM |
|||
* is a base class for any item which can be embedded within the BOARD |
|||
* container class, and therefore instances of derived classes should only be |
|||
* found in PCBNEW or other programs that use class BOARD and its contents. |
|||
* The corresponding class in EESCHEMA seems to be DrawPartStruct. |
|||
*/ |
|||
class BOARD_ITEM : public EDA_BaseStruct |
|||
{ |
|||
protected: |
|||
int m_Layer; |
|||
|
|||
public: |
|||
|
|||
BOARD_ITEM( BOARD_ITEM* StructFather, KICAD_T idtype ) : |
|||
EDA_BaseStruct( StructFather, idtype ) |
|||
, m_Layer( 0 ) |
|||
{ |
|||
} |
|||
|
|||
|
|||
BOARD_ITEM( const BOARD_ITEM& src ) : |
|||
EDA_BaseStruct( src.m_Parent, src.Type() ) |
|||
, m_Layer( src.m_Layer ) |
|||
{ |
|||
} |
|||
|
|||
|
|||
/** |
|||
* A value of wxPoint(0,0) which can be passed to the Draw() functions. |
|||
*/ |
|||
static wxPoint ZeroOffset; |
|||
|
|||
BOARD_ITEM* Next() const { return (BOARD_ITEM*) Pnext; } |
|||
BOARD_ITEM* Back() const { return (BOARD_ITEM*) Pback; } |
|||
BOARD_ITEM* GetParent() const { return (BOARD_ITEM*) m_Parent; } |
|||
|
|||
/** |
|||
* Function GetPosition |
|||
* returns the position of this object. |
|||
* @return wxPoint& - The position of this object, non-const so it |
|||
* can be changed |
|||
*/ |
|||
virtual wxPoint& GetPosition() = 0; |
|||
|
|||
/** |
|||
* Function GetLayer |
|||
* returns the layer this item is on. |
|||
*/ |
|||
int GetLayer() const { return m_Layer; } |
|||
|
|||
/** |
|||
* Function SetLayer |
|||
* sets the layer this item is on. |
|||
* @param aLayer The layer number. |
|||
*/ |
|||
void SetLayer( int aLayer ) { m_Layer = aLayer; } |
|||
|
|||
|
|||
/** |
|||
* Function Draw |
|||
* BOARD_ITEMs have their own color information. |
|||
*/ |
|||
virtual void Draw( WinEDA_DrawPanel* panel, wxDC* DC, |
|||
int aDrawMode, const wxPoint& offset = ZeroOffset ) = 0; |
|||
|
|||
|
|||
/** |
|||
* Function IsOnLayer |
|||
* tests to see if this object is on the given layer. Is virtual so |
|||
* objects like D_PAD, which reside on multiple layers can do their own |
|||
* form of testing. |
|||
* @param aLayer The layer to test for. |
|||
* @return bool - true if on given layer, else false. |
|||
*/ |
|||
virtual bool IsOnLayer( int aLayer ) const |
|||
{ |
|||
return m_Layer == aLayer; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* Function IsLocked |
|||
* @return bool - true if the object is locked, else false |
|||
*/ |
|||
virtual bool IsLocked() const |
|||
{ |
|||
return false; // only MODULEs can be locked at this time. |
|||
} |
|||
|
|||
|
|||
/** |
|||
* Function UnLink |
|||
* detaches this object from its owner. |
|||
*/ |
|||
virtual void UnLink() = 0; |
|||
|
|||
|
|||
/** |
|||
* Function DeleteStructure |
|||
* deletes this object after UnLink()ing it from its owner. |
|||
*/ |
|||
void DeleteStructure() |
|||
{ |
|||
UnLink(); |
|||
delete this; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* Function MenuText |
|||
* returns the text to use in any menu type UI control which must uniquely |
|||
* identify this item. |
|||
* @param aBoard The PCB in which this item resides, needed for Net lookup. |
|||
* @return wxString |
|||
* @todo: maybe: make this virtual and split into each derived class |
|||
*/ |
|||
wxString MenuText( const BOARD* aBoard ) const; |
|||
|
|||
|
|||
/** |
|||
* Function MenuIcon |
|||
* @return const char** - The XPM to use in any UI control which can help |
|||
* identify this item. |
|||
* @todo: make this virtual and split into each derived class |
|||
*/ |
|||
const char** MenuIcon() const; |
|||
|
|||
|
|||
/** |
|||
* Function Save |
|||
* writes the data structures for this object out to a FILE in "*.brd" format. |
|||
* @param aFile The FILE to write to. |
|||
* @return bool - true if success writing else false. |
|||
*/ |
|||
virtual bool Save( FILE* aFile ) const = 0; |
|||
}; |
|||
|
|||
#endif /* BOARD_ITEM_STRUCT_H */ |
|||
|
|||
@ -0,0 +1,119 @@ |
|||
/*****************************************************************************/ |
|||
/* sch_item_struct.h : Basic classes for most eeschema items descriptions */ |
|||
/*****************************************************************************/ |
|||
|
|||
#ifndef SCH_ITEM_STRUCT_H |
|||
#define SCH_ITEM_STRUCT_H |
|||
|
|||
|
|||
|
|||
/** |
|||
* Class SCH_ITEM |
|||
* is a base class for any item which can be embedded within the SCHEMATIC |
|||
* container class, and therefore instances of derived classes should only be |
|||
* found in EESCHEMA or other programs that use class SCHEMATIC and its contents. |
|||
* The corresponding class in PCBNEW is BOARD_ITEM. |
|||
*/ |
|||
class SCH_ITEM : public EDA_BaseStruct |
|||
{ |
|||
protected: |
|||
int m_Layer; |
|||
|
|||
|
|||
public: |
|||
SCH_ITEM( EDA_BaseStruct* aParent, KICAD_T aType ) : |
|||
EDA_BaseStruct( aParent, aType ), |
|||
m_Layer( 0 ) |
|||
{ |
|||
} |
|||
|
|||
~SCH_ITEM(){} |
|||
|
|||
virtual wxString GetClass() const |
|||
{ |
|||
return wxT( "SCH_ITEM" ); |
|||
} |
|||
|
|||
SCH_ITEM* Next() { return (SCH_ITEM*) Pnext; } |
|||
|
|||
/** |
|||
* Function GetLayer |
|||
* returns the layer this item is on. |
|||
*/ |
|||
int GetLayer() const { return m_Layer; } |
|||
|
|||
/** |
|||
* Function SetLayer |
|||
* sets the layer this item is on. |
|||
* @param aLayer The layer number. |
|||
*/ |
|||
void SetLayer( int aLayer ) { m_Layer = aLayer; } |
|||
|
|||
/** |
|||
* Function Draw |
|||
*/ |
|||
virtual void Draw( WinEDA_DrawPanel* panel, |
|||
wxDC* DC, |
|||
const wxPoint& offset, |
|||
int draw_mode, |
|||
int Color = -1 ) = 0; |
|||
|
|||
|
|||
/* fonction de placement */ |
|||
virtual void Place( WinEDA_DrawFrame* frame, wxDC* DC ); |
|||
|
|||
}; |
|||
|
|||
|
|||
/** |
|||
* Class DrawPickedStruct |
|||
* holds structures picked by pick events (like block selection). |
|||
* This class has only one useful member: .m_PickedStruct, used as a link. |
|||
* It is used to create a linked list of selected items (in block selection). |
|||
* Each DrawPickedStruct item has is member: .m_PickedStruct pointing the |
|||
* real selected item. |
|||
*/ |
|||
class DrawPickedStruct : public SCH_ITEM |
|||
{ |
|||
public: |
|||
SCH_ITEM * m_PickedStruct; |
|||
|
|||
public: |
|||
DrawPickedStruct( SCH_ITEM * pickedstruct = NULL ); |
|||
~DrawPickedStruct(); |
|||
void Place( WinEDA_DrawFrame* frame, wxDC* DC ) { }; |
|||
void DeleteWrapperList(); |
|||
|
|||
DrawPickedStruct* Next() { return (DrawPickedStruct*) Pnext; } |
|||
|
|||
EDA_Rect GetBoundingBox(); |
|||
|
|||
/** |
|||
* Function GetBoundingBoxUnion |
|||
* returns the union of all the BoundingBox rectangles of all held items |
|||
* in the picklist whose list head is this DrawPickedStruct. |
|||
* @return EDA_Rect - The combined, composite, bounding box. |
|||
*/ |
|||
EDA_Rect GetBoundingBoxUnion(); |
|||
|
|||
wxString GetClass() const { return wxT( "DrawPickedStruct" ); } |
|||
|
|||
/** |
|||
* Function Draw |
|||
* Do nothing, needed for SCH_ITEM compat. |
|||
*/ |
|||
void Draw( WinEDA_DrawPanel* panel, |
|||
wxDC* DC, |
|||
const wxPoint& offset, |
|||
int draw_mode, |
|||
int Color = -1 ) |
|||
{ |
|||
} |
|||
|
|||
|
|||
#if defined(DEBUG) |
|||
void Show( int nestLevel, std::ostream& os ); |
|||
#endif |
|||
}; |
|||
|
|||
#endif /* SCH_ITEM_STRUCT_H */ |
|||
@ -0,0 +1,421 @@ |
|||
/***********************************************************/ |
|||
/* wxEeschemaStruct.h: */ |
|||
/* descriptions des principales classes derivees utilisees */ |
|||
/***********************************************************/ |
|||
|
|||
#ifndef WX_EESCHEMA_STRUCT_H |
|||
#define WX_EESCHEMA_STRUCT_H |
|||
|
|||
|
|||
class DrawPickedStruct; |
|||
class SCH_ITEM; |
|||
class DrawNoConnectStruct; |
|||
|
|||
/*******************************/ |
|||
/* class WinEDA_SchematicFrame */ |
|||
/*******************************/ |
|||
|
|||
/* enum used in RotationMiroir() */ |
|||
enum fl_rot_cmp { |
|||
CMP_NORMAL, // orientation normale (O, pas de miroir) |
|||
CMP_ROTATE_CLOCKWISE, // nouvelle rotation de -90 |
|||
CMP_ROTATE_COUNTERCLOCKWISE, // nouvelle rotation de +90 |
|||
CMP_ORIENT_0, // orientation 0, pas de miroir, id CMP_NORMAL |
|||
CMP_ORIENT_90, // orientation 90, pas de miroir |
|||
CMP_ORIENT_180, // orientation 180, pas de miroir |
|||
CMP_ORIENT_270, // orientation -90, pas de miroir |
|||
CMP_MIROIR_X = 0x100, // miroir selon axe X |
|||
CMP_MIROIR_Y = 0x200 // miroir selon axe Y |
|||
}; |
|||
|
|||
class WinEDA_SchematicFrame : public WinEDA_DrawFrame |
|||
{ |
|||
public: |
|||
WinEDAChoiceBox* m_SelPartBox; |
|||
DrawSheetPath* m_CurrentSheet; //which sheet we are presently working on. |
|||
private: |
|||
wxMenu* m_FilesMenu; |
|||
|
|||
public: |
|||
WinEDA_SchematicFrame( wxWindow* father, WinEDA_App* parent, |
|||
const wxString& title, |
|||
const wxPoint& pos, const wxSize& size, |
|||
long style = KICAD_DEFAULT_DRAWFRAME_STYLE ); |
|||
|
|||
~WinEDA_SchematicFrame(); |
|||
|
|||
void OnCloseWindow( wxCloseEvent& Event ); |
|||
void Process_Special_Functions( wxCommandEvent& event ); |
|||
void Process_Config( wxCommandEvent& event ); |
|||
void Save_Config( wxWindow* displayframe ); |
|||
|
|||
void RedrawActiveWindow( wxDC* DC, bool EraseBg ); |
|||
|
|||
void CreateScreens(); |
|||
void ReCreateHToolbar(); |
|||
void ReCreateVToolbar(); |
|||
void ReCreateOptToolbar(); |
|||
void ReCreateMenuBar(); |
|||
void SetToolbars(); |
|||
void OnHotKey( wxDC* DC, |
|||
int hotkey, |
|||
EDA_BaseStruct* DrawStruct ); |
|||
|
|||
DrawSheetPath* GetSheet(); |
|||
virtual BASE_SCREEN* GetScreen(); |
|||
virtual void SetScreen( SCH_SCREEN* screen ); |
|||
virtual wxString GetScreenDesc(); |
|||
|
|||
void InstallConfigFrame( const wxPoint& pos ); |
|||
|
|||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); |
|||
void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); |
|||
bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); |
|||
void OnSelectOptionToolbar( wxCommandEvent& event ); |
|||
void ToolOnRightClick( wxCommandEvent& event ); |
|||
int BestZoom(); // Retourne le meilleur zoom |
|||
|
|||
SCH_ITEM* SchematicGeneralLocateAndDisplay( bool IncludePin = TRUE ); |
|||
SCH_ITEM* SchematicGeneralLocateAndDisplay( |
|||
const wxPoint& refpoint, |
|||
bool |
|||
IncludePin ); |
|||
|
|||
SCH_ITEM* FindComponentAndItem( const wxString& component_reference, |
|||
bool Find_in_hierarchy, |
|||
int SearchType, |
|||
const wxString& text_to_find, |
|||
bool mouseWarp ); |
|||
|
|||
/* Cross probing with pcbnew */ |
|||
void SendMessageToPCBNEW( EDA_BaseStruct * objectToSync, |
|||
SCH_COMPONENT* LibItem ); |
|||
|
|||
/* netlist generation */ |
|||
void* BuildNetListBase(); |
|||
|
|||
// FUnctions used for hierarchy handling |
|||
void InstallPreviousSheet(); |
|||
void InstallNextScreen( DrawSheetStruct* Sheet ); |
|||
|
|||
void ToPlot_PS( wxCommandEvent& event ); |
|||
void ToPlot_HPGL( wxCommandEvent& event ); |
|||
void ToPostProcess( wxCommandEvent& event ); |
|||
|
|||
void Save_File( wxCommandEvent& event ); |
|||
void SaveProject(); |
|||
int LoadOneEEProject( const wxString& FileName, bool IsNew ); |
|||
bool LoadOneEEFile( SCH_SCREEN* screen, const wxString& FullFileName ); |
|||
bool SaveEEFile( SCH_SCREEN* screen, int FileSave ); |
|||
SCH_SCREEN* CreateNewScreen( SCH_SCREEN* OldScreen, int TimeStamp ); |
|||
|
|||
// General search: |
|||
|
|||
/** |
|||
* Function FindSchematicItem |
|||
* finds a string in the schematic. |
|||
* @param pattern The text to search for, either in value, reference or |
|||
* elsewhere. |
|||
* @param SearchType: 0 => Search is made in current sheet |
|||
* 1 => the whole hierarchy |
|||
* 2 => or for the next item |
|||
* @param mouseWarp If true, then move the mouse cursor to the item. |
|||
*/ |
|||
SCH_ITEM* FindSchematicItem( const wxString& pattern, |
|||
int SearchType, |
|||
bool mouseWarp = true ); |
|||
|
|||
SCH_ITEM* FindMarker( int SearchType ); |
|||
|
|||
private: |
|||
void Process_Move_Item( SCH_ITEM* DrawStruct, wxDC* DC ); |
|||
void OnExit( wxCommandEvent& event ); |
|||
void OnAnnotate( wxCommandEvent& event ); |
|||
void OnErc( wxCommandEvent& event ); |
|||
void OnCreateNetlist( wxCommandEvent& event ); |
|||
void OnCreateBillOfMaterials( wxCommandEvent& event ); |
|||
void OnFindItems( wxCommandEvent& event ); |
|||
void OnLoadFile( wxCommandEvent& event ); |
|||
void OnNewProject( wxCommandEvent& event ); |
|||
void OnLoadProject( wxCommandEvent& event ); |
|||
void OnOpenPcbnew( wxCommandEvent& event ); |
|||
void OnOpenCvpcb( wxCommandEvent& event ); |
|||
void OnOpenLibraryViewer( wxCommandEvent& event ); |
|||
void OnOpenLibraryEditor( wxCommandEvent& event ); |
|||
|
|||
|
|||
// Bus Entry |
|||
DrawBusEntryStruct* CreateBusEntry( wxDC* DC, int entry_type ); |
|||
void SetBusEntryShape( wxDC* DC, |
|||
DrawBusEntryStruct* BusEntry, |
|||
int entry_type ); |
|||
int GetBusEntryShape( DrawBusEntryStruct* BusEntry ); |
|||
void StartMoveBusEntry( DrawBusEntryStruct* DrawLibItem, wxDC* DC ); |
|||
|
|||
// NoConnect |
|||
DrawNoConnectStruct* CreateNewNoConnectStruct( wxDC* DC ); |
|||
|
|||
// Junction |
|||
DrawJunctionStruct* CreateNewJunctionStruct( wxDC* DC, |
|||
const wxPoint& pos, |
|||
bool PutInUndoList = FALSE ); |
|||
|
|||
// Text ,label, glabel |
|||
EDA_BaseStruct* CreateNewText( wxDC* DC, int type ); |
|||
void EditSchematicText( SCH_TEXT* TextStruct, wxDC* DC ); |
|||
void ChangeTextOrient( SCH_TEXT* TextStruct, wxDC* DC ); |
|||
void StartMoveTexte( SCH_TEXT* TextStruct, wxDC* DC ); |
|||
void ConvertTextType( SCH_TEXT* Text, wxDC* DC, int newtype ); |
|||
|
|||
// Wire, Bus |
|||
void BeginSegment( wxDC* DC, int type ); |
|||
void EndSegment( wxDC* DC ); |
|||
void DeleteCurrentSegment( wxDC* DC ); |
|||
void DeleteConnection( wxDC* DC, bool DeleteFullConnection ); |
|||
|
|||
// graphic lines |
|||
void Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC ); |
|||
void Drawing_SetNewWidth( DRAWSEGMENT* DrawSegm, wxDC* DC ); |
|||
void Delete_Drawings_All_Layer( DRAWSEGMENT* Segment, wxDC* DC ); |
|||
DRAWSEGMENT* Begin_Edge( DRAWSEGMENT* Segment, wxDC* DC ); |
|||
|
|||
// Hierarchical Sheet & PinSheet |
|||
void InstallHierarchyFrame( wxDC* DC, wxPoint& pos ); |
|||
DrawSheetStruct* CreateSheet( wxDC* DC ); |
|||
void ReSizeSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
|
|||
public: |
|||
bool EditSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
|
|||
/** Function UpdateSheetNumberAndDate |
|||
* Set a sheet number, the sheet count for sheets in the whole schematic |
|||
* and update the date in all screens |
|||
*/ |
|||
void UpdateSheetNumberAndDate(); |
|||
|
|||
private: |
|||
void StartMoveSheet( DrawSheetStruct* sheet, wxDC* DC ); |
|||
DrawSheetLabelStruct* Create_PinSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
void Edit_PinSheet( DrawSheetLabelStruct* SheetLabel, wxDC* DC ); |
|||
void StartMove_PinSheet( DrawSheetLabelStruct* SheetLabel, wxDC* DC ); |
|||
void Place_PinSheet( DrawSheetLabelStruct* SheetLabel, wxDC* DC ); |
|||
DrawSheetLabelStruct* Import_PinSheet( DrawSheetStruct* Sheet, wxDC* DC ); |
|||
|
|||
public: |
|||
void DeleteSheetLabel( wxDC* DC, DrawSheetLabelStruct* SheetLabelToDel ); |
|||
|
|||
private: |
|||
|
|||
// Component |
|||
SCH_COMPONENT* Load_Component( wxDC* DC, |
|||
const wxString& libname, |
|||
wxArrayString& List, |
|||
bool UseLibBrowser ); |
|||
void StartMovePart( SCH_COMPONENT* DrawLibItem, wxDC* DC ); |
|||
|
|||
public: |
|||
void CmpRotationMiroir( SCH_COMPONENT* DrawComponent, |
|||
wxDC* DC, int type_rotate ); |
|||
|
|||
private: |
|||
void SelPartUnit( SCH_COMPONENT* DrawComponent, |
|||
int unit, wxDC* DC ); |
|||
void ConvertPart( SCH_COMPONENT* DrawComponent, wxDC* DC ); |
|||
void SetInitCmp( SCH_COMPONENT* DrawComponent, wxDC* DC ); |
|||
void EditComponentReference( SCH_COMPONENT* DrawLibItem, |
|||
wxDC* DC ); |
|||
void EditComponentValue( SCH_COMPONENT* DrawLibItem, wxDC* DC ); |
|||
void EditComponentFootprint( SCH_COMPONENT* DrawLibItem, |
|||
wxDC* DC ); |
|||
void StartMoveCmpField( PartTextStruct* Field, wxDC* DC ); |
|||
void EditCmpFieldText( PartTextStruct* Field, wxDC* DC ); |
|||
void RotateCmpField( PartTextStruct* Field, wxDC* DC ); |
|||
|
|||
/* Operations sur bloc */ |
|||
void PasteStruct( wxDC* DC ); |
|||
|
|||
/* Undo - redo */ |
|||
public: |
|||
void SaveCopyInUndoList( SCH_ITEM* ItemToCopy, |
|||
int flag_type_command = 0 ); |
|||
|
|||
private: |
|||
void PutDataInPreviousState( DrawPickedStruct* List ); |
|||
bool GetSchematicFromRedoList(); |
|||
bool GetSchematicFromUndoList(); |
|||
|
|||
|
|||
public: |
|||
void Key( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct ); |
|||
|
|||
/* Gestion generale des operations sur block */ |
|||
int ReturnBlockCommand( int key ); |
|||
void InitBlockPasteInfos(); |
|||
void HandleBlockPlace( wxDC* DC ); |
|||
int HandleBlockEnd( wxDC* DC ); |
|||
void HandleBlockEndByPopUp( int Command, wxDC* DC ); |
|||
|
|||
// Repetition automatique de placements |
|||
void RepeatDrawItem( wxDC* DC ); |
|||
|
|||
// Test des points de connexion en l'air (dangling ends) |
|||
void TestDanglingEnds( SCH_ITEM* DrawList, wxDC* DC ); |
|||
LibDrawPin* LocatePinEnd( SCH_ITEM* DrawList, const wxPoint& pos ); |
|||
|
|||
DECLARE_EVENT_TABLE() |
|||
}; |
|||
|
|||
|
|||
/*****************************/ |
|||
/* class WinEDA_LibeditFrame */ |
|||
/*****************************/ |
|||
|
|||
class WinEDA_LibeditFrame : public WinEDA_DrawFrame |
|||
{ |
|||
public: |
|||
WinEDAChoiceBox* m_SelpartBox; |
|||
WinEDAChoiceBox* m_SelAliasBox; |
|||
|
|||
public: |
|||
WinEDA_LibeditFrame( wxWindow* father, WinEDA_App* parent, |
|||
const wxString& title, |
|||
const wxPoint& pos, const wxSize& size, |
|||
long style = KICAD_DEFAULT_DRAWFRAME_STYLE ); |
|||
|
|||
~WinEDA_LibeditFrame(); |
|||
|
|||
void Process_Special_Functions( wxCommandEvent& event ); |
|||
void DisplayLibInfos(); |
|||
void RedrawActiveWindow( wxDC* DC, bool EraseBg ); |
|||
void OnCloseWindow( wxCloseEvent& Event ); |
|||
void ReCreateHToolbar(); |
|||
void ReCreateVToolbar(); |
|||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); |
|||
bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); |
|||
int BestZoom(); // Retourne le meilleur zoom |
|||
void SetToolbars(); |
|||
void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); |
|||
|
|||
virtual BASE_SCREEN* GetScreen() { return (BASE_SCREEN*) m_CurrentScreen; } |
|||
void OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct ); |
|||
|
|||
private: |
|||
|
|||
// General: |
|||
void CreateNewLibraryPart(); |
|||
void DeleteOnePart(); |
|||
void SaveOnePartInMemory(); |
|||
void SelectActiveLibrary(); |
|||
bool LoadOneLibraryPart(); |
|||
void SaveActiveLibrary(); |
|||
void ImportOnePart(); |
|||
void ExportOnePart( bool create_lib ); |
|||
int LoadOneLibraryPartAux( EDA_LibComponentStruct* LibEntry, |
|||
LibraryStruct* Library, int noMsg = 0 ); |
|||
|
|||
void DisplayCmpDoc( const wxString& Name ); |
|||
void InstallLibeditFrame( const wxPoint& pos ); |
|||
|
|||
// General editing |
|||
public: |
|||
void SaveCopyInUndoList( EDA_BaseStruct* ItemToCopy, int flag_type_command = 0 ); |
|||
|
|||
private: |
|||
bool GetComponentFromUndoList(); |
|||
bool GetComponentFromRedoList(); |
|||
|
|||
// Edition des Pins: |
|||
void CreatePin( wxDC* DC ); |
|||
void DeletePin( wxDC* DC, |
|||
EDA_LibComponentStruct* LibEntry, |
|||
LibDrawPin* Pin ); |
|||
void StartMovePin( wxDC* DC ); |
|||
|
|||
// Test des pins ( duplicates...) |
|||
bool TestPins( EDA_LibComponentStruct* LibEntry ); |
|||
|
|||
// Edition de l'ancre |
|||
void PlaceAncre(); |
|||
|
|||
// Edition des graphismes: |
|||
LibEDA_BaseStruct* CreateGraphicItem( wxDC* DC ); |
|||
void GraphicItemBeginDraw( wxDC* DC ); |
|||
void StartMoveDrawSymbol( wxDC* DC ); |
|||
void EndDrawGraphicItem( wxDC* DC ); |
|||
void LoadOneSymbol( wxDC* DC ); |
|||
void SaveOneSymbol(); |
|||
void EditGraphicSymbol( wxDC* DC, LibEDA_BaseStruct* DrawItem ); |
|||
void EditSymbolText( wxDC* DC, LibEDA_BaseStruct* DrawItem ); |
|||
void RotateSymbolText( wxDC* DC ); |
|||
void DeleteDrawPoly( wxDC* DC ); |
|||
LibDrawField* LocateField( EDA_LibComponentStruct* LibEntry ); |
|||
LibEDA_BaseStruct* LocateItemUsingCursor(); |
|||
void RotateField( wxDC* DC, LibDrawField* Field ); |
|||
void PlaceField( wxDC* DC, LibDrawField* Field ); |
|||
void EditField( wxDC* DC, LibDrawField* Field ); |
|||
void StartMoveField( wxDC* DC, LibDrawField* field ); |
|||
|
|||
public: |
|||
/* Block commands: */ |
|||
int ReturnBlockCommand( int key ); |
|||
void HandleBlockPlace( wxDC* DC ); |
|||
int HandleBlockEnd( wxDC* DC ); |
|||
|
|||
void DeletePartInLib( LibraryStruct* Library, EDA_LibComponentStruct* Entry ); |
|||
void PlacePin( wxDC* DC ); |
|||
void InitEditOnePin(); |
|||
void GlobalSetPins( wxDC* DC, LibDrawPin* MasterPin, int id ); |
|||
|
|||
// Repetition automatique de placement de pins |
|||
void RepeatPinItem( wxDC* DC, LibDrawPin* Pin ); |
|||
|
|||
DECLARE_EVENT_TABLE() |
|||
}; |
|||
|
|||
|
|||
class LibraryStruct; |
|||
class WinEDA_ViewlibFrame : public WinEDA_DrawFrame |
|||
{ |
|||
public: |
|||
WinEDAChoiceBox* SelpartBox; |
|||
|
|||
wxListBox* m_LibList; |
|||
wxSize m_LibListSize; |
|||
wxListBox* m_CmpList; |
|||
wxSize m_CmpListSize; |
|||
wxSemaphore* m_Semaphore; // != NULL if the frame must emulate a modal dialog |
|||
|
|||
public: |
|||
WinEDA_ViewlibFrame( wxWindow* father, WinEDA_App* parent, |
|||
LibraryStruct* Library = NULL, |
|||
wxSemaphore* semaphore = NULL ); |
|||
|
|||
~WinEDA_ViewlibFrame(); |
|||
|
|||
void OnSize( wxSizeEvent& event ); |
|||
void ReCreateListLib(); |
|||
void ReCreateListCmp(); |
|||
void Process_Special_Functions( wxCommandEvent& event ); |
|||
void DisplayLibInfos(); |
|||
void RedrawActiveWindow( wxDC* DC, bool EraseBg ); |
|||
void OnCloseWindow( wxCloseEvent& Event ); |
|||
void ReCreateHToolbar(); |
|||
void ReCreateVToolbar(); |
|||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); |
|||
int BestZoom(); // Retourne le meilleur zoom |
|||
void ClickOnLibList( wxCommandEvent& event ); |
|||
void ClickOnCmpList( wxCommandEvent& event ); |
|||
|
|||
virtual BASE_SCREEN* GetScreen() { return (BASE_SCREEN*) m_CurrentScreen; } |
|||
|
|||
private: |
|||
void SelectCurrentLibrary(); |
|||
void SelectAndViewLibraryPart( int option ); |
|||
void ExportToSchematicLibraryPart( wxCommandEvent& event ); |
|||
void ViewOneLibraryContent( LibraryStruct* Lib, int Flag ); |
|||
bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); |
|||
|
|||
DECLARE_EVENT_TABLE() |
|||
}; |
|||
|
|||
#endif // WX_EESCHEMA_STRUCT_H |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue