[kgraphviewer-devel] [kgraphviewer/libkgraphviz] src/kgraphviz: Return pointers to added graph elements

Kevin Funk krf at electrostorm.net
Fri Jan 28 18:55:25 CET 2011


Git commit 1751ecad642c7d26fd7bef46b6af1d9e3e1d38b0 by Kevin Funk.
Pushed by kfunk into branch 'libkgraphviz'.

Return pointers to added graph elements

M  +26   -23   src/kgraphviz/dotgraph.cpp     
M  +7    -7    src/kgraphviz/dotgraph.h     
M  +1    -2    src/kgraphviz/graphsubgraph.cpp     
M  +1    -1    src/kgraphviz/graphsubgraph.h     

http://commits.kde.org/9c7b74a4/1751ecad642c7d26fd7bef46b6af1d9e3e1d38b0

diff --git a/src/kgraphviz/dotgraph.cpp b/src/kgraphviz/dotgraph.cpp
index bf07cef..0e97aa3 100644
--- a/src/kgraphviz/dotgraph.cpp
+++ b/src/kgraphviz/dotgraph.cpp
@@ -836,16 +836,16 @@ void DotGraph::setAttribute(const QString& elementId, const QString& attributeNa
 GraphElement* DotGraph::elementNamed(const QString& id) const
 {
   Q_D(const DotGraph);
-  GraphElement* ret = 0;
-  if ((ret = d->m_nodesMap.value(id, 0))) {
-    return ret;
+  GraphElement* graphElement = 0;
+  if (graphElement = d->m_nodesMap.value(id, 0)) {
+    return graphElement;
   }
-  if ((ret = d->m_edgesMap.value(id, 0))) {
-    return ret;
+  if (graphElement = d->m_edgesMap.value(id, 0)) {
+    return graphElement;
   }
-  foreach(GraphSubgraph* subGraph, subgraphs()) {
-    if ((ret = subGraph->elementNamed(id))) {
-      return ret;
+  foreach(const GraphSubgraph* subGraph, subgraphs()) {
+    if ((graphElement = subGraph->elementNamed(id))) {
+      return graphElement;
     }
   }
   return 0;
@@ -858,8 +858,7 @@ GraphNode* DotGraph::nodeNamed(const QString& id) const
   if ((ret = d->m_nodesMap.value(id, 0))) {
     return ret;
   }
-  foreach(GraphSubgraph* subGraph, subgraphs()) {
-    GraphNode* node = 0;
+  foreach(const GraphSubgraph* subGraph, subgraphs()) {
     if ((ret = dynamic_cast<GraphNode*>(subGraph->elementNamed(id)))) {
       return ret;
     }
@@ -873,58 +872,61 @@ void DotGraph::setGraphAttributes(const QMap<QString,QString>& attribs)
   attributes() = attribs;
 }
 
-void DotGraph::addNewNode(const QString& id)
+GraphNode* DotGraph::addNewNode(const QString& id)
 {
   QMap<QString, QString> attribs;
   attribs["id"] = id;
-  addNewNode(attribs);
+  return addNewNode(attribs);
 }
 
-void DotGraph::addNewNode(const QMap<QString,QString>& attribs)
+GraphNode* DotGraph::addNewNode(const QMap<QString,QString>& attribs)
 {
   kDebug() << attribs;
   GraphNode* newNode = new GraphNode();
   newNode->attributes() = attribs;
   nodes().insert(newNode->id(), newNode);
   kDebug() << "node added as" << newNode->id();
+  return newNode;
 }
 
-void DotGraph::addNewSubgraph(const QString& id)
+GraphSubgraph* DotGraph::addNewSubgraph(const QString& id)
 {
   QMap<QString, QString> attribs;
   attribs["id"] = id;
-  addNewSubgraph(attribs);
+  return addNewSubgraph(attribs);
 }
 
-void DotGraph::addNewSubgraph(const QMap<QString,QString>& attribs)
+GraphSubgraph* DotGraph::addNewSubgraph(const QMap<QString,QString>& attribs)
 {
   kDebug() << attribs;
   GraphSubgraph* newSG = new GraphSubgraph();
   newSG->attributes() = attribs;
   subgraphs()[newSG->id()] = newSG;
   kDebug() << "subgraph added as" << newSG->id();
+  return newSG;
 }
 
-void DotGraph::addNewNodeToSubgraph(const QString& id, const QString& subgraph)
+GraphNode* DotGraph::addNewNodeToSubgraph(const QString& id, const QString& subgraph)
 {
   QMap<QString, QString> attribs;
   attribs["id"] = id;
-  addNewNodeToSubgraph(attribs, subgraph);
+  return addNewNodeToSubgraph(attribs, subgraph);
 }
 
-void DotGraph::addNewNodeToSubgraph(const QMap<QString,QString>& attribs,
+GraphNode* DotGraph::addNewNodeToSubgraph(const QMap<QString,QString>& attribs,
                                     const QString& subgraph)
 {
   kDebug() << attribs << "to" << subgraph;
   if (!subgraphs().contains(subgraph)) {
     kWarning() << "Invalid subgraph:" << subgraph;
-    return;
+    return 0;
   }
 
   GraphNode* newNode = new GraphNode();
   newNode->attributes() = attribs;
   subgraphs()[subgraph]->content().push_back(newNode);
   kDebug() << "node added as" << newNode->id() << "in" << subgraph;
+  return newNode;
 }
 
 void DotGraph::addExistingNodeToSubgraph(const QMap<QString,QString>& attribs,
@@ -1008,7 +1010,7 @@ void DotGraph::moveExistingNodeToMainGraph(const QMap<QString,QString>& attribs)
   }
 }
 
-void DotGraph::addNewEdge(const QString& sourceState,
+GraphEdge* DotGraph::addNewEdge(const QString& sourceState,
                           const QString& targetState,
                           const QMap<QString,QString>& attribs)
 {
@@ -1028,8 +1030,8 @@ void DotGraph::addNewEdge(const QString& sourceState,
 
   if (srcElement == 0 || tgtElement == 0)
   {
-    kError() << sourceState << "or" << targetState << "missing";
-    return;
+    kWarning() << sourceState << "or" << targetState << "missing";
+    return 0;
   }
   if (attribs.contains("id"))
   {
@@ -1042,6 +1044,7 @@ void DotGraph::addNewEdge(const QString& sourceState,
   newEdge->setFromNode(srcElement);
   newEdge->setToNode(tgtElement);
   edges().insert(newEdge->id(), newEdge);
+  return newEdge;
 }
 
 void DotGraph::removeElementAttribute(const QString& nodeName, const QString& attribName)
diff --git a/src/kgraphviz/dotgraph.h b/src/kgraphviz/dotgraph.h
index 8e81232..70393cb 100644
--- a/src/kgraphviz/dotgraph.h
+++ b/src/kgraphviz/dotgraph.h
@@ -108,16 +108,16 @@ public:
 
   void setGraphAttributes(const QMap<QString,QString>& attribs); // TODO: Redundant, GraphElement already has setter
 
-  void addNewNode(const QString& id);
-  void addNewNode(const QMap<QString,QString>& attribs);
-  void addNewSubgraph(const QString& id);
-  void addNewSubgraph(const QMap<QString,QString>& attribs);
-  void addNewNodeToSubgraph(const QString& id, const QString& subgraph);
-  void addNewNodeToSubgraph(const QMap<QString,QString>& attribs, const QString& subgraph);
+  GraphNode* addNewNode(const QString& id);
+  GraphNode* addNewNode(const QMap<QString,QString>& attribs);
+  GraphSubgraph* addNewSubgraph(const QString& id);
+  GraphSubgraph* addNewSubgraph(const QMap<QString,QString>& attribs);
+  GraphNode* addNewNodeToSubgraph(const QString& id, const QString& subgraph);
+  GraphNode* addNewNodeToSubgraph(const QMap<QString,QString>& attribs, const QString& subgraph);
   void addExistingNodeToSubgraph(const QMap<QString,QString>& attribs, const QString& subgraph);
   void moveExistingNodeToMainGraph(const QMap<QString,QString>& attribs);
 
-  void addNewEdge(const QString& sourceState, const QString& targetState, const QMap<QString,QString>& attribs = QMap<QString,QString>());
+  GraphEdge* addNewEdge(const QString& sourceState, const QString& targetState, const QMap<QString,QString>& attribs = QMap<QString,QString>());
   void removeElementAttribute(const QString& nodeName, const QString& attribName);
   void renameNode(const QString& oldNodeName, const QString& newNodeName);
   void removeNodeNamed(const QString& nodeName);
diff --git a/src/kgraphviz/graphsubgraph.cpp b/src/kgraphviz/graphsubgraph.cpp
index 8e74518..b9de6ab 100644
--- a/src/kgraphviz/graphsubgraph.cpp
+++ b/src/kgraphviz/graphsubgraph.cpp
@@ -162,9 +162,8 @@ void GraphSubgraph::removeElement(GraphElement* element)
   m_content.removeAll(element);
 }
 
-GraphElement* GraphSubgraph::elementNamed(const QString& id)
+GraphElement* GraphSubgraph::elementNamed(const QString& id) const
 {
-  if (this->id() == id) return this;
   foreach (GraphElement* element, content())
   {
     if (element->id() == id)
diff --git a/src/kgraphviz/graphsubgraph.h b/src/kgraphviz/graphsubgraph.h
index 6735183..f24da2d 100644
--- a/src/kgraphviz/graphsubgraph.h
+++ b/src/kgraphviz/graphsubgraph.h
@@ -64,7 +64,7 @@ public:
 
   /// Recursively walk through this subgraph and its subsubgraphs to find an element named id
   /// @return the node found or 0 if there is no such node
-  GraphElement* elementNamed(const QString& id);
+  GraphElement* elementNamed(const QString& id) const;
 
 
   /// Recursively walk through this subgraph and its subsubgraphs to make


More information about the kgraphviewer-devel mailing list