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 /******************************************************************************* 21 * Includes 22 ******************************************************************************/ 23 #include "cmdprojectlibraryremoveelement.h" 24 25 #include "../projectlibrary.h" 26 27 #include <librepcb/library/elements.h> 28 29 #include <QtCore> 30 31 /******************************************************************************* 32 * Namespace 33 ******************************************************************************/ 34 namespace librepcb { 35 namespace project { 36 37 /******************************************************************************* 38 * Constructors / Destructor 39 ******************************************************************************/ 40 41 template <typename ElementType> CmdProjectLibraryRemoveElement(ProjectLibrary & library,ElementType & element)42CmdProjectLibraryRemoveElement<ElementType>::CmdProjectLibraryRemoveElement( 43 ProjectLibrary& library, ElementType& element) noexcept 44 : UndoCommand(tr("Remove element from library")), 45 mLibrary(library), 46 mElement(element) { 47 } 48 49 template <typename ElementType> 50 CmdProjectLibraryRemoveElement< ~CmdProjectLibraryRemoveElement()51 ElementType>::~CmdProjectLibraryRemoveElement() noexcept { 52 } 53 54 /******************************************************************************* 55 * Inherited from UndoCommand 56 ******************************************************************************/ 57 58 template <typename ElementType> performExecute()59bool CmdProjectLibraryRemoveElement<ElementType>::performExecute() { 60 performRedo(); // can throw 61 62 return true; 63 } 64 65 template <typename ElementType> performUndo()66void CmdProjectLibraryRemoveElement<ElementType>::performUndo() { 67 addElement(); // can throw 68 } 69 70 template <typename ElementType> performRedo()71void CmdProjectLibraryRemoveElement<ElementType>::performRedo() { 72 removeElement(); // can throw 73 } 74 75 /******************************************************************************* 76 * Private Methods 77 ******************************************************************************/ 78 79 template <> addElement()80void CmdProjectLibraryRemoveElement<library::Symbol>::addElement() { 81 mLibrary.addSymbol(mElement); 82 } 83 84 template <> addElement()85void CmdProjectLibraryRemoveElement<library::Package>::addElement() { 86 mLibrary.addPackage(mElement); 87 } 88 89 template <> addElement()90void CmdProjectLibraryRemoveElement<library::Component>::addElement() { 91 mLibrary.addComponent(mElement); 92 } 93 94 template <> addElement()95void CmdProjectLibraryRemoveElement<library::Device>::addElement() { 96 mLibrary.addDevice(mElement); 97 } 98 99 template <> removeElement()100void CmdProjectLibraryRemoveElement<library::Symbol>::removeElement() { 101 mLibrary.removeSymbol(mElement); 102 } 103 104 template <> removeElement()105void CmdProjectLibraryRemoveElement<library::Package>::removeElement() { 106 mLibrary.removePackage(mElement); 107 } 108 109 template <> removeElement()110void CmdProjectLibraryRemoveElement<library::Component>::removeElement() { 111 mLibrary.removeComponent(mElement); 112 } 113 114 template <> removeElement()115void CmdProjectLibraryRemoveElement<library::Device>::removeElement() { 116 mLibrary.removeDevice(mElement); 117 } 118 119 /******************************************************************************* 120 * Explicit Template Instantiation 121 ******************************************************************************/ 122 123 template class CmdProjectLibraryRemoveElement<library::Symbol>; 124 template class CmdProjectLibraryRemoveElement<library::Package>; 125 template class CmdProjectLibraryRemoveElement<library::Component>; 126 template class CmdProjectLibraryRemoveElement<library::Device>; 127 128 /******************************************************************************* 129 * End of File 130 ******************************************************************************/ 131 132 } // namespace project 133 } // namespace librepcb 134