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_LIBRARY_EDITOR_SYMBOLEDITORWIDGET_H 21 #define LIBREPCB_LIBRARY_EDITOR_SYMBOLEDITORWIDGET_H 22 23 /******************************************************************************* 24 * Includes 25 ******************************************************************************/ 26 #include "../common/categorylisteditorwidget.h" 27 #include "../common/editorwidgetbase.h" 28 29 #include <librepcb/common/graphics/if_graphicsvieweventhandler.h> 30 31 #include <QtCore> 32 #include <QtWidgets> 33 34 /******************************************************************************* 35 * Namespace / Forward Declarations 36 ******************************************************************************/ 37 namespace librepcb { 38 39 class GridProperties; 40 class GraphicsScene; 41 42 namespace library { 43 44 class Symbol; 45 class SymbolGraphicsItem; 46 47 namespace editor { 48 49 class SymbolEditorFsm; 50 51 namespace Ui { 52 class SymbolEditorWidget; 53 } 54 55 /******************************************************************************* 56 * Class SymbolEditorWidget 57 ******************************************************************************/ 58 59 /** 60 * @brief The SymbolEditorWidget class 61 */ 62 class SymbolEditorWidget final : public EditorWidgetBase, 63 public IF_GraphicsViewEventHandler { 64 Q_OBJECT 65 66 public: 67 // Constructors / Destructor 68 SymbolEditorWidget() = delete; 69 SymbolEditorWidget(const SymbolEditorWidget& other) = delete; 70 SymbolEditorWidget(const Context& context, const FilePath& fp, 71 QWidget* parent = nullptr); 72 ~SymbolEditorWidget() noexcept; 73 74 // Getters hasGraphicalEditor()75 virtual bool hasGraphicalEditor() const noexcept override { return true; } 76 77 // Setters 78 void setToolsActionGroup(ExclusiveActionGroup* group) noexcept override; 79 void setStatusBar(StatusBar* statusbar) noexcept override; 80 81 // Operator Overloadings 82 SymbolEditorWidget& operator=(const SymbolEditorWidget& rhs) = delete; 83 84 public slots: 85 bool save() noexcept override; 86 bool selectAll() noexcept override; 87 bool cut() noexcept override; 88 bool copy() noexcept override; 89 bool paste() noexcept override; 90 bool rotateCw() noexcept override; 91 bool rotateCcw() noexcept override; 92 bool mirror() noexcept override; 93 bool remove() noexcept override; 94 bool zoomIn() noexcept override; 95 bool zoomOut() noexcept override; 96 bool zoomAll() noexcept override; 97 bool abortCommand() noexcept override; 98 bool importDxf() noexcept override; 99 bool editGridProperties() noexcept override; 100 101 private: // Methods 102 void updateMetadata() noexcept; 103 QString commitMetadata() noexcept; 104 /// @copydoc librepcb::IF_GraphicsViewEventHandler::graphicsViewEventHandler() 105 bool graphicsViewEventHandler(QEvent* event) noexcept override; 106 bool toolChangeRequested(Tool newTool) noexcept override; 107 bool isInterfaceBroken() const noexcept override; 108 bool runChecks(LibraryElementCheckMessageList& msgs) const override; 109 template <typename MessageType> 110 void fixMsg(const MessageType& msg); 111 template <typename MessageType> 112 bool fixMsgHelper(std::shared_ptr<const LibraryElementCheckMessage> msg, 113 bool applyFix); 114 bool processCheckMessage( 115 std::shared_ptr<const LibraryElementCheckMessage> msg, 116 bool applyFix) override; 117 118 private: // Data 119 QScopedPointer<Ui::SymbolEditorWidget> mUi; 120 QScopedPointer<ComponentCategoryListEditorWidget> mCategoriesEditorWidget; 121 QScopedPointer<GraphicsScene> mGraphicsScene; 122 QScopedPointer<Symbol> mSymbol; 123 QScopedPointer<SymbolGraphicsItem> mGraphicsItem; 124 QScopedPointer<SymbolEditorFsm> mFsm; 125 126 // broken interface detection 127 QSet<Uuid> mOriginalSymbolPinUuids; 128 }; 129 130 /******************************************************************************* 131 * End of File 132 ******************************************************************************/ 133 134 } // namespace editor 135 } // namespace library 136 } // namespace librepcb 137 138 #endif // LIBREPCB_LIBRARY_EDITOR_SYMBOLEDITORWIDGET_H 139