LibrePCB Developers Documentation
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  ******************************************************************************/
40 namespace librepcb {
41 
42 class Library;
43 class TransactionalFileSystem;
44 class Workspace;
45 
46 namespace editor {
47 
48 class ExclusiveActionGroup;
49 class LibraryOverviewWidget;
50 class SearchToolBar;
51 class StandardEditorCommandHandler;
52 class UndoStackActionGroup;
53 
54 namespace Ui {
55 class LibraryEditor;
56 }
57 
58 /*******************************************************************************
59  * Class LibraryEditor
60  ******************************************************************************/
61 
65 class LibraryEditor final : public QMainWindow,
67  Q_OBJECT
68 
69 public:
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 
79  std::shared_ptr<GraphicsLayer> getLayer(
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 
124 private: // GUI Event Handlers
125  void newComponentCategoryTriggered() noexcept;
126  void newPackageCategoryTriggered() noexcept;
127  void newSymbolTriggered() noexcept;
128  void newPackageTriggered() noexcept;
129  void newComponentTriggered() noexcept;
130  void newDeviceTriggered() noexcept;
131  void editComponentCategoryTriggered(const FilePath& fp) noexcept;
132  void editPackageCategoryTriggered(const FilePath& fp) noexcept;
133  void editSymbolTriggered(const FilePath& fp) noexcept;
134  void editPackageTriggered(const FilePath& fp) noexcept;
135  void editComponentTriggered(const FilePath& fp) noexcept;
136  void editDeviceTriggered(const FilePath& fp) noexcept;
137  void duplicateComponentCategoryTriggered(const FilePath& fp) noexcept;
138  void duplicatePackageCategoryTriggered(const FilePath& fp) noexcept;
139  void duplicateSymbolTriggered(const FilePath& fp) noexcept;
140  void duplicatePackageTriggered(const FilePath& fp) noexcept;
141  void duplicateComponentTriggered(const FilePath& fp) noexcept;
142  void duplicateDeviceTriggered(const FilePath& fp) noexcept;
143  void closeTabIfOpen(const FilePath& fp) noexcept;
144  template <typename EditWidgetType>
145  void editLibraryElementTriggered(const FilePath& fp,
146  bool isNewElement) noexcept;
147  void currentTabChanged(int index) noexcept;
148  void tabCloseRequested(int index) noexcept;
149  bool closeTab(int index) noexcept;
150 
151 private: // Methods
152  void createActions() noexcept;
153  void createToolBars() noexcept;
154  void createMenus() noexcept;
155  EditorWidgetBase::Context createContext(bool isNewElement) noexcept;
156  void setAvailableFeatures(
157  const QSet<EditorWidgetBase::Feature>& features) noexcept;
158  void setActiveEditorWidget(EditorWidgetBase* widget);
159  void newLibraryElement(NewElementWizardContext::ElementType type);
160  void duplicateLibraryElement(NewElementWizardContext::ElementType type,
161  const FilePath& fp);
162  void editNewLibraryElement(NewElementWizardContext::ElementType type,
163  const FilePath& fp);
164  void updateTabTitles() noexcept;
165  void tabCountChanged() noexcept;
166  void keyPressEvent(QKeyEvent* event) noexcept override;
167  void closeEvent(QCloseEvent* event) noexcept override;
168  bool closeAllTabs(bool withNonClosable, bool askForSave) noexcept;
169  void addLayer(const QString& name) noexcept;
170 
171 private: // Data
174  QScopedPointer<Ui::LibraryEditor> mUi;
175  QScopedPointer<StandardEditorCommandHandler> mStandardCommandHandler;
176  QList<std::shared_ptr<GraphicsLayer>> mLayers;
179 
180  // Actions
181  QScopedPointer<QAction> mActionAboutLibrePcb;
182  QScopedPointer<QAction> mActionAboutQt;
183  QScopedPointer<QAction> mActionOnlineDocumentation;
184  QScopedPointer<QAction> mActionKeyboardShortcutsReference;
185  QScopedPointer<QAction> mActionWebsite;
186  QScopedPointer<QAction> mActionSave;
187  QScopedPointer<QAction> mActionSaveAll;
188  QScopedPointer<QAction> mActionCloseTab;
189  QScopedPointer<QAction> mActionCloseAllTabs;
190  QScopedPointer<QAction> mActionCloseWindow;
191  QScopedPointer<QAction> mActionQuit;
192  QScopedPointer<QAction> mActionFileManager;
193  QScopedPointer<QAction> mActionRescanLibraries;
194  QScopedPointer<QAction> mActionImportDxf;
195  QScopedPointer<QAction> mActionImportEagleLibrary;
196  QScopedPointer<QAction> mActionExportImage;
197  QScopedPointer<QAction> mActionExportPdf;
198  QScopedPointer<QAction> mActionPrint;
199  QScopedPointer<QAction> mActionNewElement;
200  QScopedPointer<QAction> mActionNextPage;
201  QScopedPointer<QAction> mActionPreviousPage;
202  QScopedPointer<QAction> mActionFind;
203  QScopedPointer<QAction> mActionSelectAll;
204  QScopedPointer<QAction> mActionGridProperties;
205  QScopedPointer<QAction> mActionGridIncrease;
206  QScopedPointer<QAction> mActionGridDecrease;
207  QScopedPointer<QAction> mActionZoomFit;
208  QScopedPointer<QAction> mActionZoomIn;
209  QScopedPointer<QAction> mActionZoomOut;
210  QScopedPointer<QAction> mActionToggle3D;
211  QScopedPointer<QAction> mActionUndo;
212  QScopedPointer<QAction> mActionRedo;
213  QScopedPointer<QAction> mActionCut;
214  QScopedPointer<QAction> mActionCopy;
215  QScopedPointer<QAction> mActionPaste;
216  QScopedPointer<QAction> mActionMoveLeft;
217  QScopedPointer<QAction> mActionMoveRight;
218  QScopedPointer<QAction> mActionMoveUp;
219  QScopedPointer<QAction> mActionMoveDown;
220  QScopedPointer<QAction> mActionRotateCcw;
221  QScopedPointer<QAction> mActionRotateCw;
222  QScopedPointer<QAction> mActionMirrorHorizontal;
223  QScopedPointer<QAction> mActionMirrorVertical;
224  QScopedPointer<QAction> mActionFlipHorizontal;
225  QScopedPointer<QAction> mActionFlipVertical;
226  QScopedPointer<QAction> mActionSnapToGrid;
227  QScopedPointer<QAction> mActionProperties;
228  QScopedPointer<QAction> mActionRemove;
229  QScopedPointer<QAction> mActionGenerate;
230  QScopedPointer<QAction> mActionGenerateOutline;
231  QScopedPointer<QAction> mActionGenerateCourtyard;
232  QScopedPointer<QAction> mActionAbort;
233  QScopedPointer<QAction> mActionToolSelect;
234  QScopedPointer<QAction> mActionToolLine;
235  QScopedPointer<QAction> mActionToolRect;
236  QScopedPointer<QAction> mActionToolPolygon;
237  QScopedPointer<QAction> mActionToolCircle;
238  QScopedPointer<QAction> mActionToolArc;
239  QScopedPointer<QAction> mActionToolText;
240  QScopedPointer<QAction> mActionToolName;
241  QScopedPointer<QAction> mActionToolValue;
242  QScopedPointer<QAction> mActionToolPin;
243  QScopedPointer<QAction> mActionToolSmtPadStandard;
244  QScopedPointer<QAction> mActionToolThtPad;
245  QScopedPointer<QAction> mActionToolSpecialPadThermal;
246  QScopedPointer<QAction> mActionToolSpecialPadBga;
247  QScopedPointer<QAction> mActionToolSpecialPadEdgeConnector;
248  QScopedPointer<QAction> mActionToolSpecialPadTest;
249  QScopedPointer<QAction> mActionToolSpecialPadLocalFiducial;
250  QScopedPointer<QAction> mActionToolSpecialPadGlobalFiducial;
251  QScopedPointer<QAction> mActionToolZone;
252  QScopedPointer<QAction> mActionToolHole;
253  QScopedPointer<QAction> mActionToolMeasure;
254 
255  // Action groups
256  QScopedPointer<UndoStackActionGroup> mUndoStackActionGroup;
257  QScopedPointer<ExclusiveActionGroup> mToolsActionGroup;
258 
259  // Toolbars
260  QScopedPointer<QToolBar> mToolBarFile;
261  QScopedPointer<QToolBar> mToolBarEdit;
262  QScopedPointer<QToolBar> mToolBarView;
263  QScopedPointer<SearchToolBar> mToolBarSearch;
264  QScopedPointer<QToolBar> mToolBarCommand;
265  QScopedPointer<QToolBar> mToolBarTools;
266 };
267 
268 /*******************************************************************************
269  * End of File
270  ******************************************************************************/
271 
272 } // namespace editor
273 } // namespace librepcb
274 
275 #endif
QScopedPointer< QAction > mActionPrint
Definition: libraryeditor.h:198
QScopedPointer< QAction > mActionToolSmtPadStandard
Definition: libraryeditor.h:243
QScopedPointer< QAction > mActionToolSpecialPadLocalFiducial
Definition: libraryeditor.h:249
QScopedPointer< QToolBar > mToolBarEdit
Definition: libraryeditor.h:261
QScopedPointer< QAction > mActionSnapToGrid
Definition: libraryeditor.h:226
QScopedPointer< QAction > mActionToolSpecialPadGlobalFiducial
Definition: libraryeditor.h:250
QScopedPointer< QAction > mActionRedo
Definition: libraryeditor.h:212
QScopedPointer< QAction > mActionToolCircle
Definition: libraryeditor.h:237
QScopedPointer< QAction > mActionFlipVertical
Definition: libraryeditor.h:225
QScopedPointer< QAction > mActionToolZone
Definition: libraryeditor.h:251
QScopedPointer< QAction > mActionToolPin
Definition: libraryeditor.h:242
QScopedPointer< QAction > mActionCut
Definition: libraryeditor.h:213
QScopedPointer< QAction > mActionZoomFit
Definition: libraryeditor.h:207
QScopedPointer< QAction > mActionSelectAll
Definition: libraryeditor.h:203
Definition: occmodel.cpp:77
QScopedPointer< QAction > mActionGridProperties
Definition: libraryeditor.h:204
Workspace & mWorkspace
Definition: libraryeditor.h:172
QScopedPointer< QToolBar > mToolBarCommand
Definition: libraryeditor.h:264
QScopedPointer< QAction > mActionToolHole
Definition: libraryeditor.h:252
QScopedPointer< QAction > mActionAboutLibrePcb
Definition: libraryeditor.h:181
QScopedPointer< Ui::LibraryEditor > mUi
Definition: libraryeditor.h:174
QScopedPointer< QAction > mActionSave
Definition: libraryeditor.h:186
QScopedPointer< QAction > mActionQuit
Definition: libraryeditor.h:191
QScopedPointer< QAction > mActionToolName
Definition: libraryeditor.h:240
QScopedPointer< QAction > mActionToolValue
Definition: libraryeditor.h:241
QScopedPointer< QAction > mActionFlipHorizontal
Definition: libraryeditor.h:224
QScopedPointer< QToolBar > mToolBarView
Definition: libraryeditor.h:262
QScopedPointer< QAction > mActionToolMeasure
Definition: libraryeditor.h:253
QScopedPointer< QAction > mActionZoomOut
Definition: libraryeditor.h:209
QScopedPointer< QAction > mActionCloseWindow
Definition: libraryeditor.h:190
QScopedPointer< QAction > mActionNextPage
Definition: libraryeditor.h:200
QScopedPointer< QAction > mActionKeyboardShortcutsReference
Definition: libraryeditor.h:184
QScopedPointer< QAction > mActionRotateCcw
Definition: libraryeditor.h:220
QScopedPointer< QAction > mActionPaste
Definition: libraryeditor.h:215
QScopedPointer< QAction > mActionFileManager
Definition: libraryeditor.h:192
QScopedPointer< QToolBar > mToolBarTools
Definition: libraryeditor.h:265
QScopedPointer< QAction > mActionGenerateOutline
Definition: libraryeditor.h:230
ElementType
Definition: newelementwizardcontext.h:77
QScopedPointer< SearchToolBar > mToolBarSearch
Definition: libraryeditor.h:263
QScopedPointer< QAction > mActionMirrorVertical
Definition: libraryeditor.h:223
QScopedPointer< QAction > mActionCloseTab
Definition: libraryeditor.h:188
QScopedPointer< QAction > mActionRotateCw
Definition: libraryeditor.h:221
QScopedPointer< QAction > mActionToolArc
Definition: libraryeditor.h:238
QScopedPointer< QAction > mActionImportDxf
Definition: libraryeditor.h:194
QScopedPointer< QAction > mActionToolLine
Definition: libraryeditor.h:234
QScopedPointer< QAction > mActionToolSpecialPadBga
Definition: libraryeditor.h:246
The IF_GraphicsLayerProvider class defines an interface for classes which provide layers...
Definition: graphicslayer.h:111
QScopedPointer< UndoStackActionGroup > mUndoStackActionGroup
Definition: libraryeditor.h:256
QScopedPointer< QAction > mActionAboutQt
Definition: libraryeditor.h:182
QScopedPointer< QAction > mActionGridIncrease
Definition: libraryeditor.h:205
QScopedPointer< QAction > mActionZoomIn
Definition: libraryeditor.h:208
QScopedPointer< QAction > mActionMoveDown
Definition: libraryeditor.h:219
std::shared_ptr< GraphicsLayer > getLayer(const QString &name) const noexcept override
Definition: libraryeditor.h:79
QScopedPointer< QAction > mActionMoveLeft
Definition: libraryeditor.h:216
QScopedPointer< QAction > mActionMirrorHorizontal
Definition: libraryeditor.h:222
QScopedPointer< QAction > mActionRescanLibraries
Definition: libraryeditor.h:193
This class represents absolute, well-formatted paths to files or directories.
Definition: filepath.h:129
QScopedPointer< QAction > mActionToolSelect
Definition: libraryeditor.h:233
QScopedPointer< QAction > mActionImportEagleLibrary
Definition: libraryeditor.h:195
QScopedPointer< QAction > mActionSaveAll
Definition: libraryeditor.h:187
bool mIsOpenedReadOnly
Definition: libraryeditor.h:173
EditorWidgetBase * mCurrentEditorWidget
Definition: libraryeditor.h:177
QScopedPointer< QAction > mActionToggle3D
Definition: libraryeditor.h:210
QScopedPointer< QToolBar > mToolBarFile
Definition: libraryeditor.h:260
QList< std::shared_ptr< GraphicsLayer > > mLayers
Definition: libraryeditor.h:176
QScopedPointer< ExclusiveActionGroup > mToolsActionGroup
Definition: libraryeditor.h:257
QScopedPointer< QAction > mActionMoveRight
Definition: libraryeditor.h:217
QScopedPointer< QAction > mActionGridDecrease
Definition: libraryeditor.h:206
QScopedPointer< QAction > mActionToolPolygon
Definition: libraryeditor.h:236
QScopedPointer< QAction > mActionRemove
Definition: libraryeditor.h:228
The Library class represents a library directory.
Definition: library.h:46
QScopedPointer< QAction > mActionToolSpecialPadEdgeConnector
Definition: libraryeditor.h:247
QScopedPointer< QAction > mActionProperties
Definition: libraryeditor.h:227
QScopedPointer< QAction > mActionUndo
Definition: libraryeditor.h:211
QScopedPointer< QAction > mActionToolThtPad
Definition: libraryeditor.h:244
QScopedPointer< QAction > mActionToolText
Definition: libraryeditor.h:239
The EditorWidgetBase class.
Definition: editorwidgetbase.h:62
QScopedPointer< QAction > mActionNewElement
Definition: libraryeditor.h:199
QScopedPointer< QAction > mActionExportImage
Definition: libraryeditor.h:196
QScopedPointer< StandardEditorCommandHandler > mStandardCommandHandler
Definition: libraryeditor.h:175
Library * mLibrary
Definition: libraryeditor.h:178
QScopedPointer< QAction > mActionToolSpecialPadTest
Definition: libraryeditor.h:248
QScopedPointer< QAction > mActionMoveUp
Definition: libraryeditor.h:218
QScopedPointer< QAction > mActionFind
Definition: libraryeditor.h:202
QScopedPointer< QAction > mActionToolSpecialPadThermal
Definition: libraryeditor.h:245
QScopedPointer< QAction > mActionGenerate
Definition: libraryeditor.h:229
QScopedPointer< QAction > mActionToolRect
Definition: libraryeditor.h:235
QScopedPointer< QAction > mActionPreviousPage
Definition: libraryeditor.h:201
The LibraryEditor class.
Definition: libraryeditor.h:65
QList< std::shared_ptr< GraphicsLayer > > getAllLayers() const noexcept override
Definition: libraryeditor.h:92
QScopedPointer< QAction > mActionOnlineDocumentation
Definition: libraryeditor.h:183
Definition: editorwidgetbase.h:68
QScopedPointer< QAction > mActionCopy
Definition: libraryeditor.h:214
QScopedPointer< QAction > mActionAbort
Definition: libraryeditor.h:232
QScopedPointer< QAction > mActionExportPdf
Definition: libraryeditor.h:197
QScopedPointer< QAction > mActionWebsite
Definition: libraryeditor.h:185
The Workspace class represents a workspace with all its data (library, projects, settings, ...)
Definition: workspace.h:54
QScopedPointer< QAction > mActionCloseAllTabs
Definition: libraryeditor.h:189
QScopedPointer< QAction > mActionGenerateCourtyard
Definition: libraryeditor.h:231