LibrePCB Developers Documentation
componentsignalinstance.h
Go to the documentation of this file.
1 /*
2  * LibrePCB - Professional EDA for everyone!
3  * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4  * https://librepcb.org/
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (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, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef LIBREPCB_CORE_COMPONENTSIGNALINSTANCE_H
21 #define LIBREPCB_CORE_COMPONENTSIGNALINSTANCE_H
22 
23 /*******************************************************************************
24  * Includes
25  ******************************************************************************/
26 #include "../../types/circuitidentifier.h"
27 
28 #include <QtCore>
29 
30 /*******************************************************************************
31  * Namespace / Forward Declarations
32  ******************************************************************************/
33 namespace librepcb {
34 
35 class BI_FootprintPad;
36 class Circuit;
37 class ComponentInstance;
38 class ComponentSignal;
39 class NetSignal;
40 class SI_SymbolPin;
41 
42 /*******************************************************************************
43  * Class ComponentSignalInstance
44  ******************************************************************************/
45 
49 class ComponentSignalInstance final : public QObject {
50  Q_OBJECT
51 
52 public:
53  // Constructors / Destructor
54  ComponentSignalInstance() = delete;
55  ComponentSignalInstance(const ComponentSignalInstance& other) = delete;
56  explicit ComponentSignalInstance(Circuit& circuit,
57  ComponentInstance& cmpInstance,
58  const ComponentSignal& cmpSignal,
59  NetSignal* netsignal = nullptr);
60  ~ComponentSignalInstance() noexcept;
61 
62  // Getters
63  Circuit& getCircuit() const noexcept { return mCircuit; }
64  const ComponentSignal& getCompSignal() const noexcept {
65  return mComponentSignal;
66  }
67  NetSignal* getNetSignal() const noexcept { return mNetSignal; }
69  return mComponentInstance;
70  }
71  bool isNetSignalNameForced() const noexcept;
72  QString getForcedNetSignalName() const noexcept;
73  const QStringList& getPadNames() const noexcept { return mPadNames; }
74  const QList<SI_SymbolPin*>& getRegisteredSymbolPins() const noexcept {
75  return mRegisteredSymbolPins;
76  }
77  const QList<BI_FootprintPad*>& getRegisteredFootprintPads() const noexcept {
79  }
80  int getRegisteredElementsCount() const noexcept;
81  bool isUsed() const noexcept { return (getRegisteredElementsCount() > 0); }
82  bool arePinsOrPadsUsed() const noexcept;
83 
84  // Setters
85 
97  void setNetSignal(NetSignal* netsignal);
98 
99  // General Methods
100  void addToCircuit();
101  void removeFromCircuit();
102  void registerSymbolPin(SI_SymbolPin& pin);
106 
112  void serialize(SExpression& root) const;
113 
114  // Operator Overloadings
116  delete;
117 
118 signals:
119  void netSignalChanged(NetSignal* from, NetSignal* to);
120  void padNamesChanged(const QStringList& names);
121 
122 private: // Methods
123  void updatePadNames() noexcept;
124 
125 private: // Data
130 
131  // Attributes
133 
134  // Cached Properties
135  QStringList mPadNames;
136 
137  // Registered Elements
138  QList<SI_SymbolPin*> mRegisteredSymbolPins;
139  QList<BI_FootprintPad*> mRegisteredFootprintPads;
140 };
141 
142 /*******************************************************************************
143  * End of File
144  ******************************************************************************/
145 
146 } // namespace librepcb
147 
148 #endif
const ComponentSignal & getCompSignal() const noexcept
Definition: componentsignalinstance.h:64
void unregisterFootprintPad(BI_FootprintPad &pad)
Definition: componentsignalinstance.cpp:191
QList< SI_SymbolPin * > mRegisteredSymbolPins
Definition: componentsignalinstance.h:138
Circuit & getCircuit() const noexcept
Definition: componentsignalinstance.h:63
void registerSymbolPin(SI_SymbolPin &pin)
Definition: componentsignalinstance.cpp:167
Definition: occmodel.cpp:77
void setNetSignal(NetSignal *netsignal)
(Re-)Connect/Disconnect this component signal to/from a circuit&#39;s netsignal
Definition: componentsignalinstance.cpp:108
void serialize(SExpression &root) const
Serialize into librepcb::SExpression node.
Definition: componentsignalinstance.cpp:199
void removeFromCircuit()
Definition: componentsignalinstance.cpp:151
bool isNetSignalNameForced() const noexcept
Definition: componentsignalinstance.cpp:73
NetSignal * mNetSignal
Definition: componentsignalinstance.h:132
ComponentInstance & getComponentInstance() const noexcept
Definition: componentsignalinstance.h:68
The Circuit class represents all electrical connections in a project (drawn in the schematics) ...
Definition: circuit.h:70
bool arePinsOrPadsUsed() const noexcept
Definition: componentsignalinstance.cpp:90
void registerFootprintPad(BI_FootprintPad &pad)
Definition: componentsignalinstance.cpp:182
void updatePadNames() noexcept
Definition: componentsignalinstance.cpp:210
const QList< SI_SymbolPin * > & getRegisteredSymbolPins() const noexcept
Definition: componentsignalinstance.h:74
The SI_SymbolPin class.
Definition: si_symbolpin.h:52
The NetSignal class.
Definition: netsignal.h:50
void padNamesChanged(const QStringList &names)
void addToCircuit()
Definition: componentsignalinstance.cpp:141
QString getForcedNetSignalName() const noexcept
Definition: componentsignalinstance.cpp:77
bool mIsAddedToCircuit
Definition: componentsignalinstance.h:129
const QStringList & getPadNames() const noexcept
Definition: componentsignalinstance.h:73
The ComponentSignalInstance class.
Definition: componentsignalinstance.h:49
The ComponentInstance class.
Definition: componentinstance.h:54
Circuit & mCircuit
Definition: componentsignalinstance.h:126
int getRegisteredElementsCount() const noexcept
Definition: componentsignalinstance.cpp:83
~ComponentSignalInstance() noexcept
Definition: componentsignalinstance.cpp:63
ComponentInstance & mComponentInstance
Definition: componentsignalinstance.h:127
const QList< BI_FootprintPad * > & getRegisteredFootprintPads() const noexcept
Definition: componentsignalinstance.h:77
QStringList mPadNames
Definition: componentsignalinstance.h:135
QList< BI_FootprintPad * > mRegisteredFootprintPads
Definition: componentsignalinstance.h:139
The ComponentSignal class represents one signal of a component.
Definition: componentsignal.h:45
ComponentSignalInstance & operator=(const ComponentSignalInstance &rhs)=delete
const ComponentSignal & mComponentSignal
Definition: componentsignalinstance.h:128
void unregisterSymbolPin(SI_SymbolPin &pin)
Definition: componentsignalinstance.cpp:175
The SExpression class.
Definition: sexpression.h:69
void netSignalChanged(NetSignal *from, NetSignal *to)
NetSignal * getNetSignal() const noexcept
Definition: componentsignalinstance.h:67
The BI_FootprintPad class.
Definition: bi_footprintpad.h:48
bool isUsed() const noexcept
Definition: componentsignalinstance.h:81