KiCad PCB EDA Suite
base_struct.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2013-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 2008-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
6  * Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
7  * Copyright (C) 2004-2017 KiCad Developers, see change_log.txt for contributors.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, you may find one here:
21  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22  * or you may search the http://www.gnu.org website for the version 2 license,
23  * or you may write to the Free Software Foundation, Inc.,
24  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25  */
26 
32 #ifndef BASE_STRUCT_H_
33 #define BASE_STRUCT_H_
34 
35 #include <core/typeinfo.h>
36 
37 #include <bitmap_types.h>
38 #include <view/view_item.h>
39 
40 #if defined(DEBUG)
41 #include <iostream> // needed for Show()
42 extern std::ostream& operator <<( std::ostream& out, const wxSize& size );
43 
44 extern std::ostream& operator <<( std::ostream& out, const wxPoint& pt );
45 #endif
46 
47 
63 extern const wxString traceFindReplace;
64 
65 
70 enum FILL_T {
71  NO_FILL, // Poly, Square, Circle, Arc = option No Fill
72  FILLED_SHAPE, /* Poly, Square, Circle, Arc = option Fill
73  * with current color ("Solid shape") */
74  FILLED_WITH_BG_BODYCOLOR /* Poly, Square, Circle, Arc = option Fill
75  * with background body color, translucent
76  * (texts inside this shape can be seen)
77  * not filled in B&W mode when plotting or
78  * printing */
79 };
80 
81 
85 };
86 
87 
88 class wxFindReplaceData;
89 class EDA_ITEM;
90 class EDA_DRAW_FRAME;
91 class EDA_RECT;
92 class DHEAD;
94 
95 
116 typedef std::function< SEARCH_RESULT ( EDA_ITEM* aItem, void* aTestData ) > INSPECTOR_FUNC;
117 
118 typedef const INSPECTOR_FUNC& INSPECTOR;
119 
120 
121 // These define are used for the .m_Flags and .m_UndoRedoStatus member of the
122 // class EDA_ITEM
123 #define IS_CHANGED (1 << 0)
124 #define IS_LINKED (1 << 1)
125 #define IN_EDIT (1 << 2)
126 #define IS_MOVED (1 << 3)
127 #define IS_NEW (1 << 4)
128 #define IS_RESIZED (1 << 5)
129 #define IS_DRAGGED (1 << 6)
130 #define IS_DELETED (1 << 7)
131 #define IS_WIRE_IMAGE (1 << 8)
132 #define STARTPOINT (1 << 9)
133 #define ENDPOINT (1 << 10)
134 #define SELECTED (1 << 11)
135 #define SELECTEDNODE (1 << 12)
136 #define STRUCT_DELETED (1 << 13)
137 #define CANDIDATE (1 << 14)
138 #define SKIP_STRUCT (1 << 15)
139 #define DO_NOT_DRAW (1 << 16)
140 #define IS_CANCELLED (1 << 17)
141 #define TRACK_LOCKED (1 << 18)
143 #define TRACK_AR (1 << 19)
144 #define FLAG1 (1 << 20)
145 #define FLAG0 (1 << 21)
146 #define BEGIN_ONPAD (1 << 22)
147 #define END_ONPAD (1 << 23)
148 #define BUSY (1 << 24)
149 #define HIGHLIGHTED (1 << 25)
151 #define BRIGHTENED (1 << 26)
152 
153 #define DP_COUPLED (1 << 27)
154 
156 #define EDA_ITEM_ALL_FLAGS -1
157 
158 typedef unsigned STATUS_FLAGS;
159 
166 {
167 private:
168 
176 
177 protected:
181 
183  time_t m_TimeStamp;
184 
187 
190 
191 private:
192 
193  void initVars();
194 
195 protected:
196 
197  EDA_ITEM( EDA_ITEM* parent, KICAD_T idType );
198  EDA_ITEM( KICAD_T idType );
199  EDA_ITEM( const EDA_ITEM& base );
200 
201 public:
202 
203  virtual ~EDA_ITEM() { };
204 
212  inline KICAD_T Type() const
213  {
214  return m_StructType;
215  }
216 
217  void SetTimeStamp( time_t aNewTimeStamp ) { m_TimeStamp = aNewTimeStamp; }
218  time_t GetTimeStamp() const { return m_TimeStamp; }
219 
220  EDA_ITEM* Next() const { return Pnext; }
221  EDA_ITEM* Back() const { return Pback; }
222  EDA_ITEM* GetParent() const { return m_Parent; }
223  DHEAD* GetList() const { return m_List; }
224 
225  void SetNext( EDA_ITEM* aNext ) { Pnext = aNext; }
226  void SetBack( EDA_ITEM* aBack ) { Pback = aBack; }
227  void SetParent( EDA_ITEM* aParent ) { m_Parent = aParent; }
228  void SetList( DHEAD* aList ) { m_List = aList; }
229 
230  inline bool IsNew() const { return m_Flags & IS_NEW; }
231  inline bool IsModified() const { return m_Flags & IS_CHANGED; }
232  inline bool IsMoving() const { return m_Flags & IS_MOVED; }
233  inline bool IsDragging() const { return m_Flags & IS_DRAGGED; }
234  inline bool IsWireImage() const { return m_Flags & IS_WIRE_IMAGE; }
235  inline bool IsSelected() const { return m_Flags & SELECTED; }
236  inline bool IsResized() const { return m_Flags & IS_RESIZED; }
237  inline bool IsHighlighted() const { return m_Flags & HIGHLIGHTED; }
238  inline bool IsBrightened() const { return m_Flags & BRIGHTENED; }
239 
240  inline void SetWireImage() { SetFlags( IS_WIRE_IMAGE ); }
241  inline void SetSelected() { SetFlags( SELECTED ); }
242  inline void SetHighlighted() { SetFlags( HIGHLIGHTED ); }
243  inline void SetBrightened() { SetFlags( BRIGHTENED ); }
244 
245  inline void ClearSelected() { ClearFlags( SELECTED ); }
247  inline void ClearBrightened() { ClearFlags( BRIGHTENED ); }
248 
249  void SetModified();
250 
251  int GetState( int type ) const
252  {
253  return m_Status & type;
254  }
255 
256  void SetState( int type, int state )
257  {
258  if( state )
259  m_Status |= type; // state = ON or OFF
260  else
261  m_Status &= ~type;
262  }
263 
264  STATUS_FLAGS GetStatus() const { return m_Status; }
265  void SetStatus( STATUS_FLAGS aStatus ) { m_Status = aStatus; }
266 
267  void SetFlags( STATUS_FLAGS aMask ) { m_Flags |= aMask; }
268  void ClearFlags( STATUS_FLAGS aMask = EDA_ITEM_ALL_FLAGS ) { m_Flags &= ~aMask; }
269  STATUS_FLAGS GetFlags() const { return m_Flags; }
270 
279  void SetForceVisible( bool aEnable ) { m_forceVisible = aEnable; }
280 
291  virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
292  {
293  }
294 
302  virtual bool HitTest( const wxPoint& aPosition ) const
303  {
304  return false; // derived classes should override this function
305  }
306 
307 
317  virtual const EDA_RECT GetBoundingBox() const;
318 
332  virtual EDA_ITEM* Clone() const; // should not be inline, to save the ~ 6 bytes per call site.
333 
351  static SEARCH_RESULT IterateForward( EDA_ITEM* listStart,
352  INSPECTOR inspector,
353  void* testData,
354  const KICAD_T scanTypes[] );
355 
370  virtual SEARCH_RESULT Visit( INSPECTOR inspector, void* testData, const KICAD_T scanTypes[] );
371 
377  virtual wxString GetClass() const = 0;
378 
388  virtual wxString GetSelectMenuText() const;
389 
397  virtual BITMAP_DEF GetMenuImage() const;
398 
414  virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation )
415  {
416  return false;
417  }
418 
431  bool Replace( wxFindReplaceData& aSearchData, wxString& aText );
432 
446  virtual bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL ) { return false; }
447 
458  virtual bool IsReplaceable() const { return false; }
459 
466  bool operator<( const EDA_ITEM& aItem ) const;
467 
477  static bool Sort( const EDA_ITEM* aLeft, const EDA_ITEM* aRight ) { return *aLeft < *aRight; }
478 
483  EDA_ITEM& operator=( const EDA_ITEM& aItem );
484 
485  virtual const BOX2I ViewBBox() const override;
486 
487  virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
488 
489 #if defined(DEBUG)
490 
498  virtual void Show( int nestLevel, std::ostream& os ) const = 0;
499  // pure virtual so compiler warns if somebody mucks up a derived declaration
500 
501  void ShowDummy( std::ostream& os ) const;
502 
510  static std::ostream& NestedSpace( int nestLevel, std::ostream& os );
511 
512 #endif
513 
514 protected:
524  bool Matches( const wxString& aText, wxFindReplaceData& aSearchData );
525 };
526 
527 
535 inline EDA_ITEM* new_clone( const EDA_ITEM& aItem ) { return aItem.Clone(); }
536 
537 
544 typedef std::vector< EDA_ITEM* > EDA_ITEMS;
545 
546 
547 #endif // BASE_STRUCT_H_
DHEAD * GetList() const
Definition: base_struct.h:223
KICAD_T Type() const
Function Type()
Definition: base_struct.h:212
virtual bool IsReplaceable() const
Function IsReplaceable.
Definition: base_struct.h:458
void SetModified()
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
Function Visit may be re-implemented for each derived class in order to handle all the types given by...
STATUS_FLAGS GetFlags() const
Definition: base_struct.h:269
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
static SEARCH_RESULT IterateForward(EDA_ITEM *listStart, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
Function IterateForward walks through the object tree calling the inspector() on each object type req...
EDA_ITEM * Pback
previous in linked list
Definition: base_struct.h:179
bool IsMoving() const
Definition: base_struct.h:232
EDA_ITEM * m_Parent
Linked list: Link (parent struct)
Definition: base_struct.h:182
bool IsResized() const
Definition: base_struct.h:236
std::function< SEARCH_RESULT(EDA_ITEM *aItem, void *aTestData) > INSPECTOR_FUNC
Typedef INSPECTOR is used to inspect and possibly collect the (search) results of iterating over a li...
Definition: base_struct.h:93
PNG memory record (file in memory).
Definition: bitmap_types.h:38
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:226
bool IsBrightened() const
Definition: base_struct.h:238
bool operator<(const EDA_ITEM &aItem) const
Test if another item is less than this object.
Class DHEAD is only for use by template class DLIST, use that instead.
Definition: dlist.h:40
KICAD_T m_StructType
Run time identification, keep private so it can never be changed after a constructor sets it...
Definition: base_struct.h:174
bool IsNew() const
Definition: base_struct.h:230
bool Replace(wxFindReplaceData &aSearchData, wxString &aText)
Helper function used in search and replace dialog Function Replace performs a text replace on aText u...
void ClearSelected()
Definition: base_struct.h:245
virtual EDA_ITEM * Clone() const
Function Clone creates a duplicate of this item with linked list members set to NULL.
time_t m_TimeStamp
Time stamp used for logical links.
Definition: base_struct.h:183
EDA_ITEM * Back() const
Definition: base_struct.h:221
virtual bool Matches(wxFindReplaceData &aSearchData, void *aAuxData, wxPoint *aFindLocation)
Function Matches compares the item against the search criteria in aSearchData.
Definition: base_struct.h:414
bool IsModified() const
Definition: base_struct.h:231
void SetBrightened()
Definition: base_struct.h:243
bool IsSelected() const
Definition: base_struct.h:235
EDA_ITEM * GetParent() const
Definition: base_struct.h:222
virtual ~EDA_ITEM()
Definition: base_struct.h:203
bool IsHighlighted() const
Definition: base_struct.h:237
void SetList(DHEAD *aList)
Definition: base_struct.h:228
const wxString traceFindReplace
Flag to enable find and replace debug tracing.
Definition: base_struct.cpp:58
EDA_ITEM * Next() const
Definition: base_struct.h:220
Class VIEW_ITEM - is an abstract base class for deriving all objects that can be added to a VIEW...
Definition: view_item.h:83
STATUS_FLAGS GetStatus() const
Definition: base_struct.h:264
Class EDA_DRAW_FRAME is the base class for create windows for drawing purpose.
Definition: draw_frame.h:54
int GetState(int type) const
Definition: base_struct.h:251
#define EDA_ITEM_ALL_FLAGS
Definition: base_struct.h:156
virtual wxString GetSelectMenuText() const
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:90
void SetTimeStamp(time_t aNewTimeStamp)
Definition: base_struct.h:217
void ClearBrightened()
Definition: base_struct.h:247
#define IS_NEW
New item, just created.
Definition: base_struct.h:127
const INSPECTOR_FUNC & INSPECTOR
Definition: base_struct.h:118
#define IS_DRAGGED
Item being dragged.
Definition: base_struct.h:129
#define SELECTED
Definition: base_struct.h:134
#define IS_CHANGED
std::function passed to nested users by ref, avoids copying std::function
Definition: base_struct.h:123
VIEW_ITEM class definition.
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:267
void ClearHighlighted()
Definition: base_struct.h:246
void SetSelected()
Definition: base_struct.h:241
void SetParent(EDA_ITEM *aParent)
Definition: base_struct.h:227
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on...
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: base_struct.h:544
STATUS_FLAGS m_Status
Definition: base_struct.h:175
void SetForceVisible(bool aEnable)
Function SetForceVisible is used to set and cleag force visible flag used to force the item to be dra...
Definition: base_struct.h:279
void SetWireImage()
Definition: base_struct.h:240
EDA_ITEM * new_clone(const EDA_ITEM &aItem)
Function new_clone provides cloning capabilities for all Boost pointer containers of EDA_ITEM pointer...
Definition: base_struct.h:535
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:151
unsigned STATUS_FLAGS
Definition: base_struct.h:158
virtual bool HitTest(const wxPoint &aPosition) const
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
Definition: base_struct.h:302
static bool Sort(const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
Function Sort is a helper function to be used by the C++ STL sort algorithm for sorting a STL contain...
Definition: base_struct.h:477
virtual void GetMsgPanelInfo(std::vector< MSG_PANEL_ITEM > &aList)
Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for displ...
Definition: base_struct.h:291
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
Definition: base_struct.h:131
EDA_ITEM & operator=(const EDA_ITEM &aItem)
Operator assignment is used to assign the members of aItem to another object.
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType)
Definition: base_struct.cpp:66
time_t GetTimeStamp() const
Definition: base_struct.h:218
void SetHighlighted()
Definition: base_struct.h:242
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:225
virtual wxString GetClass() const =0
Function GetClass returns the class name.
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:150
void SetState(int type, int state)
Definition: base_struct.h:256
virtual bool Replace(wxFindReplaceData &aSearchData, void *aAuxData=NULL)
Function Replace performs a text replace using the find and replace criteria in aSearchData on items ...
Definition: base_struct.h:446
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:189
Class EDA_RECT handles the component boundary box.
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:165
#define IS_RESIZED
Item being resized.
Definition: base_struct.h:128
void SetStatus(STATUS_FLAGS aStatus)
Definition: base_struct.h:265
FILL_T
Enum FILL_T is the set of fill types used in plotting or drawing enclosed areas.
Definition: base_struct.h:70
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:268
bool IsWireImage() const
Definition: base_struct.h:234
Class EDA_MSG_ITEM is used EDA_MSG_PANEL as the item type for displaying messages.
Definition: msgpanel.h:53
SEARCH_RESULT
Definition: base_struct.h:82
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers. ...
bool m_forceVisible
Set to true to override the visibility setting of the item.
Definition: base_struct.h:186
void initVars()
Definition: base_struct.cpp:88
DHEAD * m_List
which DLIST I am on.
Definition: base_struct.h:180
EDA_ITEM * Pnext
next in linked list
Definition: base_struct.h:178
virtual BITMAP_DEF GetMenuImage() const
Function GetMenuImage returns a pointer to an image to be used in menus.
wxString & operator<<(wxString &aString, const wxPoint &aPos)
Operator << overload outputs a point to the argument string in a format resembling "@ (x...
Definition: base_units.cpp:395
bool IsDragging() const
Definition: base_struct.h:233
#define IS_MOVED
Item being moved.
Definition: base_struct.h:126