LibrePCB Developers Documentation
Loading...
Searching...
No Matches
projectloader.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_PROJECTLOADER_H
21#define LIBREPCB_CORE_PROJECTLOADER_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../serialization/fileformatmigration.h"
27
28#include <QtCore>
29
30#include <memory>
31#include <optional>
32
33/*******************************************************************************
34 * Namespace / Forward Declarations
35 ******************************************************************************/
36namespace librepcb {
37
38class Board;
39class Project;
40class ProjectLibrary;
41class SExpression;
42class Schematic;
43class TransactionalDirectory;
44
45/*******************************************************************************
46 * Class ProjectLoader
47 ******************************************************************************/
48
52class ProjectLoader final : public QObject {
53 Q_OBJECT
54
55public:
56 // Types
57 struct MigrationLog {
58 QString projectName;
59 QDateTime dateTime;
62 QList<FileFormatMigration::Message> messages;
63
64 QByteArray toHtml(bool isTemporary) const noexcept;
65 };
66
67 // Constructors / Destructor
68 explicit ProjectLoader(QObject* parent = nullptr) noexcept;
69 ProjectLoader(const ProjectLoader& other) = delete;
70 ~ProjectLoader() noexcept;
71
72 // Setters
73 void setAutoAssignDeviceModels(bool v) noexcept {
75 }
76
77 // General Methods
78 std::unique_ptr<Project> open(
79 std::unique_ptr<TransactionalDirectory> directory,
80 const QString& filename);
81 const std::optional<MigrationLog>& getMigrationLog() const noexcept {
82 return mMigrationLog;
83 }
84
85 // Operator Overloadings
86 ProjectLoader& operator=(const ProjectLoader& rhs) = delete;
87
88private: // Methods
89 void loadMetadata(Project& p);
90 void loadSettings(Project& p);
91 void loadOutputJobs(Project& p);
92 void loadLibrary(Project& p);
93 template <typename ElementType>
94 void loadLibraryElements(Project& p, const QString& dirname,
95 const QString& type,
96 void (ProjectLibrary::*addFunction)(ElementType&));
97 void loadCircuit(Project& p);
98 void loadErc(Project& p);
99 void loadSchematics(Project& p);
100 void loadSchematic(Project& p, const QString& relativeFilePath);
101 void loadSchematicSymbol(Schematic& s, const SExpression& node);
102 void loadSchematicBusSegment(Schematic& s, const SExpression& node);
103 void loadSchematicNetSegment(Schematic& s, const SExpression& node);
105 void loadBoards(Project& p);
106 void loadBoard(Project& p, const QString& relativeFilePath);
107 void loadBoardDeviceInstance(Board& b, const SExpression& node);
108 void loadBoardNetSegment(Board& b, const SExpression& node);
109 void loadBoardPlane(Board& b, const SExpression& node);
112
113private: // Data
115 std::optional<MigrationLog> mMigrationLog;
116};
117
118/*******************************************************************************
119 * End of File
120 ******************************************************************************/
121
122} // namespace librepcb
123
124#endif
The Board class represents a PCB of a project and is always part of a circuit.
Definition board.h:74
The Project class represents a whole (opened) project with all its content.
Definition project.h:71
The ProjectLibrary class.
Definition projectlibrary.h:52
Helper to load a librepcb::Project from the file system.
Definition projectloader.h:52
void loadSchematicUserSettings(Schematic &s)
Definition projectloader.cpp:778
void loadBoardDeviceInstance(Board &b, const SExpression &node)
Definition projectloader.cpp:892
std::unique_ptr< Project > open(std::unique_ptr< TransactionalDirectory > directory, const QString &filename)
Definition projectloader.cpp:204
void loadBoardUserSettings(Board &b)
Definition projectloader.cpp:1071
void loadSchematicBusSegment(Schematic &s, const SExpression &node)
Definition projectloader.cpp:627
void loadMetadata(Project &p)
Definition projectloader.cpp:319
void loadBoard(Project &p, const QString &relativeFilePath)
Definition projectloader.cpp:804
void loadSchematics(Project &p)
Definition projectloader.cpp:550
ProjectLoader & operator=(const ProjectLoader &rhs)=delete
void loadCircuit(Project &p)
Definition projectloader.cpp:424
bool mAutoAssignDeviceModels
Definition projectloader.h:114
void loadErc(Project &p)
Definition projectloader.cpp:534
void loadProjectUserSettings(Project &p)
Definition projectloader.cpp:1105
void loadLibraryElements(Project &p, const QString &dirname, const QString &type, void(ProjectLibrary::*addFunction)(ElementType &))
Definition projectloader.cpp:397
void loadOutputJobs(Project &p)
Definition projectloader.cpp:374
void loadBoardPlane(Board &b, const SExpression &node)
Definition projectloader.cpp:1037
std::optional< MigrationLog > mMigrationLog
Definition projectloader.h:115
void loadLibrary(Project &p)
Definition projectloader.cpp:383
void loadSchematicSymbol(Schematic &s, const SExpression &node)
Definition projectloader.cpp:605
void loadBoardNetSegment(Board &b, const SExpression &node)
Definition projectloader.cpp:929
void loadSettings(Project &p)
Definition projectloader.cpp:335
void setAutoAssignDeviceModels(bool v) noexcept
Definition projectloader.h:73
void loadBoards(Project &p)
Definition projectloader.cpp:793
const std::optional< MigrationLog > & getMigrationLog() const noexcept
Definition projectloader.h:81
void loadSchematic(Project &p, const QString &relativeFilePath)
Definition projectloader.cpp:562
void loadSchematicNetSegment(Schematic &s, const SExpression &node)
Definition projectloader.cpp:682
The SExpression class.
Definition sexpression.h:69
The Schematic class represents one schematic page of a project and is always part of a circuit.
Definition schematic.h:81
The Version class represents a version number in the format "1.42.7".
Definition version.h:58
Definition occmodel.cpp:77
Definition projectloader.h:57
QDateTime dateTime
Definition projectloader.h:59
Version toVersion
Definition projectloader.h:61
QString projectName
Definition projectloader.h:58
QByteArray toHtml(bool isTemporary) const noexcept
Definition projectloader.cpp:120
Version fromVersion
Definition projectloader.h:60
QList< FileFormatMigration::Message > messages
Sorted.
Definition projectloader.h:62