KiCad PCB EDA Suite
dialog_net_inspector.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) 2020 Oleg Endo <[email protected]>
5 * Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
6 * Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#pragma once
27
28#include <board.h>
29#include <optional>
31
32class PCB_EDIT_FRAME;
33class NETINFO_ITEM;
34class BOARD;
35class BOARD_ITEM;
36class CN_ITEM;
38class PCB_TRACK;
39
41{
42public:
43 struct SETTINGS
44 {
45 wxString filter_string;
46 bool show_zero_pad_nets = true;
47 bool group_by = false;
49 wxString group_by_text;
51 bool sort_order_asc = true;
52
53 std::vector<int> column_order;
54 };
55
56 DIALOG_NET_INSPECTOR( PCB_EDIT_FRAME* aParent, const SETTINGS& aSettings );
58
59 SETTINGS Settings() const;
60
61 virtual void OnBoardItemAdded( BOARD& aBoard, BOARD_ITEM* aBoardItem ) override;
62 virtual void OnBoardItemsAdded( BOARD& aBoard, std::vector<BOARD_ITEM*>& aBoardItems ) override;
63 virtual void OnBoardItemRemoved( BOARD& aBoard, BOARD_ITEM* aBoardItem ) override;
64 virtual void OnBoardItemsRemoved( BOARD& aBoard, std::vector<BOARD_ITEM*>& aBoardItems ) override;
65 virtual void OnBoardNetSettingsChanged( BOARD& aBoard ) override;
66 virtual void OnBoardItemChanged( BOARD& aBoard, BOARD_ITEM* aBoardItem ) override;
67 virtual void OnBoardItemsChanged( BOARD& aBoard, std::vector<BOARD_ITEM*>& aBoardItems ) override;
68 virtual void OnBoardHighlightNetChanged( BOARD& aBoard ) override;
69
70private:
71 struct COLUMN_DESC;
72 class LIST_ITEM;
74
75 using LIST_ITEM_ITER = std::vector<std::unique_ptr<LIST_ITEM>>::iterator;
76 using LIST_ITEM_CONST_ITER = std::vector<std::unique_ptr<LIST_ITEM>>::const_iterator;
77
78 wxString formatNetCode( const NETINFO_ITEM* aNet ) const;
79 wxString formatNetName( const NETINFO_ITEM* aNet ) const;
80 wxString formatCount( unsigned int aValue ) const;
81 wxString formatLength( int64_t aValue ) const;
82
83 std::vector<CN_ITEM*> relevantConnectivityItems() const;
84 bool netFilterMatches( NETINFO_ITEM* aNet ) const;
85 void updateNet( NETINFO_ITEM* aNet );
86 unsigned int calculateViaLength( const PCB_TRACK* ) const;
87
88 void onSelChanged( wxDataViewEvent& event ) override;
89 void onSelChanged();
90 void onSortingChanged( wxDataViewEvent& event ) override;
91 void onFilterChange( wxCommandEvent& event ) override;
92 void onListSize( wxSizeEvent& event ) override;
93 void onAddNet( wxCommandEvent& event ) override;
94 void onRenameNet( wxCommandEvent& event ) override;
95 void onDeleteNet( wxCommandEvent& event ) override;
96 void onReport( wxCommandEvent& event ) override;
97
98 std::unique_ptr<LIST_ITEM> buildNewItem( NETINFO_ITEM* aNet, unsigned int aPadCount,
99 const std::vector<CN_ITEM*>& aCNItems );
100
101 void buildNetsList();
102 void adjustListColumns();
103
104 void onParentWindowClosed( wxCommandEvent& event );
105 void onUnitsChanged( wxCommandEvent& event );
106 void onBoardChanged( wxCommandEvent& event );
107
108 void updateDisplayedRowValues( const std::optional<LIST_ITEM_ITER>& aRow );
109
110 // special zero-netcode item. unconnected pads etc might use different
111 // (dummy) NETINFO_ITEM. redirect all of them to this item, which we get
112 // from the board object in buildNetsList.
114
115 std::vector<std::unique_ptr<EDA_PATTERN_MATCH>> m_netFilter;
116 std::vector<std::unique_ptr<EDA_PATTERN_MATCH>> m_groupFilter;
117
122 wxSize m_size;
123
124 std::vector<COLUMN_DESC> m_columns;
125
126 class DATA_MODEL;
127 wxObjectDataPtr<DATA_MODEL> m_data_model;
128
130};
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:70
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:269
CN_ITEM represents a BOARD_CONNETED_ITEM in the connectivity system (ie: a pad, track/arc/via,...
Class DIALOG_NET_INSPECTOR_BASE.
void onUnitsChanged(wxCommandEvent &event)
wxString formatNetName(const NETINFO_ITEM *aNet) const
void onDeleteNet(wxCommandEvent &event) override
virtual void OnBoardHighlightNetChanged(BOARD &aBoard) override
virtual void OnBoardItemAdded(BOARD &aBoard, BOARD_ITEM *aBoardItem) override
virtual void OnBoardItemChanged(BOARD &aBoard, BOARD_ITEM *aBoardItem) override
void updateNet(NETINFO_ITEM *aNet)
virtual void OnBoardNetSettingsChanged(BOARD &aBoard) override
std::vector< std::unique_ptr< LIST_ITEM > >::const_iterator LIST_ITEM_CONST_ITER
DIALOG_NET_INSPECTOR(PCB_EDIT_FRAME *aParent, const SETTINGS &aSettings)
virtual void OnBoardItemsChanged(BOARD &aBoard, std::vector< BOARD_ITEM * > &aBoardItems) override
std::vector< std::unique_ptr< EDA_PATTERN_MATCH > > m_groupFilter
void onAddNet(wxCommandEvent &event) override
virtual void OnBoardItemRemoved(BOARD &aBoard, BOARD_ITEM *aBoardItem) override
void onReport(wxCommandEvent &event) override
virtual void OnBoardItemsAdded(BOARD &aBoard, std::vector< BOARD_ITEM * > &aBoardItems) override
void updateDisplayedRowValues(const std::optional< LIST_ITEM_ITER > &aRow)
virtual void OnBoardItemsRemoved(BOARD &aBoard, std::vector< BOARD_ITEM * > &aBoardItems) override
void onListSize(wxSizeEvent &event) override
void onParentWindowClosed(wxCommandEvent &event)
std::vector< CN_ITEM * > relevantConnectivityItems() const
wxObjectDataPtr< DATA_MODEL > m_data_model
std::vector< std::unique_ptr< EDA_PATTERN_MATCH > > m_netFilter
void onRenameNet(wxCommandEvent &event) override
wxString formatLength(int64_t aValue) const
std::unique_ptr< LIST_ITEM > buildNewItem(NETINFO_ITEM *aNet, unsigned int aPadCount, const std::vector< CN_ITEM * > &aCNItems)
void onFilterChange(wxCommandEvent &event) override
bool netFilterMatches(NETINFO_ITEM *aNet) const
void onSortingChanged(wxDataViewEvent &event) override
unsigned int calculateViaLength(const PCB_TRACK *) const
wxString formatNetCode(const NETINFO_ITEM *aNet) const
std::vector< std::unique_ptr< LIST_ITEM > >::iterator LIST_ITEM_ITER
std::vector< COLUMN_DESC > m_columns
wxString formatCount(unsigned int aValue) const
void onBoardChanged(wxCommandEvent &event)
Handle the data for a net.
Definition: netinfo.h:67
The main frame for Pcbnew.