LibrePCB Developers Documentation
Loading...
Searching...
No Matches
circuit.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_CIRCUIT_H
21#define LIBREPCB_CORE_CIRCUIT_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../../fileio/filepath.h"
27#include "../../library/cmp/componentprefix.h"
28#include "../../types/busname.h"
29#include "../../types/circuitidentifier.h"
30#include "../../types/elementname.h"
31#include "../../types/fileproofname.h"
32#include "../../types/uuid.h"
33#include "assemblyvariant.h"
34
35#include <QtCore>
36
37#include <memory>
38
39/*******************************************************************************
40 * Namespace / Forward Declarations
41 ******************************************************************************/
42namespace librepcb {
43
44class Bus;
45class Component;
46class ComponentInstance;
47class NetClass;
48class NetSignal;
49class Project;
50class TransactionalDirectory;
51
52/*******************************************************************************
53 * Class Circuit
54 ******************************************************************************/
55
72class Circuit final : public QObject {
73 Q_OBJECT
74
75public:
76 // Constructors / Destructor
77 Circuit() = delete;
78 Circuit(const Circuit& other) = delete;
79 explicit Circuit(Project& project);
80 ~Circuit() noexcept;
81
82 // Getters
83 Project& getProject() const noexcept { return mProject; }
84
85 // AssemblyVariant Methods
89 const AssemblyVariantList& getAssemblyVariants() const noexcept {
90 return mAssemblyVariants;
91 }
92 int addAssemblyVariant(std::shared_ptr<AssemblyVariant> av, int index = -1);
93 void removeAssemblyVariant(std::shared_ptr<AssemblyVariant> av);
94 void setAssemblyVariantName(std::shared_ptr<AssemblyVariant> av,
95 const FileProofName& newName);
96
97 // NetClass Methods
98 const QMap<Uuid, NetClass*>& getNetClasses() const noexcept {
99 return mNetClasses;
100 }
101 NetClass* getNetClassByName(const ElementName& name) const noexcept;
102 void addNetClass(NetClass& netclass);
103 void removeNetClass(NetClass& netclass);
104 void setNetClassName(NetClass& netclass, const ElementName& newName);
105
106 // NetSignal Methods
107 QString generateAutoNetSignalName() const noexcept;
108 const QMap<Uuid, NetSignal*>& getNetSignals() const noexcept {
109 return mNetSignals;
110 }
111 NetSignal* getNetSignalByName(const QString& name) const noexcept;
112 NetSignal* getNetSignalWithMostElements() const noexcept;
113 void addNetSignal(NetSignal& netsignal);
114 void removeNetSignal(NetSignal& netsignal);
115 void setNetSignalName(NetSignal& netsignal, const CircuitIdentifier& newName,
116 bool isAutoName);
117
118 // Bus Methods
119 QString generateAutoBusName() const noexcept;
120 const QMap<Uuid, Bus*>& getBuses() const noexcept { return mBuses; }
121 Bus* getBusByName(const QString& name) const noexcept;
122 void addBus(Bus& bus);
123 void removeBus(Bus& bus);
124 void setBusName(Bus& bus, const BusName& newName, bool isAutoName);
125
126 // ComponentInstance Methods
128 const ComponentPrefix& cmpPrefix) const noexcept;
129 const QMap<Uuid, ComponentInstance*>& getComponentInstances() const noexcept {
130 return mComponentInstances;
131 }
133 const Uuid& uuid) const noexcept;
135 const QString& name) const noexcept;
139 const CircuitIdentifier& newName);
140
141 // General Methods
142
148 void serialize(SExpression& root) const;
149
150 // Operator Overloadings
151 Circuit& operator=(const Circuit& rhs) = delete;
152 bool operator==(const Circuit& rhs) const noexcept { return (this == &rhs); }
153 bool operator!=(const Circuit& rhs) const noexcept { return (this != &rhs); }
154
155signals:
156 void assemblyVariantAdded(std::shared_ptr<AssemblyVariant>& av);
157 void assemblyVariantRemoved(std::shared_ptr<AssemblyVariant>& av);
158 void netClassAdded(NetClass& netclass);
159 void netClassRemoved(NetClass& netclass);
160 void netSignalAdded(NetSignal& netsignal);
161 void netSignalRemoved(NetSignal& netsignal);
162 void busAdded(Bus& bus);
163 void busRemoved(Bus& bus);
164 void busRenamed(Bus& bus);
168
169private:
172 QMap<Uuid, NetClass*> mNetClasses;
173 QMap<Uuid, NetSignal*> mNetSignals;
174 QMap<Uuid, Bus*> mBuses;
175 QMap<Uuid, ComponentInstance*> mComponentInstances;
176};
177
178/*******************************************************************************
179 * End of File
180 ******************************************************************************/
181
182} // namespace librepcb
183
184#endif
The Bus class.
Definition bus.h:50
The Circuit class represents all electrical connections in a project (drawn in the schematics)
Definition circuit.h:72
void addBus(Bus &bus)
Definition circuit.cpp:304
void netClassDesignRulesModified()
const QMap< Uuid, NetClass * > & getNetClasses() const noexcept
Definition circuit.h:98
NetSignal * getNetSignalWithMostElements() const noexcept
Definition circuit.cpp:223
bool operator!=(const Circuit &rhs) const noexcept
Definition circuit.h:153
AssemblyVariantList & getAssemblyVariants() noexcept
Definition circuit.h:86
void addNetClass(NetClass &netclass)
Definition circuit.cpp:149
NetClass * getNetClassByName(const ElementName &name) const noexcept
Definition circuit.cpp:140
void addComponentInstance(ComponentInstance &cmp)
Definition circuit.cpp:376
void setNetClassName(NetClass &netclass, const ElementName &newName)
Definition circuit.cpp:183
QString generateAutoComponentInstanceName(const ComponentPrefix &cmpPrefix) const noexcept
Definition circuit.cpp:352
~Circuit() noexcept
Definition circuit.cpp:49
void removeBus(Bus &bus)
Definition circuit.cpp:323
void busRenamed(Bus &bus)
void setBusName(Bus &bus, const BusName &newName, bool isAutoName)
Definition circuit.cpp:332
void busAdded(Bus &bus)
void componentRemoved(ComponentInstance &cmp)
Circuit(const Circuit &other)=delete
const QMap< Uuid, ComponentInstance * > & getComponentInstances() const noexcept
Definition circuit.h:129
void netClassAdded(NetClass &netclass)
ComponentInstance * getComponentInstanceByUuid(const Uuid &uuid) const noexcept
Definition circuit.cpp:363
void removeComponentInstance(ComponentInstance &cmp)
Definition circuit.cpp:399
Bus * getBusByName(const QString &name) const noexcept
Definition circuit.cpp:295
Circuit & operator=(const Circuit &rhs)=delete
QMap< Uuid, NetSignal * > mNetSignals
Definition circuit.h:173
void componentAdded(ComponentInstance &cmp)
QMap< Uuid, ComponentInstance * > mComponentInstances
Definition circuit.h:175
void setNetSignalName(NetSignal &netsignal, const CircuitIdentifier &newName, bool isAutoName)
Definition circuit.cpp:265
void netSignalAdded(NetSignal &netsignal)
void removeNetClass(NetClass &netclass)
Definition circuit.cpp:172
QMap< Uuid, Bus * > mBuses
Definition circuit.h:174
void netClassRemoved(NetClass &netclass)
Project & getProject() const noexcept
Definition circuit.h:83
const AssemblyVariantList & getAssemblyVariants() const noexcept
Definition circuit.h:89
QString generateAutoBusName() const noexcept
Definition circuit.cpp:286
const QMap< Uuid, Bus * > & getBuses() const noexcept
Definition circuit.h:120
Project & mProject
A reference to the Project object (from the ctor)
Definition circuit.h:170
ComponentInstance * getComponentInstanceByName(const QString &name) const noexcept
Definition circuit.cpp:368
void setComponentInstanceName(ComponentInstance &cmp, const CircuitIdentifier &newName)
Definition circuit.cpp:410
void assemblyVariantRemoved(std::shared_ptr< AssemblyVariant > &av)
void assemblyVariantAdded(std::shared_ptr< AssemblyVariant > &av)
void serialize(SExpression &root) const
Serialize into librepcb::SExpression node.
Definition circuit.cpp:430
void netSignalRemoved(NetSignal &netsignal)
QMap< Uuid, NetClass * > mNetClasses
Definition circuit.h:172
AssemblyVariantList mAssemblyVariants
Definition circuit.h:171
void addNetSignal(NetSignal &netsignal)
Definition circuit.cpp:235
bool operator==(const Circuit &rhs) const noexcept
Definition circuit.h:152
NetSignal * getNetSignalByName(const QString &name) const noexcept
Definition circuit.cpp:214
void removeAssemblyVariant(std::shared_ptr< AssemblyVariant > av)
Definition circuit.cpp:111
QString generateAutoNetSignalName() const noexcept
Definition circuit.cpp:205
void removeNetSignal(NetSignal &netsignal)
Definition circuit.cpp:256
void busRemoved(Bus &bus)
const QMap< Uuid, NetSignal * > & getNetSignals() const noexcept
Definition circuit.h:108
void setAssemblyVariantName(std::shared_ptr< AssemblyVariant > av, const FileProofName &newName)
Definition circuit.cpp:123
int addAssemblyVariant(std::shared_ptr< AssemblyVariant > av, int index=-1)
Definition circuit.cpp:86
The ComponentInstance class.
Definition componentinstance.h:54
The NetClass class.
Definition netclass.h:47
The NetSignal class.
Definition netsignal.h:50
The Project class represents a whole (opened) project with all its content.
Definition project.h:71
The SExpression class.
Definition sexpression.h:69
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition uuid.h:56
Definition occmodel.cpp:77
type_safe::constrained_type< QString, CircuitIdentifierConstraint, CircuitIdentifierVerifier > CircuitIdentifier
Definition circuitidentifier.h:88
type_safe::constrained_type< QString, ComponentPrefixConstraint, ComponentPrefixVerifier > ComponentPrefix
Definition componentprefix.h:81
type_safe::constrained_type< QString, FileProofNameConstraint, FileProofNameVerifier > FileProofName
Definition fileproofname.h:90
type_safe::constrained_type< QString, BusNameConstraint, BusNameVerifier > BusName
Definition busname.h:82
type_safe::constrained_type< QString, ElementNameConstraint, ElementNameVerifier > ElementName
Definition elementname.h:84