diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2017-12-27 23:27:20 +0000 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2017-12-27 23:27:20 +0000 |
commit | c63dd506beefa844ddeab587a71af94063357372 (patch) | |
tree | aed5f5d1e6c0cca3866bec6fa1818b2fc8f883d7 /tikzit/src/gui/undocommands.cpp | |
parent | fcc0fc080370c0c8e97a0c07043b83240d973cab (diff) |
adding and deleting nodes now works
Diffstat (limited to 'tikzit/src/gui/undocommands.cpp')
-rw-r--r-- | tikzit/src/gui/undocommands.cpp | 79 |
1 files changed, 77 insertions, 2 deletions
diff --git a/tikzit/src/gui/undocommands.cpp b/tikzit/src/gui/undocommands.cpp index 54741c8..997bf75 100644 --- a/tikzit/src/gui/undocommands.cpp +++ b/tikzit/src/gui/undocommands.cpp @@ -1,4 +1,6 @@ #include "undocommands.h" +#include "nodeitem.h" +#include "edgeitem.h" MoveCommand::MoveCommand(TikzScene *scene, QMap<Node*, QPointF> oldNodePositions, @@ -8,8 +10,7 @@ MoveCommand::MoveCommand(TikzScene *scene, _scene(scene), _oldNodePositions(oldNodePositions), _newNodePositions(newNodePositions) -{ -} +{} void MoveCommand::undo() @@ -78,3 +79,77 @@ void EdgeBendCommand::redo() } } } + +DeleteCommand::DeleteCommand(TikzScene *scene, + QMap<int, Node *> deleteNodes, + QMap<int, Edge *> deleteEdges, + QSet<Edge *> selEdges) : + _scene(scene), _deleteNodes(deleteNodes), + _deleteEdges(deleteEdges), _selEdges(selEdges) +{} + +void DeleteCommand::undo() +{ + for (auto it = _deleteNodes.begin(); it != _deleteNodes.end(); ++it) { + Node *n = it.value(); + _scene->graph()->addNode(n, it.key()); + NodeItem *ni = new NodeItem(n); + _scene->nodeItems().insert(n, ni); + _scene->addItem(ni); + ni->setSelected(true); + } + + for (auto it = _deleteEdges.begin(); it != _deleteEdges.end(); ++it) { + Edge *e = it.value(); + _scene->graph()->addEdge(e, it.key()); + EdgeItem *ei = new EdgeItem(e); + _scene->edgeItems().insert(e, ei); + _scene->addItem(ei); + + if (_selEdges.contains(e)) ei->setSelected(true); + } +} + +void DeleteCommand::redo() +{ + foreach (Edge *e, _deleteEdges.values()) { + EdgeItem *ei = _scene->edgeItems()[e]; + _scene->edgeItems().remove(e); + _scene->removeItem(ei); + delete ei; + + _scene->graph()->removeEdge(e); + } + + foreach (Node *n, _deleteNodes.values()) { + NodeItem *ni = _scene->nodeItems()[n]; + _scene->nodeItems().remove(n); + _scene->removeItem(ni); + delete ni; + + _scene->graph()->removeNode(n); + } +} + +AddNodeCommand::AddNodeCommand(TikzScene *scene, Node *node) : + _scene(scene), _node(node) +{} + +void AddNodeCommand::undo() +{ + NodeItem *ni = _scene->nodeItems()[_node]; + _scene->removeItem(ni); + _scene->nodeItems().remove(_node); + delete ni; + + _scene->graph()->removeNode(_node); +} + +void AddNodeCommand::redo() +{ + // TODO: get the current style + _scene->graph()->addNode(_node); + NodeItem *ni = new NodeItem(_node); + _scene->nodeItems().insert(_node, ni); + _scene->addItem(ni); +} |