From 74551d71e128efe0f105b52e84420555b70b9f6d Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Wed, 1 Aug 2018 17:23:00 +0200 Subject: added rotation --- src/gui/mainmenu.cpp | 11 +++++++++++ src/gui/mainmenu.h | 2 ++ src/gui/tikzscene.cpp | 10 +++++++++- src/gui/tikzscene.h | 1 + src/gui/undocommands.cpp | 32 ++++++++++++++++++++++++++++++++ src/gui/undocommands.h | 14 ++++++++++++++ 6 files changed, 69 insertions(+), 1 deletion(-) (limited to 'src/gui') diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp index e297625..6bbc95a 100644 --- a/src/gui/mainmenu.cpp +++ b/src/gui/mainmenu.cpp @@ -122,6 +122,17 @@ void MainMenu::on_actionReflectVertical_triggered() tikzit->activeWindow()->tikzScene()->reflectNodes(false); } +void MainMenu::on_actionRotateCW_triggered() { + if (tikzit->activeWindow() != 0) + tikzit->activeWindow()->tikzScene()->rotateNodes(true); +} + +void MainMenu::on_actionRotateCCW_triggered() { + if (tikzit->activeWindow() != 0) + tikzit->activeWindow()->tikzScene()->rotateNodes(false); +} + + // Tikz void MainMenu::on_actionParse_triggered() { diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h index 79aafad..b561eab 100644 --- a/src/gui/mainmenu.h +++ b/src/gui/mainmenu.h @@ -52,6 +52,8 @@ public slots: void on_actionDeselect_All_triggered(); void on_actionReflectHorizontal_triggered(); void on_actionReflectVertical_triggered(); + void on_actionRotateCW_triggered(); + void on_actionRotateCCW_triggered(); // Tikz void on_actionParse_triggered(); diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp index 9eee2fc..8950325 100644 --- a/src/gui/tikzscene.cpp +++ b/src/gui/tikzscene.cpp @@ -686,11 +686,19 @@ bool TikzScene::parseTikz(QString tikz) } } -void TikzScene::reflectNodes(bool horizontal) { +void TikzScene::reflectNodes(bool horizontal) +{ ReflectNodesCommand *cmd = new ReflectNodesCommand(this, getSelectedNodes(), horizontal); tikzDocument()->undoStack()->push(cmd); } +void TikzScene::rotateNodes(bool clockwise) +{ + RotateNodesCommand *cmd = new RotateNodesCommand(this, getSelectedNodes(), clockwise); + tikzDocument()->undoStack()->push(cmd); +} + + void TikzScene::getSelection(QSet &selNodes, QSet &selEdges) { foreach (QGraphicsItem *gi, selectedItems()) { diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h index a1d7e26..91f606f 100644 --- a/src/gui/tikzscene.h +++ b/src/gui/tikzscene.h @@ -65,6 +65,7 @@ public: void deselectAll(); bool parseTikz(QString tikz); void reflectNodes(bool horizontal); + void rotateNodes(bool clockwise); bool enabled() const; void setEnabled(bool enabled); int lineNumberForSelection(); diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp index 9c52bf3..0cfa0bd 100644 --- a/src/gui/undocommands.cpp +++ b/src/gui/undocommands.cpp @@ -465,3 +465,35 @@ void ReflectNodesCommand::redo() _scene->refreshAdjacentEdges(_nodes.toList()); GraphUpdateCommand::redo(); } + + +RotateNodesCommand::RotateNodesCommand(TikzScene *scene, QSet nodes, bool clockwise, QUndoCommand *parent) : + GraphUpdateCommand(scene, parent), _nodes(nodes), _clockwise(clockwise) +{ +} + +void RotateNodesCommand::undo() +{ + _scene->graph()->rotateNodes(_nodes, !_clockwise); + foreach (NodeItem *ni, _scene->nodeItems()) { + if (_nodes.contains(ni->node())) { + ni->readPos(); + } + } + + _scene->refreshAdjacentEdges(_nodes.toList()); + GraphUpdateCommand::undo(); +} + +void RotateNodesCommand::redo() +{ + _scene->graph()->rotateNodes(_nodes, _clockwise); + foreach (NodeItem *ni, _scene->nodeItems()) { + if (_nodes.contains(ni->node())) { + ni->readPos(); + } + } + + _scene->refreshAdjacentEdges(_nodes.toList()); + GraphUpdateCommand::redo(); +} \ No newline at end of file diff --git a/src/gui/undocommands.h b/src/gui/undocommands.h index 0e7a63d..688c2ba 100644 --- a/src/gui/undocommands.h +++ b/src/gui/undocommands.h @@ -205,4 +205,18 @@ private: bool _horizontal; }; +class RotateNodesCommand : public GraphUpdateCommand +{ +public: + explicit RotateNodesCommand(TikzScene *scene, + QSet nodes, + bool clockwise, + QUndoCommand *parent = 0); + void undo() override; + void redo() override; +private: + QSet _nodes; + bool _clockwise; +}; + #endif // UNDOCOMMANDS_H -- cgit v1.2.3