summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-10-02 17:46:03 +0200
committerAleks Kissinger <aleks0@gmail.com>2018-10-02 17:46:03 +0200
commite61fb864ec68a58abdb9cc9df047b4b75801c5e7 (patch)
treef85fa5506ef776692e67c0a69a671e33d954c5f7
parent52f2d4b7f3df910db6592ae16b1eec825b70c4d6 (diff)
fixed self-loop support
-rw-r--r--src/data/edge.cpp21
-rw-r--r--src/gui/tikzscene.cpp10
2 files changed, 21 insertions, 10 deletions
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<EdgeItem*>(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<NodeItem*>(it)) {
bool ok;