Skip to content

Commit c5ef284

Browse files
committed
Instead of creating three commands classes use one class for shapes change undo/redo.
1 parent a13a6c9 commit c5ef284

File tree

4 files changed

+74
-154
lines changed

4 files changed

+74
-154
lines changed

OMEdit/OMEditGUI/Annotations/ShapeAnnotation.cpp

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,10 +1081,9 @@ void ShapeAnnotation::applyRotation(qreal angle)
10811081
if (angle == 360) {
10821082
angle = 0;
10831083
}
1084+
Transformation oldTransformation = mTransformation;
10841085
mTransformation.setRotateAngle(angle);
1085-
setTransform(mTransformation.getTransformationMatrix());
1086-
mRotation = angle;
1087-
mpGraphicsView->setAddClassAnnotationNeeded(true);
1086+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
10881087
}
10891088

10901089
/*!
@@ -1430,7 +1429,10 @@ void ShapeAnnotation::sendBackward()
14301429
*/
14311430
void ShapeAnnotation::rotateClockwise()
14321431
{
1433-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new RotateShapeCommand(this, true));
1432+
qreal oldRotation = StringHandler::getNormalizedAngle(mTransformation.getRotateAngle());
1433+
qreal rotateIncrement = -90;
1434+
qreal angle = oldRotation + rotateIncrement;
1435+
applyRotation(angle);
14341436
}
14351437

14361438
/*!
@@ -1440,7 +1442,10 @@ void ShapeAnnotation::rotateClockwise()
14401442
*/
14411443
void ShapeAnnotation::rotateAntiClockwise()
14421444
{
1443-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new RotateShapeCommand(this, false));
1445+
qreal oldRotation = StringHandler::getNormalizedAngle(mTransformation.getRotateAngle());
1446+
qreal rotateIncrement = 90;
1447+
qreal angle = oldRotation + rotateIncrement;
1448+
applyRotation(angle);
14441449
}
14451450

14461451
/*!
@@ -1451,8 +1456,9 @@ void ShapeAnnotation::rotateAntiClockwise()
14511456
*/
14521457
void ShapeAnnotation::moveUp()
14531458
{
1454-
qreal y = mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep();
1455-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 0, y, mpGraphicsView));
1459+
Transformation oldTransformation = mTransformation;
1460+
mTransformation.adjustPosition(0, mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep());
1461+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
14561462
}
14571463

14581464
/*!
@@ -1463,8 +1469,9 @@ void ShapeAnnotation::moveUp()
14631469
*/
14641470
void ShapeAnnotation::moveShiftUp()
14651471
{
1466-
qreal y = mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep() * 5;
1467-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 0, y, mpGraphicsView));
1472+
Transformation oldTransformation = mTransformation;
1473+
mTransformation.adjustPosition(0, mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep() * 5);
1474+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
14681475
}
14691476

14701477
/*!
@@ -1475,7 +1482,9 @@ void ShapeAnnotation::moveShiftUp()
14751482
*/
14761483
void ShapeAnnotation::moveCtrlUp()
14771484
{
1478-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 0, 1, mpGraphicsView));
1485+
Transformation oldTransformation = mTransformation;
1486+
mTransformation.adjustPosition(0, 1);
1487+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
14791488
}
14801489

14811490
/*!
@@ -1486,8 +1495,9 @@ void ShapeAnnotation::moveCtrlUp()
14861495
*/
14871496
void ShapeAnnotation::moveDown()
14881497
{
1489-
qreal y = -mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep();
1490-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 0, y, mpGraphicsView));
1498+
Transformation oldTransformation = mTransformation;
1499+
mTransformation.adjustPosition(0, -mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep());
1500+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
14911501
}
14921502

14931503
/*!
@@ -1498,8 +1508,9 @@ void ShapeAnnotation::moveDown()
14981508
*/
14991509
void ShapeAnnotation::moveShiftDown()
15001510
{
1501-
qreal y = -(mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep() * 5);
1502-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 0, y, mpGraphicsView));
1511+
Transformation oldTransformation = mTransformation;
1512+
mTransformation.adjustPosition(0, -(mpGraphicsView->getCoOrdinateSystem()->getVerticalGridStep() * 5));
1513+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15031514
}
15041515

15051516
/*!
@@ -1510,7 +1521,9 @@ void ShapeAnnotation::moveShiftDown()
15101521
*/
15111522
void ShapeAnnotation::moveCtrlDown()
15121523
{
1513-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 0, -1, mpGraphicsView));
1524+
Transformation oldTransformation = mTransformation;
1525+
mTransformation.adjustPosition(0, -1);
1526+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15141527
}
15151528

15161529
/*!
@@ -1521,8 +1534,9 @@ void ShapeAnnotation::moveCtrlDown()
15211534
*/
15221535
void ShapeAnnotation::moveLeft()
15231536
{
1524-
qreal x = -mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep();
1525-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, x, 0, mpGraphicsView));
1537+
Transformation oldTransformation = mTransformation;
1538+
mTransformation.adjustPosition(-mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep(), 0);
1539+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15261540
}
15271541

15281542
/*!
@@ -1533,8 +1547,9 @@ void ShapeAnnotation::moveLeft()
15331547
*/
15341548
void ShapeAnnotation::moveShiftLeft()
15351549
{
1536-
qreal x = -(mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep() * 5);
1537-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, x, 0, mpGraphicsView));
1550+
Transformation oldTransformation = mTransformation;
1551+
mTransformation.adjustPosition(-(mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep() * 5), 0);
1552+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15381553
}
15391554

15401555
/*!
@@ -1545,7 +1560,9 @@ void ShapeAnnotation::moveShiftLeft()
15451560
*/
15461561
void ShapeAnnotation::moveCtrlLeft()
15471562
{
1548-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, -1, 0, mpGraphicsView));
1563+
Transformation oldTransformation = mTransformation;
1564+
mTransformation.adjustPosition(-1, 0);
1565+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15491566
}
15501567

15511568
/*!
@@ -1556,8 +1573,9 @@ void ShapeAnnotation::moveCtrlLeft()
15561573
*/
15571574
void ShapeAnnotation::moveRight()
15581575
{
1559-
qreal x = mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep();
1560-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, x, 0, mpGraphicsView));
1576+
Transformation oldTransformation = mTransformation;
1577+
mTransformation.adjustPosition(mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep(), 0);
1578+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15611579
}
15621580

15631581
/*!
@@ -1568,8 +1586,9 @@ void ShapeAnnotation::moveRight()
15681586
*/
15691587
void ShapeAnnotation::moveShiftRight()
15701588
{
1571-
qreal x = mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep() * 5;
1572-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, x, 0, mpGraphicsView));
1589+
Transformation oldTransformation = mTransformation;
1590+
mTransformation.adjustPosition(mpGraphicsView->getCoOrdinateSystem()->getHorizontalGridStep() * 5, 0);
1591+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15731592
}
15741593

15751594
/*!
@@ -1580,7 +1599,9 @@ void ShapeAnnotation::moveShiftRight()
15801599
*/
15811600
void ShapeAnnotation::moveCtrlRight()
15821601
{
1583-
mpGraphicsView->getModelWidget()->getUndoStack()->push(new MoveShapeKeyCommand(this, 1, 0, mpGraphicsView));
1602+
Transformation oldTransformation = mTransformation;
1603+
mTransformation.adjustPosition(1, 0);
1604+
mpGraphicsView->getModelWidget()->getUndoStack()->push(new UpdateShapeCommand(this, oldTransformation, mTransformation, mpGraphicsView));
15841605
}
15851606

15861607
/*!

OMEdit/OMEditGUI/Modeling/Commands.cpp

Lines changed: 18 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -77,131 +77,52 @@ void AddShapeCommand::undo()
7777
mpGraphicsView->addClassAnnotation();
7878
}
7979

80-
MoveShapeMouseCommand::MoveShapeMouseCommand(ShapeAnnotation *pShapeAnnotation, QPointF oldScenePos, QPointF newScenePos,
81-
GraphicsView *pGraphicsView, QUndoCommand *pParent)
80+
UpdateShapeCommand::UpdateShapeCommand(ShapeAnnotation *pShapeAnnotation, const Transformation &oldTransformation,
81+
const Transformation &newTransformation, GraphicsView *pGraphicsView, QUndoCommand *pParent)
8282
: QUndoCommand(pParent)
8383
{
8484
mpShapeAnnotation = pShapeAnnotation;
85-
mOldScenePosition = oldScenePos;
86-
mNewScenePosition = newScenePos;
85+
mOldTransformation = oldTransformation;
86+
mNewTransformation = newTransformation;
8787
mpGraphicsView = pGraphicsView;
8888
}
8989

9090
/*!
91-
* \brief MoveShapeMouseCommand::redo
92-
* Redo the MoveShapeMouseCommand.
91+
* \brief UpdateShapeCommand::redo
92+
* Redo the UpdateShapeCommand.
9393
*/
94-
void MoveShapeMouseCommand::redo()
94+
void UpdateShapeCommand::redo()
9595
{
96-
mpShapeAnnotation->mTransformation.setOrigin(mNewScenePosition);
9796
bool state = mpShapeAnnotation->flags().testFlag(QGraphicsItem::ItemSendsGeometryChanges);
9897
mpShapeAnnotation->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
9998
mpShapeAnnotation->setPos(0, 0);
10099
mpShapeAnnotation->setFlag(QGraphicsItem::ItemSendsGeometryChanges, state);
101-
mpShapeAnnotation->setTransform(mpShapeAnnotation->mTransformation.getTransformationMatrix());
102-
mpShapeAnnotation->setOrigin(mpShapeAnnotation->mTransformation.getPosition());
100+
mpShapeAnnotation->setTransform(mNewTransformation.getTransformationMatrix());
101+
mpShapeAnnotation->setOrigin(mNewTransformation.getPosition());
102+
mpShapeAnnotation->setRotationAngle(mNewTransformation.getRotateAngle());
103+
mpShapeAnnotation->mTransformation = mNewTransformation;
103104
mpShapeAnnotation->emitChanged();
104105
mpGraphicsView->setAddClassAnnotationNeeded(true);
105106
}
106107

107108
/*!
108-
* \brief MoveShapeMouseCommand::undo
109-
* Undo the MoveShapeMouseCommand.
109+
* \brief UpdateShapeCommand::undo
110+
* Undo the UpdateShapeCommand.
110111
*/
111-
void MoveShapeMouseCommand::undo()
112+
void UpdateShapeCommand::undo()
112113
{
113-
mpShapeAnnotation->mTransformation.setOrigin(mOldScenePosition);
114114
bool state = mpShapeAnnotation->flags().testFlag(QGraphicsItem::ItemSendsGeometryChanges);
115115
mpShapeAnnotation->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
116116
mpShapeAnnotation->setPos(0, 0);
117117
mpShapeAnnotation->setFlag(QGraphicsItem::ItemSendsGeometryChanges, state);
118-
mpShapeAnnotation->setTransform(mpShapeAnnotation->mTransformation.getTransformationMatrix());
119-
mpShapeAnnotation->setOrigin(mpShapeAnnotation->mTransformation.getPosition());
120-
mpShapeAnnotation->emitChanged();
121-
mpGraphicsView->setAddClassAnnotationNeeded(true);
122-
}
123-
124-
MoveShapeKeyCommand::MoveShapeKeyCommand(ShapeAnnotation *pShapeAnnotation, qreal x, qreal y, GraphicsView *pGraphicsView,
125-
QUndoCommand *pParent)
126-
: QUndoCommand(pParent)
127-
{
128-
mpShapeAnnotation = pShapeAnnotation;
129-
mX = x;
130-
mY = y;
131-
mpGraphicsView = pGraphicsView;
132-
}
133-
134-
/*!
135-
* \brief MoveShapeKeyCommand::redo
136-
* Redo the MoveShapeKeyCommand.
137-
*/
138-
void MoveShapeKeyCommand::redo()
139-
{
140-
mpShapeAnnotation->mTransformation.adjustPosition(mX, mY);
141-
mpShapeAnnotation->setTransform(mpShapeAnnotation->mTransformation.getTransformationMatrix());
142-
mpShapeAnnotation->setOrigin(mpShapeAnnotation->mTransformation.getPosition());
143-
mpShapeAnnotation->emitChanged();
144-
mpGraphicsView->setAddClassAnnotationNeeded(true);
145-
}
146-
147-
/*!
148-
* \brief MoveShapeKeyCommand::undo
149-
* Undo the MoveShapeKeyCommand.
150-
*/
151-
void MoveShapeKeyCommand::undo()
152-
{
153-
mpShapeAnnotation->mTransformation.adjustPosition(-mX, -mY);
154-
mpShapeAnnotation->setTransform(mpShapeAnnotation->mTransformation.getTransformationMatrix());
155-
mpShapeAnnotation->setOrigin(mpShapeAnnotation->mTransformation.getPosition());
118+
mpShapeAnnotation->setTransform(mOldTransformation.getTransformationMatrix());
119+
mpShapeAnnotation->setOrigin(mOldTransformation.getPosition());
120+
mpShapeAnnotation->setRotationAngle(mOldTransformation.getRotateAngle());
121+
mpShapeAnnotation->mTransformation = mOldTransformation;
156122
mpShapeAnnotation->emitChanged();
157123
mpGraphicsView->setAddClassAnnotationNeeded(true);
158124
}
159125

160-
RotateShapeCommand::RotateShapeCommand(ShapeAnnotation *pShapeAnnotation, bool clockwise, QUndoCommand *pParent)
161-
: QUndoCommand(pParent)
162-
{
163-
mpShapeAnnotation = pShapeAnnotation;
164-
mClockwise = clockwise;
165-
}
166-
167-
/*!
168-
* \brief RotateShapeCommand::redo
169-
* Redo the RotateShapeCommand.
170-
*/
171-
void RotateShapeCommand::redo()
172-
{
173-
if (mClockwise) {
174-
qreal oldRotation = StringHandler::getNormalizedAngle(mpShapeAnnotation->mTransformation.getRotateAngle());
175-
qreal rotateIncrement = -90;
176-
qreal angle = oldRotation + rotateIncrement;
177-
mpShapeAnnotation->applyRotation(angle);
178-
} else {
179-
qreal oldRotation = StringHandler::getNormalizedAngle(mpShapeAnnotation->mTransformation.getRotateAngle());
180-
qreal rotateIncrement = 90;
181-
qreal angle = oldRotation + rotateIncrement;
182-
mpShapeAnnotation->applyRotation(angle);
183-
}
184-
}
185-
186-
/*!
187-
* \brief RotateShapeCommand::undo
188-
* Undo the RotateShapeCommand.
189-
*/
190-
void RotateShapeCommand::undo()
191-
{
192-
if (mClockwise) {
193-
qreal oldRotation = StringHandler::getNormalizedAngle(mpShapeAnnotation->mTransformation.getRotateAngle());
194-
qreal rotateIncrement = 90;
195-
qreal angle = oldRotation + rotateIncrement;
196-
mpShapeAnnotation->applyRotation(angle);
197-
} else {
198-
qreal oldRotation = StringHandler::getNormalizedAngle(mpShapeAnnotation->mTransformation.getRotateAngle());
199-
qreal rotateIncrement = -90;
200-
qreal angle = oldRotation + rotateIncrement;
201-
mpShapeAnnotation->applyRotation(angle);
202-
}
203-
}
204-
205126
DeleteShapeCommand::DeleteShapeCommand(ShapeAnnotation *pShapeAnnotation, GraphicsView *pGraphicsView, QUndoCommand *pParent)
206127
: QUndoCommand(pParent)
207128
{

OMEdit/OMEditGUI/Modeling/Commands.h

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -47,44 +47,20 @@ class AddShapeCommand : public QUndoCommand
4747
GraphicsView *mpGraphicsView;
4848
};
4949

50-
class MoveShapeMouseCommand : public QUndoCommand
50+
class UpdateShapeCommand : public QUndoCommand
5151
{
5252
public:
53-
MoveShapeMouseCommand(ShapeAnnotation *pShapeAnnotation, QPointF oldScenePos, QPointF newScenePos, GraphicsView *pGraphicsView,
54-
QUndoCommand *pParent = 0);
53+
UpdateShapeCommand(ShapeAnnotation *pShapeAnnotation, const Transformation &oldTransformation, const Transformation &newTransformation,
54+
GraphicsView *pGraphicsView, QUndoCommand *pParent = 0);
5555
void redo();
5656
void undo();
5757
private:
5858
ShapeAnnotation *mpShapeAnnotation;
59-
QPointF mOldScenePosition;
60-
QPointF mNewScenePosition;
61-
GraphicsView *mpGraphicsView;
62-
};
63-
64-
class MoveShapeKeyCommand : public QUndoCommand
65-
{
66-
public:
67-
MoveShapeKeyCommand(ShapeAnnotation *pShapeAnnotation, qreal x, qreal y, GraphicsView *pGraphicsView, QUndoCommand *pParent = 0);
68-
void redo();
69-
void undo();
70-
private:
71-
ShapeAnnotation *mpShapeAnnotation;
72-
qreal mX;
73-
qreal mY;
59+
Transformation mOldTransformation;
60+
Transformation mNewTransformation;
7461
GraphicsView *mpGraphicsView;
7562
};
7663

77-
class RotateShapeCommand : public QUndoCommand
78-
{
79-
public:
80-
RotateShapeCommand(ShapeAnnotation *pShapeAnnotation, bool clockwise, QUndoCommand *pParent = 0);
81-
void redo();
82-
void undo();
83-
private:
84-
ShapeAnnotation *mpShapeAnnotation;
85-
bool mClockwise;
86-
};
87-
8864
class DeleteShapeCommand : public QUndoCommand
8965
{
9066
public:

OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,9 +1616,10 @@ void GraphicsView::mouseReleaseEvent(QMouseEvent *event)
16161616
mpModelWidget->getUndoStack()->beginMacro("Move items by mouse");
16171617
beginMacro = true;
16181618
}
1619-
MoveShapeMouseCommand *pMoveShapeCommand = new MoveShapeMouseCommand(pShapeAnnotation, pShapeAnnotation->getOldScenePosition(),
1620-
pShapeAnnotation->scenePos(), this);
1621-
mpModelWidget->getUndoStack()->push(pMoveShapeCommand);
1619+
Transformation oldTransformation = pShapeAnnotation->mTransformation;
1620+
pShapeAnnotation->mTransformation.setOrigin(pShapeAnnotation->scenePos());
1621+
mpModelWidget->getUndoStack()->push(new UpdateShapeCommand(pShapeAnnotation, oldTransformation, pShapeAnnotation->mTransformation,
1622+
this));
16221623
hasShapeMoved = true;
16231624
}
16241625
}
@@ -1755,6 +1756,7 @@ void GraphicsView::keyPressEvent(QKeyEvent *event)
17551756
} else if (shiftModifier && !controlModifier && event->key() == Qt::Key_Right && isAnyItemSelectedAndEditable(event->key())) {
17561757
mpModelWidget->getUndoStack()->beginMacro("Move shift right by key press");
17571758
emit keyPressShiftRight();
1759+
mpModelWidget->getUndoStack()->endMacro();
17581760
} else if (!shiftModifier && controlModifier && event->key() == Qt::Key_Right && isAnyItemSelectedAndEditable(event->key())) {
17591761
mpModelWidget->getUndoStack()->beginMacro("Move control right by key press");
17601762
emit keyPressCtrlRight();

0 commit comments

Comments
 (0)