From 708011ca445e6096d693bde77b63b43b9de78e54 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Mon, 18 Dec 2017 17:59:56 +0000 Subject: adding node position tracking for undo --- tikzit/src/gui/tikzscene.cpp | 52 +++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'tikzit/src/gui/tikzscene.cpp') diff --git a/tikzit/src/gui/tikzscene.cpp b/tikzit/src/gui/tikzscene.cpp index cd88f4e..5722d0d 100644 --- a/tikzit/src/gui/tikzscene.cpp +++ b/tikzit/src/gui/tikzscene.cpp @@ -1,8 +1,3 @@ -/** - * Manage the scene, which contains a single Graph, and respond to user input. This serves as - * the controller for the MVC (Graph, TikzView, TikzScene). - */ - #include "tikzit.h" #include "tikzscene.h" @@ -32,27 +27,27 @@ void TikzScene::setGraph(Graph *graph) void TikzScene::graphReplaced() { - foreach (NodeItem *ni, nodeItems) { + foreach (NodeItem *ni, _nodeItems) { removeItem(ni); delete ni; } - nodeItems.clear(); + _nodeItems.clear(); - foreach (EdgeItem *ei, edgeItems) { + foreach (EdgeItem *ei, _edgeItems) { removeItem(ei); delete ei; } - edgeItems.clear(); + _edgeItems.clear(); foreach (Edge *e, _graph->edges()) { EdgeItem *ei = new EdgeItem(e); - edgeItems << ei; + _edgeItems << ei; addItem(ei); } foreach (Node *n, _graph->nodes()) { NodeItem *ni = new NodeItem(n); - nodeItems << ni; + _nodeItems << ni; addItem(ni); } } @@ -68,10 +63,10 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) // TODO: check if we grabbed a control point QGraphicsScene::mousePressEvent(event); if (!selectedItems().empty() && !items(mousePos).empty()) { - _oldNodePositions = new QHash(); - for (QGraphicsItem *gi : selectedItems()) { + _oldNodePositions.clear(); + foreach (QGraphicsItem *gi, selectedItems()) { if (NodeItem *ni = dynamic_cast(gi)) { - _oldNodePositions-> + _oldNodePositions.insert(ni->node(), ni->node()->point()); } } qDebug() << "I am dragging"; @@ -101,7 +96,7 @@ void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) } // TODO: only sync edges that change - foreach (EdgeItem *ei, edgeItems) { + foreach (EdgeItem *ei, _edgeItems) { ei->edge()->updateControls(); ei->syncPos(); } @@ -112,6 +107,23 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) switch (tikzit->toolPalette()->currentTool()) { case ToolPalette::SELECT: QGraphicsScene::mouseReleaseEvent(event); + + if (!_oldNodePositions.empty()) { + QMap newNodePositions; + + foreach (QGraphicsItem *gi, selectedItems()) { + if (NodeItem *ni = dynamic_cast(gi)) { + ni->writePos(); + newNodePositions.insert(ni->node(), ni->node()->point()); + } + } + + qDebug() << _oldNodePositions; + qDebug() << newNodePositions; + + _oldNodePositions.clear(); + } + break; case ToolPalette::VERTEX: break; @@ -121,3 +133,13 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) break; } } + +QVector TikzScene::edgeItems() const +{ + return _edgeItems; +} + +QVector TikzScene::nodeItems() const +{ + return _nodeItems; +} -- cgit v1.2.3