KiCad PCB EDA Suite
sch_connection.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) 2018 CERN
5  * @author Jon Evans <jon@craftyjon.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef _SCH_CONNECTION_H
22 #define _SCH_CONNECTION_H
23 
24 #include <memory>
25 #include <unordered_set>
26 
27 #include <boost/optional.hpp>
28 #include <wx/regex.h>
29 
30 #include <bus_alias.h>
31 #include <msgpanel.h>
32 #include <sch_sheet_path.h>
33 
34 
35 class SCH_ITEM;
36 class SCH_SHEET_PATH;
37 
38 
39 enum class CONNECTION_TYPE
40 {
41  NONE,
42  NET,
43  BUS,
44  BUS_GROUP,
45 };
46 
61 {
62 public:
63  SCH_CONNECTION( SCH_ITEM* aParent = nullptr, SCH_SHEET_PATH aPath = SCH_SHEET_PATH() );
64 
66  {}
67 
72  bool operator==( const SCH_CONNECTION& aOther ) const;
73 
74  bool operator!=( const SCH_CONNECTION& aOther ) const;
75 
82  void ConfigureFromLabel( wxString aLabel );
83 
87  void Reset();
88 
94  void Clone( SCH_CONNECTION& aOther );
95 
96  SCH_ITEM* Parent() const
97  {
98  return m_parent;
99  }
100 
101  SCH_ITEM* Driver() const
102  {
103  return m_driver;
104  }
105 
107  {
108  return m_sheet;
109  }
110 
111  void SetDriver( SCH_ITEM* aItem );
112 
113  void SetSheet( SCH_SHEET_PATH aSheet );
114 
121  bool IsDriver() const;
122 
123  bool IsBus() const
124  {
126  }
127 
128  bool IsNet() const
129  {
130  return ( m_type == CONNECTION_TYPE::NET );
131  }
132 
133  bool IsDirty() const
134  {
135  return m_dirty;
136  }
137 
138  void SetDirty()
139  {
140  m_dirty = true;
141  }
142 
143  void ClearDirty()
144  {
145  m_dirty = false;
146  }
147 
148  wxString Name( bool aIgnoreSheet = false ) const;
149 
150  wxString RawName() const
151  {
152  return m_name;
153  }
154 
155  wxString LocalName() const { return m_local_name; }
156 
157  void SetName( const wxString& aName )
158  {
159  m_name = aName;
160  }
161 
162  wxString Prefix() const
163  {
164  return m_prefix;
165  }
166 
167  wxString Suffix() const
168  {
169  return m_suffix;
170  }
171 
172  void SetPrefix( const wxString& aPrefix );
173 
174  void SetSuffix( const wxString& aSuffix );
175 
177  {
178  return m_type;
179  }
180 
181  void SetType( CONNECTION_TYPE aType )
182  {
183  m_type = aType;
184  }
185 
186  int NetCode() const
187  {
188  return m_net_code;
189  }
190 
191  void SetNetCode( int aCode )
192  {
193  m_net_code = aCode;
194  }
195 
196  int BusCode() const
197  {
198  return m_bus_code;
199  }
200 
201  void SetBusCode( int aCode )
202  {
203  m_bus_code = aCode;
204  }
205 
206  int SubgraphCode() const
207  {
208  return m_subgraph_code;
209  }
210 
211  void SetSubgraphCode( int aCode )
212  {
213  m_subgraph_code = aCode;
214  }
215 
216  long VectorStart() const
217  {
218  return m_vector_start;
219  }
220 
221  long VectorEnd() const
222  {
223  return m_vector_end;
224  }
225 
226  long VectorIndex() const
227  {
228  return m_vector_index;
229  }
230 
231  wxString VectorPrefix() const
232  {
233  return m_vector_prefix;
234  }
235 
236  std::vector< std::shared_ptr< SCH_CONNECTION > >& Members()
237  {
238  return m_members;
239  }
240 
241  const std::vector< std::shared_ptr< SCH_CONNECTION > >& Members() const
242  {
243  return m_members;
244  }
245 
254  bool IsSubsetOf( SCH_CONNECTION* aOther ) const;
255 
261  bool IsMemberOfBus( SCH_CONNECTION* aOther ) const;
262 
272  bool ParseBusVector( wxString aBus, wxString* aName,
273  std::vector<wxString>& aMemberList ) const;
274 
283  bool ParseBusGroup( wxString aGroup, wxString* name,
284  std::vector<wxString>& aMemberList ) const;
285 
289  void AppendInfoToMsgPanel( MSG_PANEL_ITEMS& aList ) const;
290 
294  void AppendDebugInfoToMsgPanel( MSG_PANEL_ITEMS& aList ) const;
295 
302  static bool IsBusLabel( const wxString& aLabel );
303 
310  static bool IsBusVectorLabel( const wxString& aLabel );
311 
318  static bool IsBusGroupLabel( const wxString& aLabel );
319 
320 private:
321 
322  bool m_dirty;
323 
325 
327 
329 
331 
332  wxString m_name;
333 
341  wxString m_local_name;
342 
344  wxString m_prefix;
345 
346  wxString m_suffix;
347 
348  int m_net_code; // TODO(JE) remove if unused
349 
350  int m_bus_code; // TODO(JE) remove if unused
351 
353 
355 
357 
359 
361  wxString m_vector_prefix;
362 
369  std::vector< std::shared_ptr< SCH_CONNECTION > > m_members;
370 
371 };
372 
373 #endif
374 
int m_subgraph_code
Groups directly-connected items.
void SetBusCode(int aCode)
wxString Prefix() const
std::vector< std::shared_ptr< SCH_CONNECTION > > m_members
For bus connections, store a list of member connections.
wxString m_name
Name of the connection.
SCH_ITEM * m_driver
The SCH_ITEM that drives this connection's net.
static bool IsBusLabel(const wxString &aLabel)
Test if aLabel has a bus notation.
This item represents a bus group.
SCH_CONNECTION(SCH_ITEM *aParent=nullptr, SCH_SHEET_PATH aPath=SCH_SHEET_PATH())
bool IsMemberOfBus(SCH_CONNECTION *aOther) const
Returns true if this connection is a member of bus connection aOther.
void SetDriver(SCH_ITEM *aItem)
void SetName(const wxString &aName)
void SetSheet(SCH_SHEET_PATH aSheet)
CONNECTION_TYPE
wxString LocalName() const
wxString RawName() const
int BusCode() const
CONNECTION_TYPE m_type
No connection to this item.
int NetCode() const
wxString Suffix() const
const std::vector< std::shared_ptr< SCH_CONNECTION > > & Members() const
wxString Name(bool aIgnoreSheet=false) const
void SetSubgraphCode(int aCode)
long VectorEnd() const
void Reset()
Clears connectivity information.
SCH_ITEM * Driver() const
int SubgraphCode() const
void ConfigureFromLabel(wxString aLabel)
Configures the connection given a label.
static bool IsBusVectorLabel(const wxString &aLabel)
Test if aLabel has a bus vector notation (simple bus, e.g.
bool IsDirty() const
SCH_SHEET_PATH.
bool ParseBusGroup(wxString aGroup, wxString *name, std::vector< wxString > &aMemberList) const
Parses a bus group label into the name and a list of components.
long VectorIndex() const
void Clone(SCH_CONNECTION &aOther)
Copies connectivity information (but not parent) from another connection.
bool IsDriver() const
Checks if the SCH_ITEM this connection is attached to can drive connections Drivers can be labels,...
SCH_SHEET_PATH m_sheet
The hierarchical sheet this connection is on.
void AppendDebugInfoToMsgPanel(MSG_PANEL_ITEMS &aList) const
Adds extended debug information about the connection object to aList.
This item represents a net.
wxString m_suffix
Name suffix (used only for disambiguation)
wxString m_local_name
For bus members, we want to keep track of the "local" name of a member, that is, the name it takes on...
SCH_SHEET_PATH Sheet() const
void AppendInfoToMsgPanel(MSG_PANEL_ITEMS &aList) const
Adds information about the connection object to aList.
bool IsNet() const
long m_vector_start
Highest member of a vector bus.
const char * name
Definition: DXF_plotter.cpp:60
wxString VectorPrefix() const
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
void SetSuffix(const wxString &aSuffix)
void SetPrefix(const wxString &aPrefix)
bool ParseBusVector(wxString aBus, wxString *aName, std::vector< wxString > &aMemberList) const
Parses a bus vector (e.g.
bool operator!=(const SCH_CONNECTION &aOther) const
SCH_ITEM * Parent() const
std::vector< MSG_PANEL_ITEM > MSG_PANEL_ITEMS
Definition: msgpanel.h:102
long VectorStart() const
std::vector< std::shared_ptr< SCH_CONNECTION > > & Members()
long m_vector_index
Index of bus vector member nets.
long m_vector_end
Lowest member of a vector bus.
static bool IsBusGroupLabel(const wxString &aLabel)
Test if aLabel has a bus group notation.
void SetType(CONNECTION_TYPE aType)
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
bool IsBus() const
Message panel definition file.
bool IsSubsetOf(SCH_CONNECTION *aOther) const
Returns true if aOther is a subset of this connection or vice versa.
wxString m_vector_prefix
CONNECTION_TYPE Type() const
SCH_ITEM is a base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:136
SCH_ITEM * m_parent
The SCH_ITEM this connection is owned by.
void SetNetCode(int aCode)
bool operator==(const SCH_CONNECTION &aOther) const
Note: the equality operator for SCH_CONNECTION only tests the net properties, not the ownership / she...
This item represents a bus vector.