kicad/eeschema/protos.h

317 lines
8.9 KiB
C++

#ifndef __PROTOS_H__
#define __PROTOS_H__
#include "block_commande.h"
#include "colors.h"
#include "sch_sheet_path.h"
#include <wx/wx.h>
class EDA_BaseStruct;
class WinEDA_DrawPanel;
class WinEDA_DrawFrame;
class WinEDA_SchematicFrame;
class LIB_EDIT_FRAME;
class CMP_LIBRARY;
class LIB_COMPONENT;
class LIB_DRAW_ITEM;
class SCH_COMPONENT;
class BASE_SCREEN;
class SCH_SCREEN;
class SCH_ITEM;
class SCH_SHEET_PIN;
class PLOTTER;
class SCH_SHEET;
class LIB_PIN;
class LABEL_OBJECT;
class OBJ_CMP_TO_LIST;
wxString ReturnDefaultFieldName( int aFieldNdx );
/****************/
/* DATABASE.CPP */
/****************/
void DisplayCmpDoc( wxString& Name );
wxString DataBaseGetName( WinEDA_DrawFrame* frame, wxString& Keys, wxString& BufName );
/*********************/
/* DANGLING_ENDS.CPP */
/*********************/
bool SegmentIntersect( wxPoint aSegStart, wxPoint aSegEnd, wxPoint aTestPoint );
/****************/
/* BUS_WIRE_JUNCTION.CPP */
/****************/
void IncrementLabelMember( wxString& name );
/****************/
/* EDITPART.CPP */
/****************/
void InstallCmpeditFrame( WinEDA_SchematicFrame* parent, wxPoint& pos, SCH_COMPONENT* m_Cmp );
void SnapLibItemPoint( int OrigX,
int OrigY,
int* ClosestX,
int* ClosestY,
SCH_COMPONENT* DrawLibItem );
bool LibItemInBox( int x1, int y1, int x2, int y2, SCH_COMPONENT* DrawLibItem );
/************/
/* BLOCK.CPP */
/************/
void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM* DrawStruct );
// build_BOM.cpp
/**
* Class LABEL_OBJECT
* is used in build BOM to handle the list of labels in schematic
* because in a complex hierarchy, a label is used more than once,
* and had more than one sheet path, so we must create a flat list of labels
*/
class LABEL_OBJECT
{
public:
int m_LabelType;
SCH_ITEM* m_Label;
//have to store it here since the object references will be duplicated.
SCH_SHEET_PATH m_SheetPath; //composed of UIDs
public: LABEL_OBJECT()
{
m_Label = NULL;
m_LabelType = 0;
}
};
void BuildComponentsListFromSchematic( std::vector <OBJ_CMP_TO_LIST>& aList );
void GenListeGLabels( std::vector <LABEL_OBJECT>& aList );
bool SortComponentsByReference( const OBJ_CMP_TO_LIST& obj1, const OBJ_CMP_TO_LIST& obj2 );
bool SortComponentsByValue( const OBJ_CMP_TO_LIST& obj1, const OBJ_CMP_TO_LIST& obj2 );
bool SortLabelsByValue( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 );
bool SortLabelsBySheet( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 );
void DeleteSubCmp( std::vector <OBJ_CMP_TO_LIST>& aList );
int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList );
// operations_on_item_lists.cpp
/**
* Function DuplicateStruct
* Routine to create a new copy of given struct.
* @param aDrawStruct = the SCH_ITEM to duplicate
* @param aClone (defualt = true)
* if true duplicate also some parameters that must be unique
* (timestamp and sheet name)
* aClone must be false. use true only is undo/redo duplications
*/
SCH_ITEM* DuplicateStruct( SCH_ITEM* DrawStruct, bool aClone = false );
/*************/
/* LOCATE.CPP */
/*************/
SCH_COMPONENT* LocateSmallestComponent( SCH_SCREEN* Screen );
/* Find the item within block selection. */
int PickItemsInBlock( BLOCK_SELECTOR& aBlock, BASE_SCREEN* screen );
/* function PickStruct:
* Search at location pos
*
* SearchMask = (bitwise OR):
* LIBITEM
* WIREITEM
* BUSITEM
* RACCORDITEM
* JUNCTIONITEM
* DRAWITEM
* TEXTITEM
* LABELITEM
* SHEETITEM
* MARKERITEM
* NOCONNECTITEM
* SEARCH_PINITEM
* SHEETLABELITEM
* FIELDCMPITEM
*
* if EXCLUDE_WIRE_BUS_ENDPOINTS is set, in wire ou bus search and locate,
* start and end points are not included in search
* if WIRE_BUS_ENDPOINTS_ONLY is set, in wire ou bus search and locate,
* only start and end points are included in search
*
*
* Return:
* Pointer to list of pointers to structures if several items are selected.
* Pointer to the structure if only 1 item is selected.
* NULL if no items are selects.
*/
SCH_ITEM* PickStruct( const wxPoint& refpos, BASE_SCREEN* screen, int SearchMask );
SCH_SHEET_PIN* LocateSheetLabel( SCH_SHEET* Sheet, const wxPoint& pos );
LIB_PIN* LocateAnyPin( SCH_ITEM* DrawList,
const wxPoint& RefPos,
SCH_COMPONENT** libpart = NULL );
SCH_SHEET_PIN* LocateAnyPinSheet( const wxPoint& RefPos, SCH_ITEM* DrawList );
/***************/
/* EEREDRAW.CPP */
/***************/
void DrawDanglingSymbol( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& pos, int Color );
void DrawStructsInGhost( WinEDA_DrawPanel* aPanel,
wxDC* aDC,
SCH_ITEM* aItem,
const wxPoint& aOffset );
void SetHighLightStruct( SCH_ITEM* HighLight );
void RedrawActiveWindow( WinEDA_DrawPanel* panel, wxDC* DC );
void RedrawStructList( WinEDA_DrawPanel* panel,
wxDC* DC,
SCH_ITEM* Structs,
int DrawMode,
int Color = -1 );
void RedrawOneStruct( WinEDA_DrawPanel* panel,
wxDC* DC,
SCH_ITEM* Struct,
int DrawMode,
int Color = -1 );
/**************/
/* EELAYER.CPP */
/**************/
void SeedLayers();
EDA_Colors ReturnLayerColor( int Layer );
/**************/
/* NETLIST.CPP */
/**************/
int IsBusLabel( const wxString& LabelDrawList );
/***************/
/* ANNOTATE.CPP */
/***************/
void ReAnnotatePowerSymbolsOnly();
/************/
/* PLOT.CPP */
/************/
void PlotDrawlist( PLOTTER* plotter, SCH_ITEM* drawlist );
/***************/
/* DELSHEET.CPP */
/***************/
void DeleteSubHierarchy( SCH_SHEET* Sheet, bool confirm_deletion );
bool ClearProjectDrawList( SCH_SCREEN* FirstWindow, bool confirm_deletion );
/* free the draw list screen->EEDrawList and the subhierarchies
* clear the screen datas (filenames ..)
*/
/*************/
/* DELETE.CPP */
/*************/
bool LocateAndDeleteItem( WinEDA_SchematicFrame* frame, wxDC* DC );
void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Window );
void DeleteAllMarkers( int type );
/**************/
/* PINEDIT.CPP */
/**************/
void InstallPineditFrame( LIB_EDIT_FRAME* parent, wxDC* DC, const wxPoint& pos );
/**************/
/* SELPART.CPP */
/**************/
/**
* Function DisplayComponentsNamesInLib
* Select component from list of components in this library
*
* If == NULL Library, selection of library REQUESTED
* If only in research library
*
* Returns
* 1 if selected component
* 0 if canceled order
*/
int DisplayComponentsNamesInLib( WinEDA_DrawFrame* frame,
CMP_LIBRARY* Library,
wxString& Buffer,
wxString& OldName );
/**
* Function SelectLibraryFromList
* displays a list of current loaded libraries, and allows the user to select
* a library
* This list is sorted, with the library cache always at end of the list
*/
CMP_LIBRARY* SelectLibraryFromList( WinEDA_DrawFrame* frame );
/**
* Get the name component from a library to load.
*
* If no library specified, there will be demand for selection of a library.
* Returns
* 1 if selected component
* 0 if canceled order
* Place the name of the selected component list in BufName
*/
int GetNameOfPartToLoad( WinEDA_DrawFrame* frame,
CMP_LIBRARY* Lib,
wxString& BufName );
/**************/
/* LIBARCH.CPP */
/**************/
bool LibArchive( wxWindow* frame, const wxString& ArchFullFileName );
/**************/
/* CLEANUP.CPP */
/**************/
void SchematicCleanUp( SCH_SCREEN* screen, wxDC* DC );
/* Routine de nettoyage:
* - regroupe les segments de fils (ou de bus) alignes en 1 seul segment
* - Detecte les objets identiques superposes
*/
void BreakSegmentOnJunction( SCH_SCREEN* Screen );
/* Break a segment ( BUS, WIRE ) int 2 segments at location aBreakpoint,
* if aBreakpoint in on segment segment
* ( excluding ends)
*/
void BreakSegment(SCH_SCREEN * aScreen, wxPoint aBreakpoint );
/**************/
/* EECLASS.CPP */
/**************/
void SetaParent( EDA_BaseStruct* Struct, BASE_SCREEN* Screen );
/***************/
/* OPTIONS.CPP */
/***************/
void DisplayOptionFrame( WinEDA_SchematicFrame* parent, const wxPoint& framepos );
/****************/
/* CONTROLE.CPP */
/****************/
void RemoteCommand( const char* cmdline );
#endif /* __PROTOS_H__ */