summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-07-20 14:19:08 +0200
committerAleks Kissinger <aleks0@gmail.com>2018-07-20 14:19:08 +0200
commit7bdf1bbb2b65612bd3f349562ca622f28dc1abff (patch)
tree1cc9383a6cd8e6b3201920f48de072b48d09c1f0 /src/gui
parent92d09d474eecb5bb48857408095e9c8564fe4337 (diff)
reflection
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/mainmenu.cpp11
-rw-r--r--src/gui/mainmenu.h2
-rw-r--r--src/gui/tikzscene.cpp5
-rw-r--r--src/gui/tikzscene.h1
-rw-r--r--src/gui/undocommands.cpp31
-rw-r--r--src/gui/undocommands.h14
6 files changed, 64 insertions, 0 deletions
diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp
index 3625338..fa52138 100644
--- a/src/gui/mainmenu.cpp
+++ b/src/gui/mainmenu.cpp
@@ -110,6 +110,17 @@ void MainMenu::on_actionDeselect_All_triggered()
tikzit->activeWindow()->tikzScene()->deselectAll();
}
+void MainMenu::on_actionReflectHorizontal_triggered()
+{
+ if (tikzit->activeWindow() != 0)
+ tikzit->activeWindow()->tikzScene()->reflectNodes(true);
+}
+
+void MainMenu::on_actionReflectVertical_triggered()
+{
+ if (tikzit->activeWindow() != 0)
+ tikzit->activeWindow()->tikzScene()->reflectNodes(false);
+}
// Tikz
void MainMenu::on_actionParse_triggered()
diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h
index aa5c727..79aafad 100644
--- a/src/gui/mainmenu.h
+++ b/src/gui/mainmenu.h
@@ -50,6 +50,8 @@ public slots:
void on_actionDelete_triggered();
void on_actionSelect_All_triggered();
void on_actionDeselect_All_triggered();
+ void on_actionReflectHorizontal_triggered();
+ void on_actionReflectVertical_triggered();
// Tikz
void on_actionParse_triggered();
diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp
index 1ddd945..9422b6b 100644
--- a/src/gui/tikzscene.cpp
+++ b/src/gui/tikzscene.cpp
@@ -681,6 +681,11 @@ void TikzScene::parseTikz(QString tikz)
}
}
+void TikzScene::reflectNodes(bool horizontal) {
+ ReflectNodesCommand *cmd = new ReflectNodesCommand(this, getSelectedNodes(), horizontal);
+ tikzDocument()->undoStack()->push(cmd);
+}
+
void TikzScene::getSelection(QSet<Node *> &selNodes, QSet<Edge *> &selEdges)
{
foreach (QGraphicsItem *gi, selectedItems()) {
diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h
index b6b2560..b0e3835 100644
--- a/src/gui/tikzscene.h
+++ b/src/gui/tikzscene.h
@@ -64,6 +64,7 @@ public:
void selectAllNodes();
void deselectAll();
void parseTikz(QString tikz);
+ void reflectNodes(bool horizontal);
bool enabled() const;
void setEnabled(bool enabled);
int lineNumberForSelection();
diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp
index c8221fe..e2502f1 100644
--- a/src/gui/undocommands.cpp
+++ b/src/gui/undocommands.cpp
@@ -430,3 +430,34 @@ void ReplaceGraphCommand::redo()
_scene->tikzDocument()->setGraph(_newGraph);
_scene->graphReplaced();
}
+
+ReflectNodesCommand::ReflectNodesCommand(TikzScene *scene, QSet<Node*> nodes, bool horizontal, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _nodes(nodes), _horizontal(horizontal)
+{
+}
+
+void ReflectNodesCommand::undo()
+{
+ _scene->graph()->reflectNodes(_nodes, _horizontal);
+ foreach (NodeItem *ni, _scene->nodeItems()) {
+ if (_nodes.contains(ni->node())) {
+ ni->readPos();
+ }
+ }
+
+ _scene->refreshAdjacentEdges(_nodes.toList());
+ GraphUpdateCommand::undo();
+}
+
+void ReflectNodesCommand::redo()
+{
+ _scene->graph()->reflectNodes(_nodes, _horizontal);
+ foreach (NodeItem *ni, _scene->nodeItems()) {
+ if (_nodes.contains(ni->node())) {
+ ni->readPos();
+ }
+ }
+
+ _scene->refreshAdjacentEdges(_nodes.toList());
+ GraphUpdateCommand::redo();
+}
diff --git a/src/gui/undocommands.h b/src/gui/undocommands.h
index 292632e..0e7a63d 100644
--- a/src/gui/undocommands.h
+++ b/src/gui/undocommands.h
@@ -191,4 +191,18 @@ private:
Graph *_newGraph;
};
+class ReflectNodesCommand : public GraphUpdateCommand
+{
+public:
+ explicit ReflectNodesCommand(TikzScene *scene,
+ QSet<Node*> nodes,
+ bool horizontal,
+ QUndoCommand *parent = 0);
+ void undo() override;
+ void redo() override;
+private:
+ QSet<Node*> _nodes;
+ bool _horizontal;
+};
+
#endif // UNDOCOMMANDS_H