diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2018-01-14 18:50:34 +0100 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2018-01-14 18:50:34 +0100 |
commit | b7af46fb5b23890387628528c2cf6e310fc96c25 (patch) | |
tree | 639c9e1fa5d6e39210a4403875c7816e3759e68d /src | |
parent | 1302198001ddba65c825d213476b2e049d376d08 (diff) |
add edge implementation 1/2
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/tikzscene.cpp | 29 | ||||
-rw-r--r-- | src/gui/tikzscene.h | 2 |
2 files changed, 24 insertions, 7 deletions
diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp index edc1af4..1d7ebd0 100644 --- a/src/gui/tikzscene.cpp +++ b/src/gui/tikzscene.cpp @@ -12,6 +12,7 @@ TikzScene::TikzScene(TikzDocument *tikzDocument, QObject *parent) : QGraphicsScene(parent), _tikzDocument(tikzDocument) { _modifyEdgeItem = 0; + _edgeStartNodeItem = 0; _drawEdgeItem = new QGraphicsLineItem(); setSceneRect(-310,-230,620,450); @@ -124,10 +125,15 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) case ToolPalette::VERTEX: break; case ToolPalette::EDGE: - { - QLineF line(mousePos,mousePos); - _drawEdgeItem->setLine(line); - _drawEdgeItem->setVisible(true); + foreach (QGraphicsItem *gi, items(mousePos)) { + if (NodeItem *ni = dynamic_cast<NodeItem*>(gi)){ + _edgeStartNodeItem = ni; + _edgeEndNodeItem = ni; + QLineF line(toScreen(ni->node()->point()), mousePos); + _drawEdgeItem->setLine(line); + _drawEdgeItem->setVisible(true); + break; + } } break; case ToolPalette::CROP: @@ -232,8 +238,17 @@ void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) break; case ToolPalette::EDGE: if (_drawEdgeItem->isVisible()) { + _edgeEndNodeItem = 0; + foreach (QGraphicsItem *gi, items(mousePos)) { + if (NodeItem *ni = dynamic_cast<NodeItem*>(gi)){ + _edgeEndNodeItem = ni; + break; + } + } QPointF p1 = _drawEdgeItem->line().p1(); - QLineF line(p1, mousePos); + QPointF p2 = (_edgeEndNodeItem != 0) ? toScreen(_edgeEndNodeItem->node()->point()) : mousePos; + QLineF line(p1, p2); + _drawEdgeItem->setLine(line); } break; @@ -295,8 +310,8 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) QRectF grow(gridPos.x() - GLOBAL_SCALEF, gridPos.y() - GLOBAL_SCALEF, 2 * GLOBAL_SCALEF, 2 * GLOBAL_SCALEF); QRectF newBounds = sceneRect().united(grow); - qDebug() << grow; - qDebug() << newBounds; + //qDebug() << grow; + //qDebug() << newBounds; AddNodeCommand *cmd = new AddNodeCommand(this, n, newBounds); _tikzDocument->undoStack()->push(cmd); diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h index 936d42e..5e236d7 100644 --- a/src/gui/tikzscene.h +++ b/src/gui/tikzscene.h @@ -48,6 +48,8 @@ private: QMap<Edge*,EdgeItem*> _edgeItems; QGraphicsLineItem *_drawEdgeItem; EdgeItem *_modifyEdgeItem; + NodeItem *_edgeStartNodeItem; + NodeItem *_edgeEndNodeItem; bool _firstControlPoint; QMap<Node*,QPointF> _oldNodePositions; |