summaryrefslogtreecommitdiff
path: root/tikzit/src/gui/tikzscene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tikzit/src/gui/tikzscene.cpp')
-rw-r--r--tikzit/src/gui/tikzscene.cpp52
1 files changed, 37 insertions, 15 deletions
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<NodeItem*,QPointF>();
- for (QGraphicsItem *gi : selectedItems()) {
+ _oldNodePositions.clear();
+ foreach (QGraphicsItem *gi, selectedItems()) {
if (NodeItem *ni = dynamic_cast<NodeItem*>(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<Node*,QPointF> newNodePositions;
+
+ foreach (QGraphicsItem *gi, selectedItems()) {
+ if (NodeItem *ni = dynamic_cast<NodeItem*>(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<EdgeItem *> TikzScene::edgeItems() const
+{
+ return _edgeItems;
+}
+
+QVector<NodeItem *> TikzScene::nodeItems() const
+{
+ return _nodeItems;
+}