From 4c4ced442811452e0a56800125db1620b2718c91 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Sun, 14 Jan 2018 19:01:59 +0100 Subject: add edge implementation 2/2 --- src/gui/tikzscene.cpp | 9 ++++++++- src/gui/undocommands.cpp | 24 ++++++++++++++++++++++++ src/gui/undocommands.h | 11 +++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) (limited to 'src/gui') 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 -- cgit v1.2.3