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 "cmdboardnetpointedit.h"
24
25 #include "../items/bi_netpoint.h"
26
27 #include <QtCore>
28
29 /*******************************************************************************
30 * Namespace
31 ******************************************************************************/
32 namespace librepcb {
33 namespace project {
34
35 /*******************************************************************************
36 * Constructors / Destructor
37 ******************************************************************************/
38
CmdBoardNetPointEdit(BI_NetPoint & point)39 CmdBoardNetPointEdit::CmdBoardNetPointEdit(BI_NetPoint& point) noexcept
40 : UndoCommand(tr("Edit netpoint")),
41 mNetPoint(point),
42 mOldPos(point.getPosition()),
43 mNewPos(mOldPos) {
44 }
45
~CmdBoardNetPointEdit()46 CmdBoardNetPointEdit::~CmdBoardNetPointEdit() noexcept {
47 if (!wasEverExecuted()) {
48 mNetPoint.setPosition(mOldPos);
49 }
50 }
51
52 /*******************************************************************************
53 * Setters
54 ******************************************************************************/
55
setPosition(const Point & pos,bool immediate)56 void CmdBoardNetPointEdit::setPosition(const Point& pos,
57 bool immediate) noexcept {
58 Q_ASSERT(!wasEverExecuted());
59 mNewPos = pos;
60 if (immediate) mNetPoint.setPosition(mNewPos);
61 }
62
translate(const Point & deltaPos,bool immediate)63 void CmdBoardNetPointEdit::translate(const Point& deltaPos,
64 bool immediate) noexcept {
65 Q_ASSERT(!wasEverExecuted());
66 mNewPos += deltaPos;
67 if (immediate) mNetPoint.setPosition(mNewPos);
68 }
69
rotate(const Angle & angle,const Point & center,bool immediate)70 void CmdBoardNetPointEdit::rotate(const Angle& angle, const Point& center,
71 bool immediate) noexcept {
72 Q_ASSERT(!wasEverExecuted());
73 mNewPos.rotate(angle, center);
74 if (immediate) mNetPoint.setPosition(mNewPos);
75 }
76
77 /*******************************************************************************
78 * Inherited from UndoCommand
79 ******************************************************************************/
80
performExecute()81 bool CmdBoardNetPointEdit::performExecute() {
82 performRedo(); // can throw
83
84 return true; // TODO: determine if the netpoint was really modified
85 }
86
performUndo()87 void CmdBoardNetPointEdit::performUndo() {
88 mNetPoint.setPosition(mOldPos);
89 }
90
performRedo()91 void CmdBoardNetPointEdit::performRedo() {
92 mNetPoint.setPosition(mNewPos);
93 }
94
95 /*******************************************************************************
96 * End of File
97 ******************************************************************************/
98
99 } // namespace project
100 } // namespace librepcb
101