[QGIS Commit] r10183 - branches/vector_overlay_branch/src/plugins/diagram_overlay

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Feb 17 03:50:55 EST 2009


Author: mhugent
Date: 2009-02-17 03:50:54 -0500 (Tue, 17 Feb 2009)
New Revision: 10183

Modified:
   branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp
   branches/vector_overlay_branch/src/plugins/diagram_overlay/qgswkndiagramfactory.cpp
Log:
Restore bar and pie charts from xml

Modified: branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp
===================================================================
--- branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp	2009-02-16 19:19:23 UTC (rev 10182)
+++ branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp	2009-02-17 08:50:54 UTC (rev 10183)
@@ -20,6 +20,7 @@
 #include "qgsdiagramfactory.h"
 #include "qgsbardiagramfactory.h"
 #include "qgspiediagramfactory.h"
+#include "qgssvgdiagramfactory.h"
 #include "qgsdiagramrenderer.h"
 #include "qgsfeature.h"
 #include "qgsfield.h"
@@ -182,31 +183,8 @@
 
   QString wellKnownName;
   QgsAttributeList attributeList;
-  QList<QBrush> brushList;
-  QList<QPen> penList;
   QList<int> classAttrList;
 
-  //wellknownname
-  QDomNodeList wknNodeList = overlayElem.elementsByTagName("wellknownname");
-  if(wknNodeList.size() < 1)
-    {
-      return false;
-    }
-  wellKnownName = wknNodeList.at(0).toElement().text(); 
-  QgsWKNDiagramFactory* wknFactory = 0;
-  if(wellKnownName == "Pie")
-    {
-      wknFactory = new QgsPieDiagramFactory();
-    }
-  else if(wellKnownName == "Bar")
-    {
-      wknFactory = new QgsBarDiagramFactory();
-    }
-  else
-    {
-      return false; //unknown type
-    }
-
   //classificationField
   QDomNodeList classificationFieldList = overlayElem.elementsByTagName("classificationfield");
   for(int i = 0; i < classificationFieldList.size(); ++i)
@@ -215,50 +193,15 @@
     }
 
   theDiagramRenderer = new QgsDiagramRenderer(classAttrList);
-  wknFactory->setScalingAttributes(classAttrList);
-  wknFactory->setDiagramType(wellKnownName);
 
-  
-  int red, green, blue;
-  QDomElement categoryElem, penElem, brushElem;
+    //in case of well-known diagrams, the category attributes also need to be fetched
+  QDomElement categoryElem;
   QDomNodeList categoryList = overlayElem.elementsByTagName("category");
 
   for(int i = 0; i < categoryList.size(); ++i)
     {
       categoryElem = categoryList.at(i).toElement();
-      
-      QgsDiagramCategory newCategory;
-      newCategory.setPropertyIndex(categoryElem.attribute("attribute").toInt());
       attributeList.push_back(categoryElem.attribute("attribute").toInt());
-      newCategory.setGap(categoryElem.attribute("gap").toInt());
-
-      //pen element
-      penElem = categoryElem.namedItem("pen").toElement();
-      if(!penElem.isNull())
-	{
-	  QPen currentPen;
-	  red = penElem.attribute("red").toInt();
-	  green = penElem.attribute("green").toInt();
-	  blue = penElem.attribute("blue").toInt();
-	  currentPen.setColor(QColor(red, green, blue));
-	  currentPen.setStyle(QgsSymbologyUtils::qString2PenStyle(penElem.attribute("style")));
-	  newCategory.setPen(currentPen);
-	}
-
-      //brush element
-      brushElem = categoryElem.namedItem("brush").toElement();
-      if(!brushElem.isNull())
-	{
-	  QBrush currentBrush;
-	  red = brushElem.attribute("red").toInt();
-	  green = brushElem.attribute("green").toInt();
-	  blue = brushElem.attribute("blue").toInt();
-	  currentBrush.setColor(QColor(red, green, blue));
-	  currentBrush.setStyle(QgsSymbologyUtils::qString2BrushStyle(brushElem.attribute("style")));
-	  newCategory.setBrush(currentBrush);
-	}
-
-      wknFactory->addCategory(newCategory);
     }
 
   if(rendererList.size() < 1)
@@ -267,8 +210,41 @@
     }
   rendererElem = rendererList.at(0).toElement();
 
-  theDiagramRenderer->setFactory(wknFactory);
+  //read settings about factory
+  QDomNode factoryNode = overlayElem.namedItem("factory");
+  if(factoryNode.isNull())
+  {
+      return false;
+  }
 
+  QDomElement factoryElem = factoryNode.toElement();
+  QString factoryType = factoryElem.attribute("type");
+  QgsDiagramFactory* newFactory = 0;
+  if(factoryType == "svg")
+  {
+    newFactory = new QgsSVGDiagramFactory();
+   }
+   else if(factoryType == "Pie")
+   {
+    newFactory = new QgsPieDiagramFactory();
+    }
+    else if(factoryType == "Bar")
+    {
+        newFactory = new QgsBarDiagramFactory();
+    }
+
+    if(!newFactory)
+    {
+        return false;
+    }
+
+    if(!newFactory->readXML(overlayNode))
+    {
+        delete newFactory;
+        return false;
+    }
+   theDiagramRenderer->setFactory(newFactory);
+
   //Read renderer specific settings
   if(theDiagramRenderer)
     {

Modified: branches/vector_overlay_branch/src/plugins/diagram_overlay/qgswkndiagramfactory.cpp
===================================================================
--- branches/vector_overlay_branch/src/plugins/diagram_overlay/qgswkndiagramfactory.cpp	2009-02-16 19:19:23 UTC (rev 10182)
+++ branches/vector_overlay_branch/src/plugins/diagram_overlay/qgswkndiagramfactory.cpp	2009-02-17 08:50:54 UTC (rev 10183)
@@ -134,5 +134,62 @@
 
 bool QgsWKNDiagramFactory::readXML(const QDomNode& factoryNode)
 {
-    return false; //soon...
+    QDomElement factoryElem = factoryNode.toElement();
+    if(factoryElem.isNull())
+    {
+        return false;
+    }
+
+    //wellknownname
+  QDomNodeList wknNodeList = factoryElem.elementsByTagName("wellknownname");
+  if(wknNodeList.size() < 1)
+    {
+      return false;
+    }
+  mDiagramType = wknNodeList.at(0).toElement().text();
+
+  //categories
+  mCategories.clear();
+  int red, green, blue;
+  QDomElement categoryElem, penElem, brushElem;
+  QDomNodeList categoryList = factoryElem.elementsByTagName("category");
+
+  //todo: mMaximumGap, mMaximumPenWidth
+
+  for(int i = 0; i < categoryList.size(); ++i)
+    {
+      categoryElem = categoryList.at(i).toElement();
+
+      QgsDiagramCategory newCategory;
+      newCategory.setPropertyIndex(categoryElem.attribute("attribute").toInt());
+      newCategory.setGap(categoryElem.attribute("gap").toInt());
+
+      //pen element
+      penElem = categoryElem.namedItem("pen").toElement();
+      if(!penElem.isNull())
+        {
+          QPen currentPen;
+          red = penElem.attribute("red").toInt();
+          green = penElem.attribute("green").toInt();
+          blue = penElem.attribute("blue").toInt();
+          currentPen.setColor(QColor(red, green, blue));
+          currentPen.setStyle(QgsSymbologyUtils::qString2PenStyle(penElem.attribute("style")));
+          newCategory.setPen(currentPen);
+        }
+
+      //brush element
+      brushElem = categoryElem.namedItem("brush").toElement();
+      if(!brushElem.isNull())
+        {
+          QBrush currentBrush;
+          red = brushElem.attribute("red").toInt();
+          green = brushElem.attribute("green").toInt();
+          blue = brushElem.attribute("blue").toInt();
+          currentBrush.setColor(QColor(red, green, blue));
+          currentBrush.setStyle(QgsSymbologyUtils::qString2BrushStyle(brushElem.attribute("style")));
+          newCategory.setBrush(currentBrush);
+        }
+      mCategories.push_back(newCategory);
+    }
+  return true;
 }



More information about the QGIS-commit mailing list