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 "cmdboarddesignrulesmodify.h"
24 
25 #include "../board.h"
26 
27 #include <QtCore>
28 
29 /*******************************************************************************
30  *  Namespace
31  ******************************************************************************/
32 namespace librepcb {
33 namespace project {
34 
35 /*******************************************************************************
36  *  Constructors / Destructor
37  ******************************************************************************/
38 
CmdBoardDesignRulesModify(Board & board,const BoardDesignRules & newRules)39 CmdBoardDesignRulesModify::CmdBoardDesignRulesModify(
40     Board& board, const BoardDesignRules& newRules) noexcept
41   : UndoCommand(tr("Modify board design rules")),
42     mBoard(board),
43     mOldRules(),
44     mNewRules(newRules) {
45 }
46 
~CmdBoardDesignRulesModify()47 CmdBoardDesignRulesModify::~CmdBoardDesignRulesModify() noexcept {
48 }
49 
50 /*******************************************************************************
51  *  Inherited from UndoCommand
52  ******************************************************************************/
53 
performExecute()54 bool CmdBoardDesignRulesModify::performExecute() {
55   mOldRules = mBoard.getDesignRules();  // memorize current design rules
56 
57   performRedo();  // can throw
58 
59   return true;  // TODO: determine if the design rules were really modified
60 }
61 
performUndo()62 void CmdBoardDesignRulesModify::performUndo() {
63   mBoard.getDesignRules() = mOldRules;
64   emit mBoard.attributesChanged();
65 }
66 
performRedo()67 void CmdBoardDesignRulesModify::performRedo() {
68   mBoard.getDesignRules() = mNewRules;
69   emit mBoard.attributesChanged();
70 }
71 
72 /*******************************************************************************
73  *  End of File
74  ******************************************************************************/
75 
76 }  // namespace project
77 }  // namespace librepcb
78