[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