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