LibrePCB Developers Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
kicadlibraryimport.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_KICADIMPORT_KICADLIBRARYIMPORT_H
21#define LIBREPCB_KICADIMPORT_KICADLIBRARYIMPORT_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
28
29#include <QtCore>
30
31#include <memory>
32
33/*******************************************************************************
34 * Namespace / Forward Declarations
35 ******************************************************************************/
36namespace librepcb {
37
38class MessageLogger;
39class WorkspaceLibraryDb;
40
41namespace kicadimport {
42
43struct KiCadLibraryConverterSettings;
44
45/*******************************************************************************
46 * Class KiCadLibraryImport
47 ******************************************************************************/
48
52class KiCadLibraryImport final : public QObject {
53 Q_OBJECT
54
55public:
56 enum class State {
57 Reset,
59 Scanned,
60 Parsing,
61 Parsed,
64 };
65
66 struct Gate {
67 int index; // As specified in KiCad symbol.
68 QString symGeneratedBy; // Symbol "generated_by" property.
70 };
71
72 struct Symbol {
73 QString name;
74 QString cmpGeneratedBy; // Component "generated_by" property.
75 QString devGeneratedBy; // Device "generated_by" property.
76 QString pkgGeneratedBy; // Package "generated_by" property (optional).
80 QString extends;
81 QList<Gate> gates;
82 Qt::CheckState symChecked;
83 Qt::CheckState cmpChecked;
84 Qt::CheckState devChecked;
85 };
86
89 QList<Symbol> symbols;
90 };
91
92 struct Footprint {
94 QString name;
95 QString generatedBy; // To be set as "generated_by" property.
97 Qt::CheckState checked;
98 };
99
102 QList<FilePath> files;
103 QList<Footprint> footprints;
104 };
105
108 QList<FilePath> stepFiles;
109 };
110
111 struct Result {
112 QList<SymbolLibrary> symbolLibs;
113 QList<FootprintLibrary> footprintLibs;
114 QList<Package3DLibrary> package3dLibs;
115 int fileCount = 0;
116 };
117
118 static constexpr const char* COMPATIBLE_KICAD_VERSION = "9.x";
119
120 // Constructors / Destructor
123 QObject* parent = nullptr) noexcept;
124 ~KiCadLibraryImport() noexcept;
125
126 // Getters
127 State getState() const noexcept { return mState; }
128 const FilePath& getLoadedLibsPath() const noexcept { return mLoadedLibsFp; }
129 const FilePath& getLoadedShapes3dPath() const noexcept {
130 return mLoadedShapes3dFp;
131 }
132 bool canStartParsing() const noexcept;
133 bool canStartSelecting() const noexcept;
134 bool canStartImport() const noexcept;
135
136 // Setters
137 void setNamePrefix(const QString& prefix) noexcept;
138 void setSymbolCategories(const QSet<Uuid>& uuids) noexcept;
139 void setPackageCategories(const QSet<Uuid>& uuids) noexcept;
140 void setComponentCategories(const QSet<Uuid>& uuids) noexcept;
141 void setDeviceCategories(const QSet<Uuid>& uuids) noexcept;
142 void setSymbolChecked(const QString& libName, const QString& symName,
143 bool checked) noexcept;
144 void setPackageChecked(const QString& libName, const QString& fptName,
145 bool checked) noexcept;
146 void setComponentChecked(const QString& libName, const QString& symName,
147 bool checked) noexcept;
148 void setDeviceChecked(const QString& libName, const QString& symName,
149 bool checked) noexcept;
150
151 // General Methods
152 void reset() noexcept;
153 bool startScan(const FilePath& libsFp, const FilePath& shapes3dFp,
154 std::shared_ptr<MessageLogger> log) noexcept;
155 bool startParse(std::shared_ptr<MessageLogger> log) noexcept;
156 bool startImport(std::shared_ptr<MessageLogger> log) noexcept;
157 bool isRunning() const noexcept;
158 std::shared_ptr<Result> getResult() noexcept;
159 void cancel() noexcept;
160
161 // Operator Overloadings
162 KiCadLibraryImport& operator=(const KiCadLibraryImport& rhs) = delete;
163
164signals:
165 void symbolCheckStateChanged(const QString& libName, const QString& symName,
166 Qt::CheckState state);
167 void packageCheckStateChanged(const QString& libName, const QString& fptName,
168 Qt::CheckState state);
169 void componentCheckStateChanged(const QString& libName,
170 const QString& symName, Qt::CheckState state);
171 void progressPercent(int percent);
172 void progressStatus(QString status);
176
177private:
178 std::shared_ptr<Result> scan(FilePath libsFp, const FilePath& shapes3dFp,
179 std::shared_ptr<MessageLogger> log) noexcept;
180 std::shared_ptr<Result> parse(std::shared_ptr<Result> result,
181 std::shared_ptr<MessageLogger> log) noexcept;
182 std::shared_ptr<Result> import(std::shared_ptr<Result> result,
183 std::shared_ptr<MessageLogger> log) noexcept;
184 template <typename T>
185 bool isAlreadyImported(const QString& generatedBy) const noexcept;
186 void updateDependencies(std::shared_ptr<Result> result) noexcept;
187
193 QFuture<std::shared_ptr<Result>> mFuture;
195 bool mAbort;
196};
197
198/*******************************************************************************
199 * End of File
200 ******************************************************************************/
201
202} // namespace kicadimport
203} // namespace librepcb
204
205#endif
This class represents absolute, well-formatted paths to files or directories.
Definition filepath.h:127
Generic logger class to pass messages between objects.
Definition messagelogger.h:43
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition uuid.h:56
The WorkspaceLibraryDb class.
Definition workspacelibrarydb.h:58
KiCad library import.
Definition kicadlibraryimport.h:52
bool canStartSelecting() const noexcept
Definition kicadlibraryimport.cpp:139
void setComponentChecked(const QString &libName, const QString &symName, bool checked) noexcept
Definition kicadlibraryimport.cpp:269
void setPackageChecked(const QString &libName, const QString &fptName, bool checked) noexcept
Definition kicadlibraryimport.cpp:246
const FilePath & getLoadedShapes3dPath() const noexcept
Definition kicadlibraryimport.h:129
void reset() noexcept
Definition kicadlibraryimport.cpp:319
void packageCheckStateChanged(const QString &libName, const QString &fptName, Qt::CheckState state)
void cancel() noexcept
Definition kicadlibraryimport.cpp:385
void setPackageCategories(const QSet< Uuid > &uuids) noexcept
Definition kicadlibraryimport.cpp:209
bool mAbort
Definition kicadlibraryimport.h:195
WorkspaceLibraryDb & mLibraryDb
Definition kicadlibraryimport.h:189
bool startParse(std::shared_ptr< MessageLogger > log) noexcept
Definition kicadlibraryimport.cpp:344
void updateDependencies(std::shared_ptr< Result > result) noexcept
Definition kicadlibraryimport.cpp:979
bool canStartParsing() const noexcept
Definition kicadlibraryimport.cpp:129
std::shared_ptr< Result > parse(std::shared_ptr< Result > result, std::shared_ptr< MessageLogger > log) noexcept
Definition kicadlibraryimport.cpp:521
State mState
Definition kicadlibraryimport.h:194
QScopedPointer< KiCadLibraryConverterSettings > mSettings
Definition kicadlibraryimport.h:190
FilePath mLoadedLibsFp
Definition kicadlibraryimport.h:191
std::shared_ptr< Result > getResult() noexcept
Definition kicadlibraryimport.cpp:380
static constexpr const char * COMPATIBLE_KICAD_VERSION
Definition kicadlibraryimport.h:118
State
Definition kicadlibraryimport.h:56
bool isAlreadyImported(const QString &generatedBy) const noexcept
Definition kicadlibraryimport.cpp:957
std::shared_ptr< Result > import(std::shared_ptr< Result > result, std::shared_ptr< MessageLogger > log) noexcept
Definition kicadlibraryimport.cpp:676
void setNamePrefix(const QString &prefix) noexcept
Definition kicadlibraryimport.cpp:201
void setSymbolCategories(const QSet< Uuid > &uuids) noexcept
Definition kicadlibraryimport.cpp:205
bool canStartImport() const noexcept
Definition kicadlibraryimport.cpp:158
void symbolCheckStateChanged(const QString &libName, const QString &symName, Qt::CheckState state)
bool isRunning() const noexcept
Definition kicadlibraryimport.cpp:374
FilePath mLoadedShapes3dFp
Definition kicadlibraryimport.h:192
bool startScan(const FilePath &libsFp, const FilePath &shapes3dFp, std::shared_ptr< MessageLogger > log) noexcept
Definition kicadlibraryimport.cpp:326
void setComponentCategories(const QSet< Uuid > &uuids) noexcept
Definition kicadlibraryimport.cpp:214
const FilePath & getLoadedLibsPath() const noexcept
Definition kicadlibraryimport.h:128
State getState() const noexcept
Definition kicadlibraryimport.h:127
KiCadLibraryImport(const KiCadLibraryImport &other)=delete
void componentCheckStateChanged(const QString &libName, const QString &symName, Qt::CheckState state)
void setDeviceChecked(const QString &libName, const QString &symName, bool checked) noexcept
Definition kicadlibraryimport.cpp:292
void setDeviceCategories(const QSet< Uuid > &uuids) noexcept
Definition kicadlibraryimport.cpp:219
const FilePath mDestinationLibraryFp
Definition kicadlibraryimport.h:188
std::shared_ptr< Result > scan(FilePath libsFp, const FilePath &shapes3dFp, std::shared_ptr< MessageLogger > log) noexcept
Definition kicadlibraryimport.cpp:394
void setSymbolChecked(const QString &libName, const QString &symName, bool checked) noexcept
Definition kicadlibraryimport.cpp:223
bool startImport(std::shared_ptr< MessageLogger > log) noexcept
Definition kicadlibraryimport.cpp:359
QFuture< std::shared_ptr< Result > > mFuture
Definition kicadlibraryimport.h:193
static QString generatedBy(QString libName, QStringList keys)
Definition kicadlibraryimport.cpp:48
Definition occmodel.cpp:77
Definition uuid.h:186
Settings for librepcb::kicadimport::KiCadLibraryConverter.
Definition kicadlibraryconverter.h:57
QString generatedBy
Definition kicadlibraryimport.h:95
FilePath file
Definition kicadlibraryimport.h:93
bool alreadyImported
Definition kicadlibraryimport.h:96
Qt::CheckState checked
Definition kicadlibraryimport.h:97
QString name
Definition kicadlibraryimport.h:94
QList< FilePath > files
Definition kicadlibraryimport.h:102
FilePath dir
Definition kicadlibraryimport.h:101
QList< Footprint > footprints
Definition kicadlibraryimport.h:103
Definition kicadlibraryimport.h:66
QString symGeneratedBy
Definition kicadlibraryimport.h:68
bool alreadyImported
Definition kicadlibraryimport.h:69
int index
Definition kicadlibraryimport.h:67
QList< FilePath > stepFiles
Definition kicadlibraryimport.h:108
FilePath dir
Definition kicadlibraryimport.h:107
Definition kicadlibraryimport.h:111
QList< FootprintLibrary > footprintLibs
Definition kicadlibraryimport.h:113
QList< Package3DLibrary > package3dLibs
Definition kicadlibraryimport.h:114
QList< SymbolLibrary > symbolLibs
Definition kicadlibraryimport.h:112
int fileCount
Definition kicadlibraryimport.h:115
Definition kicadlibraryimport.h:72
QString pkgGeneratedBy
Definition kicadlibraryimport.h:76
Qt::CheckState devChecked
Definition kicadlibraryimport.h:84
QString extends
Definition kicadlibraryimport.h:80
bool devAlreadyImported
Definition kicadlibraryimport.h:79
QString cmpGeneratedBy
Definition kicadlibraryimport.h:74
bool symAlreadyImported
Definition kicadlibraryimport.h:77
Qt::CheckState cmpChecked
Definition kicadlibraryimport.h:83
QList< Gate > gates
Definition kicadlibraryimport.h:81
bool cmpAlreadyImported
Definition kicadlibraryimport.h:78
QString name
Definition kicadlibraryimport.h:73
Qt::CheckState symChecked
Definition kicadlibraryimport.h:82
QString devGeneratedBy
Definition kicadlibraryimport.h:75
FilePath file
Definition kicadlibraryimport.h:88
QList< Symbol > symbols
Definition kicadlibraryimport.h:89