[kgraphviewer-devel] [KGraphViewer] c697702: Use some polymorphism for getting the canvas eleme
Kevin Funk
krf at electrostorm.net
Fri Dec 10 18:21:48 CET 2010
commit c6977021cac9faa58ba41fc4cc0ca0e1eaf7de62
branch libkgraphviz
Author: Kevin Funk <krf at electrostorm.net>
Date: Fri Dec 10 17:30:31 2010 +0100
Use some polymorphism for getting the canvas element
* There's no need to down-cast stuff around here as far as I can see.
* Make CanvasElement base of CanvasEdge to be consistent with CanvasNode
diff --git a/src/kgraphviz/canvasedge.cpp b/src/kgraphviz/canvasedge.cpp
index cb67644..c6aaf8e 100644
--- a/src/kgraphviz/canvasedge.cpp
+++ b/src/kgraphviz/canvasedge.cpp
@@ -29,7 +29,6 @@
#include "canvaselement.h"
#include "dotgraphview.h"
#include "graphedge.h"
-#include "graphnode.h"
#include "support/dotdefaults.h"
#include "support/dot2qtconsts.h"
#include "support/FontsCache.h"
@@ -52,12 +51,14 @@
namespace KGraphViewer
{
-CanvasEdge::CanvasEdge(DotGraphView* view, GraphEdge* e,
+CanvasEdge::CanvasEdge(DotGraphView* view,
+ GraphEdge* e,
+ QGraphicsScene* scene,
qreal scaleX, qreal scaleY,
qreal xMargin, qreal yMargin, qreal gh,
qreal wdhcf, qreal hdvcf,
- QGraphicsItem* parent)
- : QAbstractGraphicsShapeItem(parent),
+ QGraphicsItem* parent) :
+ CanvasElement(view, e, scene, parent),
m_scaleX(scaleX), m_scaleY(scaleY),
m_xMargin(xMargin), m_yMargin(yMargin),
m_gh(/*gh*/0), m_wdhcf(wdhcf), m_hdvcf(hdvcf), m_edge(e),
diff --git a/src/kgraphviz/canvasedge.h b/src/kgraphviz/canvasedge.h
index 4efe8e3..f2e4b70 100644
--- a/src/kgraphviz/canvasedge.h
+++ b/src/kgraphviz/canvasedge.h
@@ -28,16 +28,12 @@
#ifndef CANVAS_EDGE_H
#define CANVAS_EDGE_H
-#include <QGraphicsScene>
-#include <QGraphicsPathItem>
-#include <QAbstractGraphicsShapeItem>
-#include <QWidget>
-#include <QMap>
-#include <QFont>
+#include "canvaselement.h"
#include "graphexporter.h"
-
+class QGraphicsScene;
+class QFont;
class QMenu;
/*
@@ -56,14 +52,18 @@ class GraphEdge;
class DotGraphView;
-class CanvasEdge : public QObject, public QAbstractGraphicsShapeItem
+class CanvasEdge : public CanvasElement
{
-Q_OBJECT
+ Q_OBJECT
+
public:
- explicit CanvasEdge(DotGraphView* v, GraphEdge*,
+ explicit CanvasEdge(DotGraphView* v,
+ GraphEdge*,
+ QGraphicsScene* scene,
qreal scaleX, qreal scaleY,
qreal xMargin, qreal yMargin, qreal gh,
- qreal wdhcf, qreal hdvcf, QGraphicsItem* parent = 0);
+ qreal wdhcf, qreal hdvcf,
+ QGraphicsItem* parent = 0);
virtual ~CanvasEdge();
diff --git a/src/kgraphviz/canvaselement.h b/src/kgraphviz/canvaselement.h
index d37a208..b0205f2 100644
--- a/src/kgraphviz/canvaselement.h
+++ b/src/kgraphviz/canvaselement.h
@@ -38,7 +38,8 @@ class DotGraphView;
class CanvasElement: public QObject, public QAbstractGraphicsShapeItem
{
-Q_OBJECT
+ Q_OBJECT
+
public:
CanvasElement(
DotGraphView* v,
diff --git a/src/kgraphviz/dotgraph.cpp b/src/kgraphviz/dotgraph.cpp
index 59696e0..8e2ef82 100644
--- a/src/kgraphviz/dotgraph.cpp
+++ b/src/kgraphviz/dotgraph.cpp
@@ -492,9 +492,9 @@ void DotGraph::updateWithGraph(graph_t* newGraph)
kDebug() << "edge known" << nge->id;
// edges()[nge->name]->setZ(nge->z());
edges()[edgeName]->updateWithEdge(nge);
- if (edges()[edgeName]->canvasEdge()!=0)
+ if (edges()[edgeName]->canvasElement()!=0)
{
- // edges()[nge->id()]->canvasEdge()->setGh(m_height);
+ // edges()[nge->id()]->canvasElement()->setGh(m_height);
}
}
else
@@ -591,9 +591,9 @@ void DotGraph::updateWithGraph(const DotGraph& newGraph)
kDebug() << "edge known" << nge->id();
edges()[nge->id()]->setZ(nge->z());
edges()[nge->id()]->updateWithEdge(*nge);
- if (edges()[nge->id()]->canvasEdge()!=0)
+ if (edges()[nge->id()]->canvasElement()!=0)
{
-// edges()[nge->id()]->canvasEdge()->setGh(m_height);
+// edges()[nge->id()]->canvasElement()->setGh(m_height);
}
}
else
@@ -631,10 +631,10 @@ void DotGraph::removeNodeNamed(const QString& nodeName)
|| it.value()->toNode() == node )
{
GraphEdge* edge = it.value();
- if (edge->canvasEdge() != 0)
+ if (edge->canvasElement() != 0)
{
- edge->canvasEdge()->hide();
- delete edge->canvasEdge();
+ edge->canvasElement()->hide();
+ delete edge->canvasElement();
delete edge;
}
it = edges().erase(it);
@@ -645,11 +645,11 @@ void DotGraph::removeNodeNamed(const QString& nodeName)
}
}
- if (node->canvasNode() != 0)
+ if (node->canvasElement() != 0)
{
- node->canvasNode()->hide();
- delete node->canvasNode();
- node->setCanvasNode(0);
+ node->canvasElement()->hide();
+ delete node->canvasElement();
+ node->setCanvasElement(0);
}
nodes().remove(nodeName);
delete node;
@@ -700,10 +700,10 @@ void DotGraph::removeSubgraphNamed(const QString& subgraphName)
|| it.value()->toNode() == subgraph )
{
GraphEdge* edge = it.value();
- if (edge->canvasEdge() != 0)
+ if (edge->canvasElement() != 0)
{
- edge->canvasEdge()->hide();
- delete edge->canvasEdge();
+ edge->canvasElement()->hide();
+ delete edge->canvasElement();
delete edge;
}
it = edges().erase(it);
@@ -750,10 +750,10 @@ void DotGraph::removeEdge(const QString& id)
GraphEdge* edge = it.value();
if (edge->id() ==id)
{
- if (edge->canvasEdge() != 0)
+ if (edge->canvasElement() != 0)
{
- edge->canvasEdge()->hide();
- delete edge->canvasEdge();
+ edge->canvasElement()->hide();
+ delete edge->canvasElement();
delete edge;
}
edges().remove(id);
diff --git a/src/kgraphviz/dotgraphview.cpp b/src/kgraphviz/dotgraphview.cpp
index 1c00951..5d73c8d 100644
--- a/src/kgraphviz/dotgraphview.cpp
+++ b/src/kgraphviz/dotgraphview.cpp
@@ -382,7 +382,7 @@ int DotGraphViewPrivate::displaySubgraph(GraphSubgraph* gsubgraph, int zValue, C
foreach (GraphElement* element, gsubgraph->content())
{
GraphNode* gnode = dynamic_cast<GraphNode*>(element);
- if (gnode->canvasNode()==0)
+ if (gnode->canvasElement()==0)
{
kDebug() << "Creating canvas node for:" << gnode->id();
CanvasNode *cnode = new CanvasNode(q, gnode, m_canvas);
@@ -390,13 +390,13 @@ int DotGraphViewPrivate::displaySubgraph(GraphSubgraph* gsubgraph, int zValue, C
cnode->initialize(
scaleX, scaleY, m_xMargin, m_yMargin, gh,
m_graph->wdhcf(), m_graph->hdvcf());
- gnode->setCanvasNode(cnode);
+ gnode->setCanvasElement(cnode);
m_canvas->addItem(cnode);
// cnode->setZValue(gnode->z());
cnode->setZValue(zValue+1);
cnode->show();
}
- gnode->canvasNode()->computeBoundingRect();
+ gnode->canvasElement()->computeBoundingRect();
}
gsubgraph->canvasSubgraph()->computeBoundingRect();
@@ -843,7 +843,8 @@ bool DotGraphView::loadDot(const QString& dotFileName)
bool DotGraphView::loadLibrary(const QString& dotFileName)
{
- kDebug() << "'" << dotFileName << "'";
+ kDebug() << "Load file:" << dotFileName;
+
Q_D(DotGraphView);
if (d->m_canvas)
d->m_canvas->clear();
@@ -960,8 +961,8 @@ bool DotGraphView::displayGraph()
GraphNode* gnode = it.value();
kDebug() << "Handling" << id << (void*)gnode;
kDebug() << " gnode id=" << gnode->id();
- kDebug()<< " canvasNode=" << (void*)gnode->canvasNode();
- if (gnode->canvasNode()==0)
+ kDebug()<< " canvasElement=" << (void*)gnode->canvasElement();
+ if (gnode->canvasElement()==0)
{
kDebug() << "Creating canvas node for" << gnode->id();
CanvasNode *cnode = new CanvasNode(this, gnode, d->m_canvas);
@@ -969,20 +970,20 @@ bool DotGraphView::displayGraph()
cnode->initialize(
scaleX, scaleY, d->m_xMargin, d->m_yMargin, gh,
d->m_graph->wdhcf(), d->m_graph->hdvcf());
- gnode->setCanvasNode(cnode);
+ gnode->setCanvasElement(cnode);
d->m_canvas->addItem(cnode);
// cnode->setZValue(gnode->z());
cnode->setZValue(zvalue+1);
cnode->show();
}
- gnode->canvasNode()->computeBoundingRect();
+ gnode->canvasElement()->computeBoundingRect();
}
kDebug() << "Creating" << d->m_graph->edges().size() << "edges from" << d->m_graph;
foreach (GraphEdge* gedge, d->m_graph->edges())
{
kDebug() << "One GraphEdge:" << gedge->id();
- if (gedge->canvasEdge() == 0
+ if (gedge->canvasElement() == 0
&& gedge->fromNode() != 0
&& gedge->toNode() != 0)
{
@@ -991,18 +992,18 @@ bool DotGraphView::displayGraph()
kDebug() << " "<< gedge->fromNode()->id();
kDebug() << "edge toNode=" << (void*)gedge->toNode();
kDebug() << " "<< gedge->toNode()->id();
- CanvasEdge* cedge = new CanvasEdge(this, gedge, scaleX, scaleY, d->m_xMargin,
+ CanvasEdge* cedge = new CanvasEdge(this, gedge, d->m_canvas, scaleX, scaleY, d->m_xMargin,
d->m_yMargin, gh, d->m_graph->wdhcf(), d->m_graph->hdvcf());
- gedge->setCanvasEdge(cedge);
+ gedge->setCanvasElement(cedge);
// std::cerr << "setting z = " << gedge->z() << std::endl;
// cedge->setZValue(gedge->z());
cedge->setZValue(zvalue+2);
cedge->show();
d->m_canvas->addItem(cedge);
}
- if (gedge->canvasEdge() != 0)
- gedge->canvasEdge()->computeBoundingRect();
+ if (gedge->canvasElement() != 0)
+ gedge->canvasElement()->computeBoundingRect();
}
kDebug() << "Adding graph render operations: " << d->m_graph->renderOperations().size();
foreach (const DotRenderOp& dro, d->m_graph->renderOperations())
@@ -1274,7 +1275,7 @@ void DotGraphView::mousePressEvent(QMouseEvent* e)
newCNode->initialize(
scaleX, scaleY, d->m_xMargin, d->m_yMargin, gh,
d->m_graph->wdhcf(), d->m_graph->hdvcf());
- newNode->setCanvasNode(newCNode);
+ newNode->setCanvasElement(newCNode);
scene()->addItem(newCNode);
kDebug() << "setting pos to " << pos;
newCNode->setPos(pos);
@@ -1313,7 +1314,7 @@ void DotGraphView::mousePressEvent(QMouseEvent* e)
{
if (e->isSelected()) {
e->setSelected(false);
- e->canvasEdge()->update();
+ e->canvasElement()->update();
}
}
foreach(GraphNode* n, d->m_graph->nodes())
@@ -1881,7 +1882,7 @@ void DotGraphView::finishNewEdgeTo(CanvasElement* node)
// CanvasEdge* cedge = new CanvasEdge(this, gedge, scaleX, scaleY, d->m_xMargin,
// d->m_yMargin, gh, d->m_graph->wdhcf(), d->m_graph->hdvcf());
//
-// gedge->setCanvasEdge(cedge);
+// gedge->setCanvasElement(cedge);
// // std::cerr << "setting z = " << gedge->z() << std::endl;
// cedge->setZValue(gedge->z());
// cedge->show();
@@ -1922,16 +1923,16 @@ void DotGraphView::slotEdgeSelected(CanvasEdge* edge, Qt::KeyboardModifiers modi
{
foreach(GraphEdge* e, d->m_graph->edges())
{
- if (e->canvasEdge() != edge)
+ if (e->canvasElement() != edge)
{
e->setSelected(false);
- e->canvasEdge()->update();
+ e->canvasElement()->update();
}
}
foreach(GraphNode* n, d->m_graph->nodes())
{
n->setSelected(false);
- n->canvasNode()->update();
+ n->canvasElement()->update();
}
foreach(GraphSubgraph* s, d->m_graph->subgraphs())
{
@@ -1942,7 +1943,7 @@ void DotGraphView::slotEdgeSelected(CanvasEdge* edge, Qt::KeyboardModifiers modi
{
foreach(GraphEdge* e, d->m_graph->edges())
{
- if (e->canvasEdge() != edge)
+ if (e->canvasElement() != edge)
{
if (e->isSelected())
{
@@ -1980,7 +1981,7 @@ void DotGraphView::slotElementSelected(CanvasElement* element, Qt::KeyboardModif
{
if (e->isSelected()) {
e->setSelected(false);
- e->canvasEdge()->update();
+ e->canvasElement()->update();
}
}
foreach(GraphNode* e, d->m_graph->nodes())
@@ -2172,10 +2173,10 @@ void DotGraphView::slotSelectNode(const QString& nodeName)
GraphNode* node = dynamic_cast<GraphNode*>(graph()->elementNamed(nodeName));
if (node == 0) return;
node->setSelected(true);
- if (node->canvasNode()!=0)
+ if (node->canvasElement()!=0)
{
- node->canvasNode()->modelChanged();
- slotElementSelected(node->canvasNode(),Qt::NoModifier);
+ node->canvasElement()->modelChanged();
+ slotElementSelected(node->canvasElement(),Qt::NoModifier);
}
}
@@ -2183,9 +2184,9 @@ void DotGraphView::centerOnNode(const QString& nodeId)
{
GraphNode* node = dynamic_cast<GraphNode*>(graph()->elementNamed(nodeId));
if (node == 0) return;
- if (node->canvasNode()!=0)
+ if (node->canvasElement()!=0)
{
- centerOn(node->canvasNode());
+ centerOn(node->canvasElement());
}
}
diff --git a/src/kgraphviz/graphedge.cpp b/src/kgraphviz/graphedge.cpp
index de12caa..18e3862 100644
--- a/src/kgraphviz/graphedge.cpp
+++ b/src/kgraphviz/graphedge.cpp
@@ -101,10 +101,10 @@ void GraphEdge::updateWithEdge(const GraphEdge& edge)
m_colors = edge.colors();
m_dir = edge.dir();
GraphElement::updateWithElement(edge);
- if (canvasEdge())
+ if (canvasElement())
{
- canvasEdge()->computeBoundingRect();
- canvasEdge()->modelChanged();
+ canvasElement()->computeBoundingRect();
+ canvasElement()->modelChanged();
}
}
diff --git a/src/kgraphviz/graphedge.h b/src/kgraphviz/graphedge.h
index d439adc..67d27f1 100644
--- a/src/kgraphviz/graphedge.h
+++ b/src/kgraphviz/graphedge.h
@@ -55,14 +55,10 @@ class KGRAPHVIZ_EXPORT GraphEdge : public GraphElement
public:
GraphEdge();
- virtual ~GraphEdge();
-
GraphEdge(const GraphEdge& edge);
GraphEdge(Agedge_t* edge);
-
- CanvasEdge* canvasEdge() { return (CanvasEdge*)canvasElement(); }
- const CanvasEdge* canvasEdge() const { return (CanvasEdge*)canvasElement(); }
- void setCanvasEdge(CanvasEdge* ce) { setCanvasElement((CanvasElement*)ce); }
+
+ virtual ~GraphEdge();
bool isVisible() { return m_visible; }
void setVisible(bool v) { m_visible = v; }
diff --git a/src/kgraphviz/graphnode.cpp b/src/kgraphviz/graphnode.cpp
index 3bc844a..883474d 100644
--- a/src/kgraphviz/graphnode.cpp
+++ b/src/kgraphviz/graphnode.cpp
@@ -70,10 +70,10 @@ void GraphNode::updateWithNode(const GraphNode& node)
{
kDebug() << id() << node.id();
GraphElement::updateWithElement(node);
- if (canvasNode())
+ if (canvasElement())
{
- canvasNode()->computeBoundingRect();
- canvasNode()->modelChanged();
+ canvasElement()->computeBoundingRect();
+ canvasElement()->modelChanged();
}
// kDebug() << "done";
}
@@ -106,16 +106,6 @@ void GraphNode::updateWithNode(node_t* node)
}
}
-CanvasNode* GraphNode::canvasNode()
-{
- return dynamic_cast<CanvasNode*>(canvasElement());
-}
-
-const KGraphViewer::CanvasNode* GraphNode::canvasNode() const
-{
- return dynamic_cast<const CanvasNode*>(canvasElement());
-}
-
QTextStream& operator<<(QTextStream& s, const GraphNode& n)
{
s << n.id() << " ["
diff --git a/src/kgraphviz/graphnode.h b/src/kgraphviz/graphnode.h
index 532d55a..2758c78 100644
--- a/src/kgraphviz/graphnode.h
+++ b/src/kgraphviz/graphnode.h
@@ -62,16 +62,9 @@ public:
GraphNode(Agnode_t* gn);
virtual ~GraphNode() {}
-
- CanvasNode* canvasNode();
- const CanvasNode* canvasNode() const;
- inline void setCanvasNode(CanvasNode* cn) { setCanvasElement((CanvasElement*)cn); }
virtual void updateWithNode(const GraphNode& node);
virtual void updateWithNode(Agnode_t* node);
-
-
-private:
};
/** A map associating the ids of a graph's nodes to these nodes */
More information about the kgraphviewer-devel
mailing list