summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-01-14 19:01:59 +0100
committerAleks Kissinger <aleks0@gmail.com>2018-01-14 19:01:59 +0100
commit4c4ced442811452e0a56800125db1620b2718c91 (patch)
tree1a585a0660a4fd93be2335c6a2a2a22c101130b8 /src
parentb7af46fb5b23890387628528c2cf6e310fc96c25 (diff)
add edge implementation 2/2
Diffstat (limited to 'src')
-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