LibrePCB Developers Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
libraryeditor.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_EDITOR_LIBRARYEDITOR_H
21#define LIBREPCB_EDITOR_LIBRARYEDITOR_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../graphics/graphicslayer.h"
27#include "editorwidgetbase.h"
29
31
32#include <QtCore>
33#include <QtWidgets>
34
35#include <memory>
36
37/*******************************************************************************
38 * Namespace / Forward Declarations
39 ******************************************************************************/
40namespace librepcb {
41
42class Library;
43class TransactionalFileSystem;
44class Workspace;
45
46namespace editor {
47
48class ExclusiveActionGroup;
49class LibraryOverviewWidget;
50class SearchToolBar;
51class StandardEditorCommandHandler;
52class UndoStackActionGroup;
53
54namespace Ui {
55class LibraryEditor;
56}
57
58/*******************************************************************************
59 * Class LibraryEditor
60 ******************************************************************************/
61
65class LibraryEditor final : public QMainWindow,
67 Q_OBJECT
68
69public:
70 // Constructors / Destructor
71 LibraryEditor() = delete;
72 LibraryEditor(const LibraryEditor& other) = delete;
73 LibraryEditor(Workspace& ws, const FilePath& libFp, bool readOnly);
74 ~LibraryEditor() noexcept;
75
80 const QString& name) const noexcept override {
81 foreach (const std::shared_ptr<GraphicsLayer>& layer, mLayers) {
82 if (layer->getName() == name) {
83 return layer;
84 }
85 }
86 return nullptr;
87 }
88
92 QList<std::shared_ptr<GraphicsLayer>> getAllLayers() const noexcept override {
93 return mLayers;
94 }
95
119 bool closeAndDestroy(bool askForSave) noexcept;
120
121 // Operator Overloadings
122 LibraryEditor& operator=(const LibraryEditor& rhs) = delete;
123
124signals:
126
127private: // GUI Event Handlers
128 void newComponentCategoryTriggered() noexcept;
129 void newPackageCategoryTriggered() noexcept;
130 void newSymbolTriggered() noexcept;
131 void newPackageTriggered() noexcept;
132 void newComponentTriggered() noexcept;
133 void newDeviceTriggered() noexcept;
134 void editComponentCategoryTriggered(const FilePath& fp) noexcept;
135 void editPackageCategoryTriggered(const FilePath& fp) noexcept;
136 void editSymbolTriggered(const FilePath& fp) noexcept;
137 void editPackageTriggered(const FilePath& fp) noexcept;
138 void editComponentTriggered(const FilePath& fp) noexcept;
139 void editDeviceTriggered(const FilePath& fp) noexcept;
140 void duplicateComponentCategoryTriggered(const FilePath& fp) noexcept;
141 void duplicatePackageCategoryTriggered(const FilePath& fp) noexcept;
142 void duplicateSymbolTriggered(const FilePath& fp) noexcept;
143 void duplicatePackageTriggered(const FilePath& fp) noexcept;
144 void duplicateComponentTriggered(const FilePath& fp) noexcept;
145 void duplicateDeviceTriggered(const FilePath& fp) noexcept;
146 void closeTabIfOpen(const FilePath& fp) noexcept;
147 template <typename EditWidgetType>
149 bool isNewElement) noexcept;
150 void currentTabChanged(int index) noexcept;
151 void tabCloseRequested(int index) noexcept;
152 bool closeTab(int index) noexcept;
153
154private: // Methods
155 void createActions() noexcept;
156 void createToolBars() noexcept;
157 void createMenus() noexcept;
158 EditorWidgetBase::Context createContext(bool isNewElement) noexcept;
160 const QSet<EditorWidgetBase::Feature>& features) noexcept;
162 void newLibraryElement(NewElementWizardContext::ElementType type);
164 const FilePath& fp);
165 void editNewLibraryElement(NewElementWizardContext::ElementType type,
166 const FilePath& fp);
167 void updateTabTitles() noexcept;
168 void tabCountChanged() noexcept;
169 void keyPressEvent(QKeyEvent* event) noexcept override;
170 void closeEvent(QCloseEvent* event) noexcept override;
171 bool closeAllTabs(bool withNonClosable, bool askForSave) noexcept;
172 void addLayer(const QString& name) noexcept;
173
174private: // Data
177 QScopedPointer<Ui::LibraryEditor> mUi;
179 QList<std::shared_ptr<GraphicsLayer>> mLayers;
182
183 // Actions
184 QScopedPointer<QAction> mActionAboutLibrePcb;
185 QScopedPointer<QAction> mActionAboutQt;
186 QScopedPointer<QAction> mActionOnlineDocumentation;
187 QScopedPointer<QAction> mActionKeyboardShortcutsReference;
188 QScopedPointer<QAction> mActionWebsite;
189 QScopedPointer<QAction> mActionSave;
190 QScopedPointer<QAction> mActionSaveAll;
191 QScopedPointer<QAction> mActionCloseTab;
192 QScopedPointer<QAction> mActionCloseAllTabs;
193 QScopedPointer<QAction> mActionCloseWindow;
194 QScopedPointer<QAction> mActionQuit;
195 QScopedPointer<QAction> mActionFileManager;
196 QScopedPointer<QAction> mActionRescanLibraries;
197 QScopedPointer<QAction> mActionImportDxf;
198 QScopedPointer<QAction> mActionImportEagleLibrary;
199 QScopedPointer<QAction> mActionImportKiCadLibrary;
200 QScopedPointer<QAction> mActionExportImage;
201 QScopedPointer<QAction> mActionExportPdf;
202 QScopedPointer<QAction> mActionPrint;
203 QScopedPointer<QAction> mActionNewElement;
204 QScopedPointer<QAction> mActionNextPage;
205 QScopedPointer<QAction> mActionPreviousPage;
206 QScopedPointer<QAction> mActionFind;
207 QScopedPointer<QAction> mActionSelectAll;
208 QScopedPointer<QAction> mActionGridProperties;
209 QScopedPointer<QAction> mActionGridIncrease;
210 QScopedPointer<QAction> mActionGridDecrease;
211 QScopedPointer<QAction> mActionToggleBgImage;
212 QScopedPointer<QAction> mActionZoomFit;
213 QScopedPointer<QAction> mActionZoomIn;
214 QScopedPointer<QAction> mActionZoomOut;
215 QScopedPointer<QAction> mActionToggle3D;
216 QScopedPointer<QAction> mActionUndo;
217 QScopedPointer<QAction> mActionRedo;
218 QScopedPointer<QAction> mActionCut;
219 QScopedPointer<QAction> mActionCopy;
220 QScopedPointer<QAction> mActionPaste;
221 QScopedPointer<QAction> mActionMoveLeft;
222 QScopedPointer<QAction> mActionMoveRight;
223 QScopedPointer<QAction> mActionMoveUp;
224 QScopedPointer<QAction> mActionMoveDown;
225 QScopedPointer<QAction> mActionRotateCcw;
226 QScopedPointer<QAction> mActionRotateCw;
227 QScopedPointer<QAction> mActionMirrorHorizontal;
228 QScopedPointer<QAction> mActionMirrorVertical;
229 QScopedPointer<QAction> mActionFlipHorizontal;
230 QScopedPointer<QAction> mActionFlipVertical;
231 QScopedPointer<QAction> mActionMoveAlign;
232 QScopedPointer<QAction> mActionSnapToGrid;
233 QScopedPointer<QAction> mActionProperties;
234 QScopedPointer<QAction> mActionRemove;
235 QScopedPointer<QAction> mActionHelperTools;
236 QScopedPointer<QAction> mActionGenerateOutline;
237 QScopedPointer<QAction> mActionGenerateCourtyard;
238 QScopedPointer<QAction> mActionAbort;
239 QScopedPointer<QAction> mActionToolSelect;
240 QScopedPointer<QAction> mActionToolLine;
241 QScopedPointer<QAction> mActionToolRect;
242 QScopedPointer<QAction> mActionToolPolygon;
243 QScopedPointer<QAction> mActionToolCircle;
244 QScopedPointer<QAction> mActionToolArc;
245 QScopedPointer<QAction> mActionToolText;
246 QScopedPointer<QAction> mActionToolName;
247 QScopedPointer<QAction> mActionToolValue;
248 QScopedPointer<QAction> mActionToolPin;
249 QScopedPointer<QAction> mActionToolSmtPadStandard;
250 QScopedPointer<QAction> mActionToolThtPad;
251 QScopedPointer<QAction> mActionToolSpecialPadThermal;
252 QScopedPointer<QAction> mActionToolSpecialPadBga;
253 QScopedPointer<QAction> mActionToolSpecialPadEdgeConnector;
254 QScopedPointer<QAction> mActionToolSpecialPadTest;
255 QScopedPointer<QAction> mActionToolSpecialPadLocalFiducial;
256 QScopedPointer<QAction> mActionToolSpecialPadGlobalFiducial;
257 QScopedPointer<QAction> mActionToolZone;
258 QScopedPointer<QAction> mActionToolHole;
259 QScopedPointer<QAction> mActionToolMeasure;
260 QScopedPointer<QAction> mActionReNumberPads;
261
262 // Action groups
265
266 // Toolbars
267 QScopedPointer<QToolBar> mToolBarFile;
268 QScopedPointer<QToolBar> mToolBarEdit;
269 QScopedPointer<QToolBar> mToolBarView;
271 QScopedPointer<QToolBar> mToolBarCommand;
272 QScopedPointer<QToolBar> mToolBarTools;
273};
274
275/*******************************************************************************
276 * End of File
277 ******************************************************************************/
278
279} // namespace editor
280} // namespace librepcb
281
282#endif
This class represents absolute, well-formatted paths to files or directories.
Definition filepath.h:127
The Library class represents a library directory.
Definition library.h:46
The Workspace class represents a workspace with all its data (library, projects, settings,...
Definition workspace.h:54
The EditorWidgetBase class.
Definition editorwidgetbase.h:61
The ExclusiveActionGroup class groups multiple QAction's together.
Definition exclusiveactiongroup.h:54
The GraphicsLayer class represents a graphical layer used in schematics and boards.
Definition graphicslayer.h:53
The IF_GraphicsLayerProvider class defines an interface for classes which provide layers.
Definition graphicslayer.h:111
The LibraryEditor class.
Definition libraryeditor.h:66
QScopedPointer< QAction > mActionGenerateOutline
Definition libraryeditor.h:236
EditorWidgetBase * mCurrentEditorWidget
Definition libraryeditor.h:180
void setAvailableFeatures(const QSet< EditorWidgetBase::Feature > &features) noexcept
Definition libraryeditor.cpp:997
EditorWidgetBase::Context createContext(bool isNewElement) noexcept
Definition libraryeditor.cpp:990
QScopedPointer< QAction > mActionZoomFit
Definition libraryeditor.h:212
void duplicatePackageTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:364
QScopedPointer< QAction > mActionExportImage
Definition libraryeditor.h:200
QScopedPointer< QAction > mActionToolSpecialPadEdgeConnector
Definition libraryeditor.h:253
void duplicateLibraryElement(NewElementWizardContext::ElementType type, const FilePath &fp)
Definition libraryeditor.cpp:1081
QScopedPointer< QAction > mActionSave
Definition libraryeditor.h:189
QScopedPointer< UndoStackActionGroup > mUndoStackActionGroup
Definition libraryeditor.h:263
QScopedPointer< QAction > mActionCut
Definition libraryeditor.h:218
void closeTabIfOpen(const FilePath &fp) noexcept
Definition libraryeditor.cpp:281
void newDeviceTriggered() noexcept
Definition libraryeditor.cpp:319
QScopedPointer< QAction > mActionMoveAlign
Definition libraryeditor.h:231
~LibraryEditor() noexcept
Definition libraryeditor.cpp:252
QScopedPointer< QAction > mActionZoomIn
Definition libraryeditor.h:213
QScopedPointer< QAction > mActionCopy
Definition libraryeditor.h:219
QScopedPointer< QAction > mActionToolRect
Definition libraryeditor.h:241
QScopedPointer< QAction > mActionKeyboardShortcutsReference
Definition libraryeditor.h:187
void addLayer(const QString &name) noexcept
Definition libraryeditor.cpp:1191
QScopedPointer< QAction > mActionMirrorHorizontal
Definition libraryeditor.h:227
void newLibraryElement(NewElementWizardContext::ElementType type)
Definition libraryeditor.cpp:1070
QScopedPointer< QAction > mActionQuit
Definition libraryeditor.h:194
QScopedPointer< ExclusiveActionGroup > mToolsActionGroup
Definition libraryeditor.h:264
QScopedPointer< QAction > mActionToolHole
Definition libraryeditor.h:258
QScopedPointer< QAction > mActionMoveDown
Definition libraryeditor.h:224
QScopedPointer< QAction > mActionGridIncrease
Definition libraryeditor.h:209
QScopedPointer< QAction > mActionHelperTools
Definition libraryeditor.h:235
void duplicateComponentTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:368
QScopedPointer< QAction > mActionToolValue
Definition libraryeditor.h:247
QScopedPointer< QAction > mActionCloseTab
Definition libraryeditor.h:191
QScopedPointer< QAction > mActionCloseAllTabs
Definition libraryeditor.h:192
QScopedPointer< QAction > mActionGridProperties
Definition libraryeditor.h:208
void setActiveEditorWidget(EditorWidgetBase *widget)
Definition libraryeditor.cpp:1045
void newPackageCategoryTriggered() noexcept
Definition libraryeditor.cpp:303
QScopedPointer< QAction > mActionReNumberPads
Definition libraryeditor.h:260
bool closeAllTabs(bool withNonClosable, bool askForSave) noexcept
Definition libraryeditor.cpp:1169
QList< std::shared_ptr< GraphicsLayer > > mLayers
Definition libraryeditor.h:179
QScopedPointer< QAction > mActionToolSpecialPadTest
Definition libraryeditor.h:254
QScopedPointer< QAction > mActionAbort
Definition libraryeditor.h:238
QScopedPointer< QToolBar > mToolBarEdit
Definition libraryeditor.h:268
QScopedPointer< QAction > mActionRotateCcw
Definition libraryeditor.h:225
void createMenus() noexcept
Definition libraryeditor.cpp:880
QScopedPointer< QAction > mActionToolArc
Definition libraryeditor.h:244
QScopedPointer< QAction > mActionRescanLibraries
Definition libraryeditor.h:196
QScopedPointer< QAction > mActionAboutLibrePcb
Definition libraryeditor.h:184
void editNewLibraryElement(NewElementWizardContext::ElementType type, const FilePath &fp)
Definition libraryeditor.cpp:1092
bool mIsOpenedReadOnly
Definition libraryeditor.h:176
bool closeTab(int index) noexcept
Definition libraryeditor.cpp:424
QScopedPointer< QAction > mActionSelectAll
Definition libraryeditor.h:207
std::shared_ptr< GraphicsLayer > getLayer(const QString &name) const noexcept override
Definition libraryeditor.h:79
QScopedPointer< QToolBar > mToolBarTools
Definition libraryeditor.h:272
QScopedPointer< QAction > mActionMoveUp
Definition libraryeditor.h:223
QScopedPointer< QToolBar > mToolBarFile
Definition libraryeditor.h:267
void updateTabTitles() noexcept
Definition libraryeditor.cpp:1118
QScopedPointer< QAction > mActionPreviousPage
Definition libraryeditor.h:205
QScopedPointer< QAction > mActionImportDxf
Definition libraryeditor.h:197
void createToolBars() noexcept
Definition libraryeditor.cpp:771
QScopedPointer< QAction > mActionCloseWindow
Definition libraryeditor.h:193
void duplicateSymbolTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:360
void currentTabChanged(int index) noexcept
Definition libraryeditor.cpp:409
QScopedPointer< QAction > mActionToolSelect
Definition libraryeditor.h:239
QList< std::shared_ptr< GraphicsLayer > > getAllLayers() const noexcept override
Definition libraryeditor.h:92
QScopedPointer< QAction > mActionWebsite
Definition libraryeditor.h:188
QScopedPointer< QAction > mActionToolSpecialPadGlobalFiducial
Definition libraryeditor.h:256
void editDeviceTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:344
QScopedPointer< QAction > mActionUndo
Definition libraryeditor.h:216
QScopedPointer< QAction > mActionRotateCw
Definition libraryeditor.h:226
QScopedPointer< SearchToolBar > mToolBarSearch
Definition libraryeditor.h:270
QScopedPointer< QAction > mActionToolLine
Definition libraryeditor.h:240
QScopedPointer< QAction > mActionFlipVertical
Definition libraryeditor.h:230
QScopedPointer< QAction > mActionMoveLeft
Definition libraryeditor.h:221
QScopedPointer< QToolBar > mToolBarCommand
Definition libraryeditor.h:271
QScopedPointer< QAction > mActionProperties
Definition libraryeditor.h:233
bool closeAndDestroy(bool askForSave) noexcept
Close the library editor (this will destroy this object!)
Definition libraryeditor.cpp:262
QScopedPointer< StandardEditorCommandHandler > mStandardCommandHandler
Definition libraryeditor.h:178
QScopedPointer< QAction > mActionSaveAll
Definition libraryeditor.h:190
void editComponentCategoryTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:323
QScopedPointer< QAction > mActionToolCircle
Definition libraryeditor.h:243
QScopedPointer< QAction > mActionExportPdf
Definition libraryeditor.h:201
void tabCountChanged() noexcept
Definition libraryeditor.cpp:1144
QScopedPointer< QAction > mActionToggleBgImage
Definition libraryeditor.h:211
QScopedPointer< QToolBar > mToolBarView
Definition libraryeditor.h:269
void editComponentTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:340
Library * mLibrary
Definition libraryeditor.h:181
QScopedPointer< QAction > mActionToolSmtPadStandard
Definition libraryeditor.h:249
void newComponentCategoryTriggered() noexcept
Definition libraryeditor.cpp:299
QScopedPointer< QAction > mActionToolSpecialPadThermal
Definition libraryeditor.h:251
QScopedPointer< QAction > mActionToolName
Definition libraryeditor.h:246
QScopedPointer< QAction > mActionToolPolygon
Definition libraryeditor.h:242
void newSymbolTriggered() noexcept
Definition libraryeditor.cpp:307
void editPackageCategoryTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:328
QScopedPointer< QAction > mActionImportKiCadLibrary
Definition libraryeditor.h:199
Workspace & mWorkspace
Definition libraryeditor.h:175
QScopedPointer< QAction > mActionGenerateCourtyard
Definition libraryeditor.h:237
QScopedPointer< QAction > mActionOnlineDocumentation
Definition libraryeditor.h:186
QScopedPointer< QAction > mActionFileManager
Definition libraryeditor.h:195
void newComponentTriggered() noexcept
Definition libraryeditor.cpp:315
QScopedPointer< QAction > mActionFind
Definition libraryeditor.h:206
void editSymbolTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:332
QScopedPointer< Ui::LibraryEditor > mUi
Definition libraryeditor.h:177
QScopedPointer< QAction > mActionMoveRight
Definition libraryeditor.h:222
void keyPressEvent(QKeyEvent *event) noexcept override
Definition libraryeditor.cpp:1148
QScopedPointer< QAction > mActionImportEagleLibrary
Definition libraryeditor.h:198
void duplicateComponentCategoryTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:348
void newPackageTriggered() noexcept
Definition libraryeditor.cpp:311
void closeEvent(QCloseEvent *event) noexcept override
Definition libraryeditor.cpp:1161
void duplicateDeviceTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:372
LibraryEditor(const LibraryEditor &other)=delete
QScopedPointer< QAction > mActionPaste
Definition libraryeditor.h:220
void duplicatePackageCategoryTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:354
void createActions() noexcept
Definition libraryeditor.cpp:476
QScopedPointer< QAction > mActionPrint
Definition libraryeditor.h:202
QScopedPointer< QAction > mActionGridDecrease
Definition libraryeditor.h:210
void editPackageTriggered(const FilePath &fp) noexcept
Definition libraryeditor.cpp:336
QScopedPointer< QAction > mActionNextPage
Definition libraryeditor.h:204
QScopedPointer< QAction > mActionRedo
Definition libraryeditor.h:217
LibraryEditor & operator=(const LibraryEditor &rhs)=delete
QScopedPointer< QAction > mActionToolThtPad
Definition libraryeditor.h:250
void tabCloseRequested(int index) noexcept
Definition libraryeditor.cpp:414
QScopedPointer< QAction > mActionAboutQt
Definition libraryeditor.h:185
QScopedPointer< QAction > mActionMirrorVertical
Definition libraryeditor.h:228
QScopedPointer< QAction > mActionToolMeasure
Definition libraryeditor.h:259
QScopedPointer< QAction > mActionRemove
Definition libraryeditor.h:234
QScopedPointer< QAction > mActionFlipHorizontal
Definition libraryeditor.h:229
QScopedPointer< QAction > mActionToolSpecialPadLocalFiducial
Definition libraryeditor.h:255
QScopedPointer< QAction > mActionToolSpecialPadBga
Definition libraryeditor.h:252
QScopedPointer< QAction > mActionToolZone
Definition libraryeditor.h:257
QScopedPointer< QAction > mActionZoomOut
Definition libraryeditor.h:214
QScopedPointer< QAction > mActionToggle3D
Definition libraryeditor.h:215
void editLibraryElementTriggered(const FilePath &fp, bool isNewElement) noexcept
Definition libraryeditor.cpp:377
QScopedPointer< QAction > mActionToolText
Definition libraryeditor.h:245
QScopedPointer< QAction > mActionToolPin
Definition libraryeditor.h:248
QScopedPointer< QAction > mActionNewElement
Definition libraryeditor.h:203
QScopedPointer< QAction > mActionSnapToGrid
Definition libraryeditor.h:232
The NewElementWizardContext class.
Definition newelementwizardcontext.h:58
The SearchToolBar class.
Definition searchtoolbar.h:44
Helper to handle some of the librepcb::editor::EditorCommand actions.
Definition standardeditorcommandhandler.h:48
The UndoStackActionGroup class groups an undo-QAction and redo-QAction together and optionally connec...
Definition undostackactiongroup.h:45
Definition occmodel.cpp:77
Definition uuid.h:186