KiCad PCB EDA Suite
Loading...
Searching...
No Matches
rc_item.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 The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#ifndef RC_ITEM_H
25#define RC_ITEM_H
26
27#include <memory>
28#include <vector>
29
30#include <wx/dataview.h>
31#include <units_provider.h>
32#include <kiid.h>
33#include <reporter.h>
34#include <math/vector2d.h>
35
36class MARKER_BASE;
37class EDA_BASE_FRAME;
38class RC_ITEM;
39class EDA_ITEM;
40class EDA_DRAW_FRAME;
41
42namespace RC_JSON
43{
44struct VIOLATION;
45}
46
55{
56public:
57 virtual void SetSeverities( int aSeverities ) = 0;
58
59 virtual int GetSeverities() const = 0;
60
61 virtual int GetCount( int aSeverity = -1 ) const = 0;
62
66 virtual std::shared_ptr<RC_ITEM> GetItem( int aIndex ) const = 0;
67
72 virtual void DeleteItem( int aIndex, bool aDeep ) = 0;
73
74 virtual ~RC_ITEMS_PROVIDER() { }
75};
76
77
84{
85public:
86 typedef std::vector<KIID> KIIDS;
87
89 m_errorCode( 0 ),
90 m_parent( nullptr )
91 {
92 }
93
94 RC_ITEM( const std::shared_ptr<RC_ITEM>& aItem )
95 {
96 m_errorCode = aItem->m_errorCode;
97 m_errorMessage = aItem->m_errorMessage;
98 m_errorTitle = aItem->m_errorTitle;
99 m_settingsKey = aItem->m_settingsKey;
100 m_parent = aItem->m_parent;
101 m_ids = aItem->m_ids;
102 }
103
104 virtual ~RC_ITEM() { }
105
106 void SetErrorMessage( const wxString& aMessage ) { m_errorMessage = aMessage; }
107
108 void SetErrorDetail( const wxString& aMsg ) { SetErrorMessage( GetErrorText( true ) + wxS( " " ) + aMsg ); }
109
110 void SetItems( const KIIDS& aIds ) { m_ids = aIds; }
111
112 void AddItem( EDA_ITEM* aItem );
113
114 void SetItems( const EDA_ITEM* aItem, const EDA_ITEM* bItem = nullptr,
115 const EDA_ITEM* cItem = nullptr, const EDA_ITEM* dItem = nullptr );
116
117 void SetItems( const KIID& aItem, const KIID& bItem = niluuid, const KIID& cItem = niluuid,
118 const KIID& dItem = niluuid )
119 {
120 m_ids.clear();
121
122 m_ids.push_back( aItem );
123 m_ids.push_back( bItem );
124 m_ids.push_back( cItem );
125 m_ids.push_back( dItem );
126 }
127
128 virtual KIID GetMainItemID() const { return m_ids.size() > 0 ? m_ids[0] : niluuid; }
129 virtual KIID GetAuxItemID() const { return m_ids.size() > 1 ? m_ids[1] : niluuid; }
130 virtual KIID GetAuxItem2ID() const { return m_ids.size() > 2 ? m_ids[2] : niluuid; }
131 virtual KIID GetAuxItem3ID() const { return m_ids.size() > 3 ? m_ids[3] : niluuid; }
132
133 std::vector<KIID> GetIDs() const { return m_ids; }
134
135 void SetParent( MARKER_BASE* aMarker ) { m_parent = aMarker; }
136 MARKER_BASE* GetParent() const { return m_parent; }
137
138
144 virtual wxString ShowReport( UNITS_PROVIDER* aUnitsProvider, SEVERITY aSeverity,
145 const std::map<KIID, EDA_ITEM*>& aItemMap ) const;
146
157 virtual void GetJsonViolation( RC_JSON::VIOLATION& aViolation, UNITS_PROVIDER* aUnitsProvider,
158 SEVERITY aSeverity,
159 const std::map<KIID, EDA_ITEM*>& aItemMap ) const;
160
161 int GetErrorCode() const { return m_errorCode; }
162 void SetErrorCode( int aCode ) { m_errorCode = aCode; }
163
168 virtual wxString GetErrorMessage( bool aTranslate ) const;
169
174 wxString GetErrorText( bool aTranslate ) const
175 {
176 if( aTranslate )
177 return wxGetTranslation( m_errorTitle );
178 else
179 return m_errorTitle;
180 }
181
182 wxString GetSettingsKey() const
183 {
184 return m_settingsKey;
185 }
186
187 virtual wxString GetViolatingRuleDesc( bool aTranslate ) const
188 {
189 return wxEmptyString;
190 }
191
192protected:
193 static wxString getSeverityString( SEVERITY aSeverity );
194
196 wxString m_errorMessage;
197 wxString m_errorTitle;
198 wxString m_settingsKey;
200
202
203};
204
205
207{
208public:
218
219 RC_TREE_NODE( RC_TREE_NODE* aParent, const std::shared_ptr<RC_ITEM>& aRcItem,
220 NODE_TYPE aType ) :
221 m_Type( aType ),
222 m_RcItem( aRcItem ),
223 m_Parent( aParent )
224 {}
225
227 {
228 for( RC_TREE_NODE* child : m_Children )
229 delete child;
230 }
231
232 // We own at least one list of raw pointers. Don't let the compiler fill in copy c'tors that
233 // will only land us in trouble.
234 RC_TREE_NODE( const RC_TREE_NODE& ) = delete;
236
238 std::shared_ptr<RC_ITEM> m_RcItem;
239
240 struct HANDLE
241 {
243 };
244
245 HANDLE* m_Handle = nullptr;
247 std::vector<RC_TREE_NODE*> m_Children;
248};
249
250
251class RC_TREE_MODEL : public wxDataViewModel, public wxEvtHandler
252{
253public:
254 static wxDataViewItem ToItem( RC_TREE_NODE const* aNode )
255 {
256 return aNode && aNode->m_Handle ? wxDataViewItem( aNode->m_Handle ) : wxDataViewItem();
257 }
258
259 static RC_TREE_NODE* ToNode( wxDataViewItem aItem )
260 {
261 auto* handle = static_cast<RC_TREE_NODE::HANDLE*>( aItem.GetID() );
262 return handle ? handle->m_Node : nullptr;
263 }
264
265 const wxDataViewCtrl* GetView() const { return m_view; }
266
267 static KIID ToUUID( wxDataViewItem aItem );
268
269 RC_TREE_MODEL( EDA_DRAW_FRAME* aParentFrame, wxDataViewCtrl* aView );
270
272
273 // We own at least one list of raw pointers. Don't let the compiler fill in copy c'tors that
274 // will only land us in trouble.
275 RC_TREE_MODEL( const RC_TREE_MODEL& ) = delete;
277
278 void Update( std::shared_ptr<RC_ITEMS_PROVIDER> aProvider, int aSeverities );
279
280 void ExpandAll();
281
282 void PrevMarker();
283 void NextMarker();
284 void SelectMarker( const MARKER_BASE* aMarker );
285 void CenterMarker( const MARKER_BASE* aMarker );
286
287 bool IsContainer( wxDataViewItem const& aItem ) const override;
288
289 wxDataViewItem GetParent( wxDataViewItem const& aItem ) const override;
290
291 unsigned int GetChildren( wxDataViewItem const& aItem,
292 wxDataViewItemArray& aChildren ) const override;
293
294 // Simple, single-text-column model
295 unsigned int GetColumnCount() const override { return 1; }
296 wxString GetColumnType( unsigned int aCol ) const override { return "string"; }
297 bool HasContainerColumns( wxDataViewItem const& aItem ) const override { return true; }
298
299 bool HasValue( const wxDataViewItem& item, unsigned col ) const override
300 {
301 if( m_tree.empty() )
302 return false;
303 else
304 return wxDataViewModel::HasValue( item, col );
305 }
306
310 void GetValue( wxVariant& aVariant, wxDataViewItem const& aItem,
311 unsigned int aCol ) const override;
312
316 bool SetValue( wxVariant const& aVariant, wxDataViewItem const& aItem,
317 unsigned int aCol ) override
318 {
319 // Editing not supported
320 return false;
321 }
322
327 bool GetAttr( wxDataViewItem const& aItem, unsigned int aCol,
328 wxDataViewItemAttr& aAttr ) const override;
329
330 void ValueChanged( RC_TREE_NODE* aNode );
331
332 void DeleteCurrentItem( bool aDeep );
333
339 void DeleteItems( bool aCurrentOnly, bool aIncludeExclusions, bool aDeep );
340
341protected:
342 RC_TREE_NODE* createNode( RC_TREE_NODE* aParent, const std::shared_ptr<RC_ITEM>& aRcItem,
344 void retireNodeTree( RC_TREE_NODE* aNode );
345 void deleteNodeTree( RC_TREE_NODE* aNode );
346 void rebuildModel( std::shared_ptr<RC_ITEMS_PROVIDER> aProvider, int aSeverities );
347
349 wxDataViewCtrl* m_view;
351 std::shared_ptr<RC_ITEMS_PROVIDER> m_rcItemsProvider;
352
353 std::vector<std::unique_ptr<RC_TREE_NODE::HANDLE>> m_handles; // Stable wx item IDs
354 std::vector<RC_TREE_NODE*> m_tree; // I own this
355};
356
357#endif // RC_ITEM_H
The base frame for deriving all KiCad main window classes.
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:100
Definition kiid.h:48
Marker are mainly used to show a DRC or ERC error or warning.
Definition marker_base.h:49
Provide an abstract interface of a RC_ITEM* list manager.
Definition rc_item.h:55
virtual int GetSeverities() const =0
virtual void SetSeverities(int aSeverities)=0
virtual void DeleteItem(int aIndex, bool aDeep)=0
Remove (and optionally deletes) the indexed item from the list.
virtual ~RC_ITEMS_PROVIDER()
Definition rc_item.h:74
virtual int GetCount(int aSeverity=-1) const =0
virtual std::shared_ptr< RC_ITEM > GetItem(int aIndex) const =0
Retrieve a RC_ITEM by index.
A holder for a rule check item, DRC in Pcbnew or ERC in Eeschema.
Definition rc_item.h:84
wxString m_settingsKey
The key used to describe this type of error in settings.
Definition rc_item.h:198
void SetItems(const KIID &aItem, const KIID &bItem=niluuid, const KIID &cItem=niluuid, const KIID &dItem=niluuid)
Definition rc_item.h:117
int GetErrorCode() const
Definition rc_item.h:161
int m_errorCode
The error code's numeric value.
Definition rc_item.h:195
virtual ~RC_ITEM()
Definition rc_item.h:104
wxString GetErrorText(bool aTranslate) const
Definition rc_item.h:174
virtual void GetJsonViolation(RC_JSON::VIOLATION &aViolation, UNITS_PROVIDER *aUnitsProvider, SEVERITY aSeverity, const std::map< KIID, EDA_ITEM * > &aItemMap) const
Translate this object into an RC_JSON::VIOLATION object.
Definition rc_item.cpp:166
static wxString getSeverityString(SEVERITY aSeverity)
Definition rc_item.cpp:81
virtual wxString GetViolatingRuleDesc(bool aTranslate) const
Definition rc_item.h:187
MARKER_BASE * GetParent() const
Definition rc_item.h:136
std::vector< KIID > KIIDS
Definition rc_item.h:86
void AddItem(EDA_ITEM *aItem)
Definition rc_item.cpp:56
MARKER_BASE * m_parent
The marker this item belongs to, if any.
Definition rc_item.h:199
KIIDS m_ids
Definition rc_item.h:201
virtual KIID GetAuxItem3ID() const
Definition rc_item.h:131
void SetErrorMessage(const wxString &aMessage)
Definition rc_item.h:106
virtual KIID GetAuxItem2ID() const
Definition rc_item.h:130
virtual KIID GetMainItemID() const
Definition rc_item.h:128
virtual KIID GetAuxItemID() const
Definition rc_item.h:129
virtual wxString ShowReport(UNITS_PROVIDER *aUnitsProvider, SEVERITY aSeverity, const std::map< KIID, EDA_ITEM * > &aItemMap) const
Translate this object into a text string suitable for saving to disk in a report.
Definition rc_item.cpp:100
wxString m_errorMessage
A message describing the details of this specific error.
Definition rc_item.h:196
void SetParent(MARKER_BASE *aMarker)
Definition rc_item.h:135
RC_ITEM(const std::shared_ptr< RC_ITEM > &aItem)
Definition rc_item.h:94
void SetErrorCode(int aCode)
Definition rc_item.h:162
void SetErrorDetail(const wxString &aMsg)
Definition rc_item.h:108
wxString GetSettingsKey() const
Definition rc_item.h:182
std::vector< KIID > GetIDs() const
Definition rc_item.h:133
wxString m_errorTitle
The string describing the type of error.
Definition rc_item.h:197
RC_ITEM()
Definition rc_item.h:88
virtual wxString GetErrorMessage(bool aTranslate) const
Definition rc_item.cpp:39
void SetItems(const KIIDS &aIds)
Definition rc_item.h:110
void ExpandAll()
Definition rc_item.cpp:419
wxString GetColumnType(unsigned int aCol) const override
Definition rc_item.h:296
void PrevMarker()
Definition rc_item.cpp:758
int m_severities
Definition rc_item.h:350
void GetValue(wxVariant &aVariant, wxDataViewItem const &aItem, unsigned int aCol) const override
Called by the wxDataView to fetch an item's value.
Definition rc_item.cpp:463
std::vector< RC_TREE_NODE * > m_tree
Definition rc_item.h:354
unsigned int GetChildren(wxDataViewItem const &aItem, wxDataViewItemArray &aChildren) const override
Definition rc_item.cpp:447
std::vector< std::unique_ptr< RC_TREE_NODE::HANDLE > > m_handles
Definition rc_item.h:353
bool HasContainerColumns(wxDataViewItem const &aItem) const override
Definition rc_item.h:297
bool HasValue(const wxDataViewItem &item, unsigned col) const override
Definition rc_item.h:299
EDA_DRAW_FRAME * m_editFrame
Definition rc_item.h:348
void retireNodeTree(RC_TREE_NODE *aNode)
Definition rc_item.cpp:279
static wxDataViewItem ToItem(RC_TREE_NODE const *aNode)
Definition rc_item.h:254
bool SetValue(wxVariant const &aVariant, wxDataViewItem const &aItem, unsigned int aCol) override
Called by the wxDataView to edit an item's content.
Definition rc_item.h:316
void SelectMarker(const MARKER_BASE *aMarker)
Definition rc_item.cpp:807
RC_TREE_MODEL(EDA_DRAW_FRAME *aParentFrame, wxDataViewCtrl *aView)
Definition rc_item.cpp:256
void deleteNodeTree(RC_TREE_NODE *aNode)
Definition rc_item.cpp:292
const wxDataViewCtrl * GetView() const
Definition rc_item.h:265
static RC_TREE_NODE * ToNode(wxDataViewItem aItem)
Definition rc_item.h:259
void ValueChanged(RC_TREE_NODE *aNode)
Definition rc_item.cpp:586
void Update(std::shared_ptr< RC_ITEMS_PROVIDER > aProvider, int aSeverities)
Definition rc_item.cpp:413
bool GetAttr(wxDataViewItem const &aItem, unsigned int aCol, wxDataViewItemAttr &aAttr) const override
Called by the wxDataView to fetch an item's formatting.
Definition rc_item.cpp:541
RC_TREE_MODEL & operator=(const RC_TREE_MODEL &)=delete
void DeleteItems(bool aCurrentOnly, bool aIncludeExclusions, bool aDeep)
Delete the current item or all items.
Definition rc_item.cpp:643
RC_TREE_NODE * createNode(RC_TREE_NODE *aParent, const std::shared_ptr< RC_ITEM > &aRcItem, RC_TREE_NODE::NODE_TYPE aType)
Definition rc_item.cpp:265
RC_TREE_MODEL(const RC_TREE_MODEL &)=delete
void DeleteCurrentItem(bool aDeep)
Definition rc_item.cpp:637
unsigned int GetColumnCount() const override
Definition rc_item.h:295
wxDataViewItem GetParent(wxDataViewItem const &aItem) const override
Definition rc_item.cpp:440
void CenterMarker(const MARKER_BASE *aMarker)
Definition rc_item.cpp:822
static KIID ToUUID(wxDataViewItem aItem)
Definition rc_item.cpp:226
wxDataViewCtrl * m_view
Definition rc_item.h:349
std::shared_ptr< RC_ITEMS_PROVIDER > m_rcItemsProvider
Definition rc_item.h:351
void NextMarker()
Definition rc_item.cpp:779
bool IsContainer(wxDataViewItem const &aItem) const override
Definition rc_item.cpp:426
void rebuildModel(std::shared_ptr< RC_ITEMS_PROVIDER > aProvider, int aSeverities)
Definition rc_item.cpp:311
std::shared_ptr< RC_ITEM > m_RcItem
Definition rc_item.h:238
RC_TREE_NODE * m_Parent
Definition rc_item.h:246
RC_TREE_NODE(RC_TREE_NODE *aParent, const std::shared_ptr< RC_ITEM > &aRcItem, NODE_TYPE aType)
Definition rc_item.h:219
std::vector< RC_TREE_NODE * > m_Children
Definition rc_item.h:247
RC_TREE_NODE(const RC_TREE_NODE &)=delete
HANDLE * m_Handle
Definition rc_item.h:245
RC_TREE_NODE & operator=(const RC_TREE_NODE &)=delete
NODE_TYPE m_Type
Definition rc_item.h:237
KIID niluuid(0)
Contains the json serialization structs for DRC and ERC reports If you are trying to change the outpu...
Definition rc_item.h:43
SEVERITY
RC_TREE_NODE * m_Node
Definition rc_item.h:242