summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/tikzscene.cpp9
-rw-r--r--src/gui/undocommands.cpp24
-rw-r--r--src/gui/undocommands.h11
3 files changed, 43 insertions, 1 deletions
diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp
index 1d7ebd0..746e9dc 100644
--- a/src/gui/tikzscene.cpp
+++ b/src/gui/tikzscene.cpp
@@ -305,7 +305,7 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
int gridSize = GLOBAL_SCALE / 8;
QPointF gridPos(round(mousePos.x()/gridSize)*gridSize, round(mousePos.y()/gridSize)*gridSize);
- Node *n = new Node();
+ Node *n = new Node(_tikzDocument);
n->setPoint(fromScreen(gridPos));
QRectF grow(gridPos.x() - GLOBAL_SCALEF, gridPos.y() - GLOBAL_SCALEF, 2 * GLOBAL_SCALEF, 2 * GLOBAL_SCALEF);
@@ -318,6 +318,13 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
}
break;
case ToolPalette::EDGE:
+ if (_edgeStartNodeItem != 0 && _edgeEndNodeItem != 0) {
+ Edge *e = new Edge(_edgeStartNodeItem->node(), _edgeEndNodeItem->node(), _tikzDocument);
+ AddEdgeCommand *cmd = new AddEdgeCommand(this, e);
+ _tikzDocument->undoStack()->push(cmd);
+ }
+ _edgeStartNodeItem = 0;
+ _edgeEndNodeItem = 0;
_drawEdgeItem->setVisible(false);
break;
case ToolPalette::CROP:
diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp
index 736c258..0fb235d 100644
--- a/src/gui/undocommands.cpp
+++ b/src/gui/undocommands.cpp
@@ -160,3 +160,27 @@ void AddNodeCommand::redo()
_scene->setBounds(_newBounds);
}
+
+AddEdgeCommand::AddEdgeCommand(TikzScene *scene, Edge *edge) :
+ _scene(scene), _edge(edge)
+{
+}
+
+void AddEdgeCommand::undo()
+{
+ EdgeItem *ei = _scene->edgeItems()[_edge];
+ _scene->removeItem(ei);
+ _scene->edgeItems().remove(_edge);
+ delete ei;
+
+ _scene->graph()->removeEdge(_edge);
+}
+
+void AddEdgeCommand::redo()
+{
+ // TODO: get the current style
+ _scene->graph()->addEdge(_edge);
+ EdgeItem *ei = new EdgeItem(_edge);
+ _scene->edgeItems().insert(_edge, ei);
+ _scene->addItem(ei);
+}
diff --git a/src/gui/undocommands.h b/src/gui/undocommands.h
index 0a7dece..9032274 100644
--- a/src/gui/undocommands.h
+++ b/src/gui/undocommands.h
@@ -79,4 +79,15 @@ private:
QRectF _newBounds;
};
+class AddEdgeCommand : public QUndoCommand
+{
+public:
+ explicit AddEdgeCommand(TikzScene *scene, Edge *edge);
+ void undo() override;
+ void redo() override;
+private:
+ TikzScene *_scene;
+ Edge *_edge;
+};
+
#endif // UNDOCOMMANDS_H