[kgraphviewer-devel] [KGraphViewer/libkgraphviz] fe97977: Fix re-layouting of graph edges
Kevin Funk
krf at electrostorm.net
Tue Jan 11 17:45:47 CET 2011
commit fe97977dc33b34e9e0df688b9bb5ea1ab6940db7
branch libkgraphviz
Author: Kevin Funk <krf at electrostorm.net>
Date: Mon Jan 10 15:35:46 2011 +0100
Fix re-layouting of graph edges
* Fix misplaced prepareGeometryChange() call which caused out-of-date
bounding rects
* Fix edge id
No need for Quuid here, id from Agedge_t is a unique identifier for an
edge. With Quuid it is not possible to compare edges loaded from a
file to existing ones for equalness by id (as the uuid is not and
cannot be saved in the file).
diff --git a/src/kgraphviz/CMakeLists.txt b/src/kgraphviz/CMakeLists.txt
index e06ee76..490dd31 100644
--- a/src/kgraphviz/CMakeLists.txt
+++ b/src/kgraphviz/CMakeLists.txt
@@ -2,6 +2,10 @@
add_definitions(-DQT_USE_FAST_CONCATENATION)
add_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
+if(KGRAPHVIZ_GRAPHICSVIEW_DEBUG)
+ add_definitions(-DKGRAPHVIZ_GRAPHICSVIEW_DEBUG)
+endif()
+
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
diff --git a/src/kgraphviz/canvasedge.cpp b/src/kgraphviz/canvasedge.cpp
index 2f52ea0..67109c4 100644
--- a/src/kgraphviz/canvasedge.cpp
+++ b/src/kgraphviz/canvasedge.cpp
@@ -438,6 +438,13 @@ void CanvasEdge::paint(QPainter* p, const QStyleOptionGraphicsItem* option,
p->restore();
}
}
+
+#ifdef KGRAPHVIZ_GRAPHICSVIEW_DEBUG
+ p->save();
+ p->setPen(Qt::green);
+ p->drawRect(boundingRect());
+ p->restore();
+#endif
}
void CanvasEdge::computeBoundingRect()
diff --git a/src/kgraphviz/canvaselement.cpp b/src/kgraphviz/canvaselement.cpp
index 04f33c5..610fcde 100644
--- a/src/kgraphviz/canvaselement.cpp
+++ b/src/kgraphviz/canvaselement.cpp
@@ -182,6 +182,10 @@ void CanvasElement::setFont(const QFont& font)
void CanvasElement::setBoundingRect(const QRectF& rect)
{
Q_D(CanvasElement);
+ if (d->m_boundingRect == rect)
+ return;
+
+ prepareGeometryChange();
d->m_boundingRect = rect;
}
@@ -191,7 +195,6 @@ void CanvasElement::modelChanged()
kDebug() ;//<< id();
d->m_pen = QPen(Dot2QtConsts::componentData().qtColor(d->m_element->fontColor()));
d->m_font = *FontsCache::changeable().fromName(d->m_element->fontName());
- prepareGeometryChange();
computeBoundingRect();
}
@@ -214,7 +217,7 @@ void CanvasElement::initialize(qreal scaleX, qreal scaleY,
computeBoundingRect();
}
-QRectF CanvasElement::boundingRect () const
+QRectF CanvasElement::boundingRect() const
{
Q_D(const CanvasElement);
return d->m_boundingRect;
@@ -572,6 +575,13 @@ QWidget *widget)
p->drawRect(QRectF(d->m_boundingRect.bottomRight()-QPointF(6,6),QSizeF(6,6)));
p->restore();
}
+
+#ifdef KGRAPHVIZ_GRAPHICSVIEW_DEBUG
+ p->save();
+ p->setPen(Qt::red);
+ p->drawRect(boundingRect());
+ p->restore();
+#endif
}
void CanvasElement::mousePressEvent(QGraphicsSceneMouseEvent* event)
diff --git a/src/kgraphviz/dotgraph.cpp b/src/kgraphviz/dotgraph.cpp
index f39d585..9e8d352 100644
--- a/src/kgraphviz/dotgraph.cpp
+++ b/src/kgraphviz/dotgraph.cpp
@@ -439,6 +439,7 @@ void DotGraph::saveTo(const QString& fileName)
void DotGraph::updateWithGraph(graph_t* newGraph)
{
Q_D(DotGraph);
+
kDebug();
// copy global graph render operations and attributes
@@ -522,8 +523,8 @@ void DotGraph::updateWithGraph(graph_t* newGraph)
edge_t* nge = agfstout(newGraph, ngn);
while (nge != NULL)
{
- kDebug() << "edge " << nge->id;
- const QString edgeName = QLatin1String(nge->head->name) + QLatin1String(nge->tail->name);
+ kDebug() << "edge" << nge->id << edges();
+ const QString edgeName = QString::number(nge->id);
if (edges().contains(edgeName))
{
kDebug() << "edge known" << nge->id;
@@ -1015,7 +1016,7 @@ void DotGraph::addNewEdge(QString src, QString tgt, QMap<QString,QString> attrib
}
else
{
- newEdge->setId(src+tgt+QUuid::createUuid().toString().remove('{').remove('}').remove('-'));
+ newEdge->setId(QString::number(edges().size()+1));
}
newEdge->setFromNode(srcElement);
newEdge->setToNode(tgtElement);
diff --git a/src/kgraphviz/dotgraphview.cpp b/src/kgraphviz/dotgraphview.cpp
index a01aac1..c16fab3 100644
--- a/src/kgraphviz/dotgraphview.cpp
+++ b/src/kgraphviz/dotgraphview.cpp
@@ -63,7 +63,6 @@
#include <QMenu>
#include <QGraphicsSimpleTextItem>
#include <QScrollBar>
-#include <QUuid>
#include <kactioncollection.h>
#include <kdebug.h>
@@ -731,7 +730,9 @@ bool DotGraphView::displayGraph()
cnode->setZValue(zvalue+1);
cnode->show();
}
- gnode->canvasElement()->computeBoundingRect();
+
+ CanvasElement* element = gnode->canvasElement();
+ element->computeBoundingRect();
}
kDebug() << "Creating" << d->m_graph->edges().size() << "edges from" << d->m_graph;
@@ -759,9 +760,10 @@ bool DotGraphView::displayGraph()
cedge->show();
d->m_canvas->addItem(cedge);
}
- if (gedge->canvasElement() != 0)
- gedge->canvasElement()->computeBoundingRect();
+ CanvasElement* element = gedge->canvasElement();
+ element->computeBoundingRect();
}
+
kDebug() << "Adding graph render operations: " << d->m_graph->renderOperations().size();
foreach (const DotRenderOp& dro, d->m_graph->renderOperations())
{
diff --git a/src/kgraphviz/support/dotgraphparsinghelper.cpp b/src/kgraphviz/support/dotgraphparsinghelper.cpp
index 36854ce..2cd0cf2 100644
--- a/src/kgraphviz/support/dotgraphparsinghelper.cpp
+++ b/src/kgraphviz/support/dotgraphparsinghelper.cpp
@@ -29,8 +29,6 @@
#include <kdebug.h>
-#include <QUuid>
-
#define KGV_MAX_ITEMS_TO_LOAD std::numeric_limits<int>::max()
extern KGraphViz::DotGraphParsingHelper* phelper;
@@ -297,7 +295,7 @@ void DotGraphParsingHelper::createedges()
// kDebug() << ge->id();
if (ge->id().isEmpty())
{
- ge->setId(QString::fromStdString(node1Name)+QString::fromStdString(node2Name)+QUuid::createUuid().toString().remove('{').remove('}').remove('-'));
+ ge->setId(QString::number(graph->edges().size()+1));
}
// kDebug() << ge->id();
// kDebug() << "num before=" << graph->edges().size();
More information about the kgraphviewer-devel
mailing list