From e61fb864ec68a58abdb9cc9df047b4b75801c5e7 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Tue, 2 Oct 2018 17:46:03 +0200 Subject: fixed self-loop support --- src/data/edge.cpp | 21 +++++++++++++++------ src/gui/tikzscene.cpp | 10 ++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/data/edge.cpp b/src/data/edge.cpp index b4c7ec1..ca63954 100644 --- a/src/data/edge.cpp +++ b/src/data/edge.cpp @@ -29,11 +29,20 @@ Edge::Edge(Node *s, Node *t, QObject *parent) : _data = new GraphElementData(); _edgeNode = 0; _dirty = true; - _basicBendMode = true; - _bend = 0; - _inAngle = 0; - _outAngle = 0; - _weight = 0.4f; + + if (s != t) { + _basicBendMode = true; + _bend = 0; + _inAngle = 0; + _outAngle = 0; + _weight = 0.4f; + } else { + _basicBendMode = false; + _bend = 0; + _inAngle = 135; + _outAngle = 45; + _weight = 1.0f; + } _style = noneEdgeStyle; updateControls(); } @@ -227,7 +236,7 @@ void Edge::setAttributesFromData() } } - if (_data->property("looseness") != 0) { + if (!_data->property("looseness").isNull()) { _weight = _data->property("looseness").toFloat(&ok) / 2.5f; if (!ok) _weight = 0.4f; } else { diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp index 119d0d1..c061221 100644 --- a/src/gui/tikzscene.cpp +++ b/src/gui/tikzscene.cpp @@ -556,8 +556,8 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) } break; case ToolPalette::EDGE: - // add an edge. Currently, self-loops are not supported (since they aren't drawn properly) - if (_edgeStartNodeItem != 0 && _edgeEndNodeItem != 0 && _edgeStartNodeItem != _edgeEndNodeItem) { + // add an edge + if (_edgeStartNodeItem != 0 && _edgeEndNodeItem != 0) { Edge *e = new Edge(_edgeStartNodeItem->node(), _edgeEndNodeItem->node(), _tikzDocument); e->setStyleName(_styles->activeEdgeStyleName()); AddEdgeCommand *cmd = new AddEdgeCommand(this, e); @@ -659,8 +659,10 @@ void TikzScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) foreach (QGraphicsItem *it, items(mousePos)) { if (EdgeItem *ei = dynamic_cast(it)) { - ChangeEdgeModeCommand *cmd = new ChangeEdgeModeCommand(this, ei->edge()); - _tikzDocument->undoStack()->push(cmd); + if (!ei->edge()->isSelfLoop()) { + ChangeEdgeModeCommand *cmd = new ChangeEdgeModeCommand(this, ei->edge()); + _tikzDocument->undoStack()->push(cmd); + } break; } else if (NodeItem *ni = dynamic_cast(it)) { bool ok; -- cgit v1.2.3