[QGIS Commit] r11908 - in branches/symbology-ng-branch: python/core src/app/legend src/core src/core/symbology-ng src/gui/symbology-ng

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Nov 3 11:18:14 EST 2009


Author: wonder
Date: 2009-11-03 11:18:14 -0500 (Tue, 03 Nov 2009)
New Revision: 11908

Modified:
   branches/symbology-ng-branch/python/core/symbology-ng-core.sip
   branches/symbology-ng-branch/src/app/legend/qgslegendlayer.cpp
   branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h
   branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
Log:
Store in renderer classification attribute by its name, not by index


Modified: branches/symbology-ng-branch/python/core/symbology-ng-core.sip
===================================================================
--- branches/symbology-ng-branch/python/core/symbology-ng-core.sip	2009-11-03 16:11:23 UTC (rev 11907)
+++ branches/symbology-ng-branch/python/core/symbology-ng-core.sip	2009-11-03 16:18:14 UTC (rev 11908)
@@ -49,11 +49,11 @@
 
 	virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature)=0;
 	
-	virtual void startRender(QgsRenderContext& context)=0;
+  virtual void startRender(QgsRenderContext& context, const QMap<int, QgsField>& fields)=0;
 	
 	virtual void stopRender(QgsRenderContext& context)=0;
 	
-	virtual QList<int> usedAttributes()=0;
+  virtual QList<QString> usedAttributes()=0;
 	
 	virtual ~QgsFeatureRendererV2();
 	
@@ -89,11 +89,11 @@
 	
 	virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
 	
-	virtual void startRender(QgsRenderContext& context);
+  virtual void startRender(QgsRenderContext& context, const QMap<int, QgsField>& fields);
 	
 	virtual void stopRender(QgsRenderContext& context);
 	
-	virtual QList<int> usedAttributes();
+  virtual QList<QString> usedAttributes();
 
   QgsSymbolV2* symbol() const;
   void setSymbol(QgsSymbolV2* s /Transfer/);
@@ -140,17 +140,17 @@
 
 public:
 	
-  QgsCategorizedSymbolRendererV2(int attrNum = -1, QgsCategoryList categories = QgsCategoryList());
+  QgsCategorizedSymbolRendererV2(QString attrName = QString(), QgsCategoryList categories = QgsCategoryList());
 	
 	virtual ~QgsCategorizedSymbolRendererV2();
 	
 	virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
 	
-	virtual void startRender(QgsRenderContext& context);
+  virtual void startRender(QgsRenderContext& context, const QMap<int, QgsField>& fields);
 	
 	virtual void stopRender(QgsRenderContext& context);
 	
-	virtual QList<int> usedAttributes();
+  virtual QList<QString> usedAttributes();
   
   virtual QString dump();
 
@@ -167,8 +167,8 @@
   bool deleteCategory(int catIndex);
   void deleteAllCategories();
   
-  int attributeIndex() const;
-  void setAttributeIndex(int attr);
+  QString classAttribute() const;
+  void setClassAttribute(QString attr);
 
 protected:
   
@@ -210,24 +210,24 @@
 %End
 
 public:
-  QgsGraduatedSymbolRendererV2(int attrNum = -1, QgsRangeList ranges = QgsRangeList());
+  QgsGraduatedSymbolRendererV2(QString attrNum = QString(), QgsRangeList ranges = QgsRangeList());
 
   virtual ~QgsGraduatedSymbolRendererV2();
 
   virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
 
-  virtual void startRender(QgsRenderContext& context);
+  virtual void startRender(QgsRenderContext& context, const QMap<int, QgsField>& fields);
 
   virtual void stopRender(QgsRenderContext& context);
 
-  virtual QList<int> usedAttributes();
+  virtual QList<QString> usedAttributes();
 
   virtual QString dump();
 
   virtual QgsFeatureRendererV2* clone() /Factory/;
 
-  int attributeIndex() const;
-  void setAttributeIndex(int attr);
+  QString classAttribute() const;
+  void setClassAttribute(QString attr);
 
   const QgsRangeList& ranges();
 
@@ -246,7 +246,7 @@
 
   static QgsGraduatedSymbolRendererV2* createRenderer(
                   QgsVectorLayer* vlayer,
-                  int attrNum,
+                  QString attrName,
                   int classes,
                   Mode mode,
                   QgsSymbolV2* symbol,

Modified: branches/symbology-ng-branch/src/app/legend/qgslegendlayer.cpp
===================================================================
--- branches/symbology-ng-branch/src/app/legend/qgslegendlayer.cpp	2009-11-03 16:11:23 UTC (rev 11907)
+++ branches/symbology-ng-branch/src/app/legend/qgslegendlayer.cpp	2009-11-03 16:18:14 UTC (rev 11908)
@@ -428,9 +428,7 @@
         QgsCategorizedSymbolRendererV2* r = static_cast<QgsCategorizedSymbolRendererV2*>(renderer);
         if (showClassifiers)
         {
-          const QgsFieldMap& fields = layer->dataProvider()->fields();
-          QString fieldName = fields[r->attributeIndex()].name();
-          itemList.push_back( std::make_pair( fieldName, QPixmap() ) );
+          itemList.push_back( std::make_pair( r->classAttribute(), QPixmap() ) );
         }
 
         int count = r->categories().count();
@@ -447,9 +445,7 @@
         QgsGraduatedSymbolRendererV2* r = static_cast<QgsGraduatedSymbolRendererV2*>(renderer);
         if (showClassifiers)
         {
-          const QgsFieldMap& fields = layer->dataProvider()->fields();
-          QString fieldName = fields[r->attributeIndex()].name();
-          itemList.push_back( std::make_pair( fieldName, QPixmap() ) );
+          itemList.push_back( std::make_pair( r->classAttribute(), QPixmap() ) );
         }
 
         int count = r->ranges().count();

Modified: branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp	2009-11-03 16:11:23 UTC (rev 11907)
+++ branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp	2009-11-03 16:18:14 UTC (rev 11908)
@@ -666,7 +666,7 @@
 
 void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool labeling )
 {
-  mRendererV2->startRender(rendererContext);
+  mRendererV2->startRender(rendererContext, pendingFields());
 
   QgsFeature fet;
   while ( nextFeature( fet ) )
@@ -685,7 +685,7 @@
   QHash< QgsSymbolV2*, QList<QgsFeature> > features; // key = symbol, value = array of features
 
   // startRender must be called before symbolForFeature() calls to make sure renderer is ready
-  mRendererV2->startRender(rendererContext);
+  mRendererV2->startRender(rendererContext, pendingFields());
 
   // 1. fetch features
   QgsFeature fet;
@@ -755,9 +755,13 @@
     int totalFeatures = pendingFeatureCount();
     int featureCount = 0;
     
-    QgsAttributeList attributes = mRendererV2->usedAttributes();
-    if (attributes.count() > 0)
-      QgsDebugMsg("attrs: " + QString::number(attributes[0]));
+    QgsAttributeList attributes;
+    foreach (QString attrName, mRendererV2->usedAttributes())
+    {
+      int attrNum = QgsFeatureRendererV2::fieldNameIndex(pendingFields(), attrName);
+      attributes.append( attrNum );
+      QgsDebugMsg("attrs: "+ attrName + " - " + QString::number(attrNum));
+    }
 
     bool labeling = FALSE;
     if ( mLabelingEngine )

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp	2009-11-03 16:11:23 UTC (rev 11907)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp	2009-11-03 16:18:14 UTC (rev 11908)
@@ -285,6 +285,16 @@
   return doc.createElement(RENDERER_TAG_NAME);
 }
 
+int QgsFeatureRendererV2::fieldNameIndex( const QgsFieldMap& fields, const QString& fieldName )
+{
+  for ( QgsFieldMap::const_iterator it = fields.constBegin(); it != fields.constEnd(); ++it )
+  {
+    if ( it->name() == fieldName )
+      return it.key();
+  }
+  return -1;
+}
+
 ///////////////////
 
 QgsSingleSymbolRendererV2::QgsSingleSymbolRendererV2(QgsSymbolV2* symbol)
@@ -303,7 +313,7 @@
 	return mSymbol;
 }
 	
-void QgsSingleSymbolRendererV2::startRender(QgsRenderContext& context)
+void QgsSingleSymbolRendererV2::startRender(QgsRenderContext& context, const QgsFieldMap& fields)
 {
 	mSymbol->startRender(context);
 }
@@ -313,9 +323,9 @@
 	mSymbol->stopRender(context);
 }
 
-QList<int> QgsSingleSymbolRendererV2::usedAttributes()
+QList<QString> QgsSingleSymbolRendererV2::usedAttributes()
 {
-	return QList<int>();
+  return QList<QString>();
 }
 
 QgsSymbolV2* QgsSingleSymbolRendererV2::symbol() const
@@ -435,8 +445,8 @@
 
 ///////////////////
 
-QgsCategorizedSymbolRendererV2::QgsCategorizedSymbolRendererV2(int attrNum, QgsCategoryList categories)
-  : QgsFeatureRendererV2(RendererCategorizedSymbol), mAttrNum(attrNum), mCategories(categories)
+QgsCategorizedSymbolRendererV2::QgsCategorizedSymbolRendererV2(QString attrName, QgsCategoryList categories)
+  : QgsFeatureRendererV2(RendererCategorizedSymbol), mAttrName(attrName), mCategories(categories)
 {
   for (int i = 0; i < mCategories.count(); ++i)
   {
@@ -489,7 +499,7 @@
   QgsAttributeMap::const_iterator ita = attrMap.find(mAttrNum);
   if (ita == attrMap.end())
   {
-    QgsDebugMsg("attribute required by renderer not found: "+QString::number(mAttrNum));
+    QgsDebugMsg("attribute '"+mAttrName+"' (index "+QString::number(mAttrNum)+") required by renderer not found");
     return NULL;
   }
   
@@ -537,11 +547,14 @@
   mCategories.clear();
 }
 
-void QgsCategorizedSymbolRendererV2::startRender(QgsRenderContext& context)
+void QgsCategorizedSymbolRendererV2::startRender(QgsRenderContext& context, const QgsFieldMap& fields)
 {
   // make sure that the hash table is up to date
   rebuildHash();
 
+  // find out classification attribute index from name
+  mAttrNum = fieldNameIndex(fields, mAttrName);
+
   QgsCategoryList::iterator it = mCategories.begin();
   for ( ; it != mCategories.end(); ++it)
     it->symbol()->startRender(context);
@@ -554,16 +567,16 @@
     it->symbol()->stopRender(context);
 }
 
-QList<int> QgsCategorizedSymbolRendererV2::usedAttributes()
+QList<QString> QgsCategorizedSymbolRendererV2::usedAttributes()
 {
-  QList<int> lst;
-  lst.append(mAttrNum);
+  QList<QString> lst;
+  lst.append(mAttrName);
   return lst;
 }
 
 QString QgsCategorizedSymbolRendererV2::dump()
 {
-  QString s = QString("CATEGORIZED: idx %1\n").arg(mAttrNum);
+  QString s = QString("CATEGORIZED: idx %1\n").arg(mAttrName);
   for (int i=0; i<mCategories.count();i++)
     s += mCategories[i].dump();
   return s;
@@ -571,7 +584,7 @@
 
 QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::clone()
 {
-  QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( mAttrNum, mCategories );
+  QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( mAttrName, mCategories );
   r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
@@ -614,9 +627,9 @@
     catElem = catElem.nextSiblingElement();
   }
 
-  int attrNum = element.attribute("attr").toInt();
+  QString attrName = element.attribute("attr");
 
-  QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2(attrNum, cats);
+  QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2(attrName, cats);
 
   // delete symbols if there are any more
   QgsSymbolLayerV2Utils::clearSymbolMap(symbolMap);
@@ -629,7 +642,7 @@
 {
   QDomElement rendererElem = doc.createElement(RENDERER_TAG_NAME);
   rendererElem.setAttribute("type", "categorizedSymbol");
-  rendererElem.setAttribute("attr", mAttrNum);
+  rendererElem.setAttribute("attr", mAttrName);
 
   // categories
   int i = 0;
@@ -720,8 +733,8 @@
 ///////////
 
 
-QgsGraduatedSymbolRendererV2::QgsGraduatedSymbolRendererV2(int attrNum, QgsRangeList ranges)
-  : QgsFeatureRendererV2(RendererGraduatedSymbol), mAttrNum(attrNum), mRanges(ranges), mMode(Custom)
+QgsGraduatedSymbolRendererV2::QgsGraduatedSymbolRendererV2(QString attrName, QgsRangeList ranges)
+  : QgsFeatureRendererV2(RendererGraduatedSymbol), mAttrName(attrName), mRanges(ranges), mMode(Custom)
 {
   // TODO: check ranges for sanity (NULL symbols, invalid ranges)
 }
@@ -748,7 +761,7 @@
   QgsAttributeMap::const_iterator ita = attrMap.find(mAttrNum);
   if (ita == attrMap.end())
   {
-    QgsDebugMsg("attribute required by renderer not found: "+QString::number(mAttrNum));
+    QgsDebugMsg("attribute required by renderer not found: "+mAttrName+"(index "+QString::number(mAttrNum)+")");
     return NULL;
   }
   
@@ -757,8 +770,11 @@
 
 }
 
-void QgsGraduatedSymbolRendererV2::startRender(QgsRenderContext& context)
+void QgsGraduatedSymbolRendererV2::startRender(QgsRenderContext& context, const QgsFieldMap& fields)
 {
+  // find out classification attribute index from name
+  mAttrNum = fieldNameIndex(fields, mAttrName);
+
   QgsRangeList::iterator it = mRanges.begin();
   for ( ; it != mRanges.end(); ++it)
     it->symbol()->startRender(context);
@@ -771,10 +787,10 @@
     it->symbol()->startRender(context);
 }
 
-QList<int> QgsGraduatedSymbolRendererV2::usedAttributes()
+QList<QString> QgsGraduatedSymbolRendererV2::usedAttributes()
 {
-  QList<int> lst;
-  lst.append(mAttrNum);
+  QList<QString> lst;
+  lst.append( mAttrName );
   return lst;
 }
 
@@ -796,7 +812,7 @@
 
 QString QgsGraduatedSymbolRendererV2::dump()
 {
-  QString s = QString("GRADUATED: idx %1\n").arg(mAttrNum);
+  QString s = QString("GRADUATED: attr %1\n").arg(mAttrName);
   for (int i=0; i<mRanges.count();i++)
     s += mRanges[i].dump();
   return s;
@@ -804,7 +820,7 @@
 
 QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone()
 {
-  QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrNum, mRanges );
+  QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrName, mRanges );
   r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
@@ -870,7 +886,7 @@
 
 QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
          QgsVectorLayer* vlayer,
-         int attrNum,
+         QString attrName,
          int classes,
          Mode mode,
          QgsSymbolV2* symbol,
@@ -878,8 +894,11 @@
 {
   QgsVectorDataProvider* provider = vlayer->dataProvider();
 
+  int attrNum = fieldNameIndex(vlayer->pendingFields(), attrName);
+
   double minimum = provider->minimumValue( attrNum ).toDouble();
   double maximum = provider->maximumValue( attrNum ).toDouble();
+  QgsDebugMsg(QString("min %1 // max %2").arg(minimum).arg(maximum));
 
   QList<double> breaks;
   if (mode == EqualInterval)
@@ -922,7 +941,7 @@
     ranges.append( QgsRendererRangeV2(lower, upper, newSymbol, label) );
   }
   
-  return new QgsGraduatedSymbolRendererV2( attrNum, ranges );
+  return new QgsGraduatedSymbolRendererV2( attrName, ranges );
 }
 
 
@@ -958,9 +977,9 @@
     rangeElem = rangeElem.nextSiblingElement();
   }
 
-  int attrNum = element.attribute("attr").toInt();
+  QString attrName = element.attribute("attr");
 
-  QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2(attrNum, ranges);
+  QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2(attrName, ranges);
 
   // delete symbols if there are any more
   QgsSymbolLayerV2Utils::clearSymbolMap(symbolMap);
@@ -973,7 +992,7 @@
 {
   QDomElement rendererElem = doc.createElement(RENDERER_TAG_NAME);
   rendererElem.setAttribute("type", "graduatedSymbol");
-  rendererElem.setAttribute("attr", mAttrNum);
+  rendererElem.setAttribute("attr", mAttrName);
 
   // ranges
   int i = 0;

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h	2009-11-03 16:11:23 UTC (rev 11907)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h	2009-11-03 16:18:14 UTC (rev 11908)
@@ -3,6 +3,7 @@
 #define QGSRENDERERV2_H
 
 #include "qgis.h"
+#include "qgsfield.h" // for QgsFieldMap
 
 #include <QList>
 #include <QHash>
@@ -66,11 +67,11 @@
 	// to be overridden
 	virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature)=0;
 	
-	virtual void startRender(QgsRenderContext& context)=0;
+  virtual void startRender(QgsRenderContext& context, const QgsFieldMap& fields)=0;
 	
 	virtual void stopRender(QgsRenderContext& context)=0;
 	
-	virtual QList<int> usedAttributes()=0;
+  virtual QList<QString> usedAttributes()=0;
 	
 	virtual ~QgsFeatureRendererV2() {}
 
@@ -93,9 +94,15 @@
   //! store renderer info to XML element
   virtual QDomElement save(QDomDocument& doc);
   
+  /** Returns the index of a field name or -1 if the field does not exist
+    * copied from QgsVectorDataProvider... d'oh... probably should be elsewhere
+    */
+  static int fieldNameIndex( const QgsFieldMap& fields, const QString& fieldName );
+
+
 protected:
   QgsFeatureRendererV2(RendererType type);
-  
+
   RendererType mType;
 
   bool mUsingSymbolLevels;
@@ -111,11 +118,11 @@
 	
 	virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
 	
-	virtual void startRender(QgsRenderContext& context);
+  virtual void startRender(QgsRenderContext& context, const QgsFieldMap& fields);
 	
 	virtual void stopRender(QgsRenderContext& context);
 	
-	virtual QList<int> usedAttributes();
+  virtual QList<QString> usedAttributes();
   
   QgsSymbolV2* symbol() const;
   void setSymbol(QgsSymbolV2* s);
@@ -171,17 +178,17 @@
 {
 public:
 	
-  QgsCategorizedSymbolRendererV2(int attrNum = -1, QgsCategoryList categories = QgsCategoryList());
+  QgsCategorizedSymbolRendererV2(QString attrName = QString(), QgsCategoryList categories = QgsCategoryList());
 	
 	virtual ~QgsCategorizedSymbolRendererV2();
 	
 	virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
 	
-	virtual void startRender(QgsRenderContext& context);
+  virtual void startRender(QgsRenderContext& context, const QgsFieldMap& fields);
 	
 	virtual void stopRender(QgsRenderContext& context);
 	
-	virtual QList<int> usedAttributes();
+  virtual QList<QString> usedAttributes();
   
   virtual QString dump();
 
@@ -200,8 +207,8 @@
   bool deleteCategory(int catIndex);
   void deleteAllCategories();
   
-  int attributeIndex() const { return mAttrNum; }
-  void setAttributeIndex(int attr) { mAttrNum = attr; }
+  QString classAttribute() const { return mAttrName; }
+  void setClassAttribute(QString attr) { mAttrName = attr; }
 
   //! create renderer from XML element
   static QgsFeatureRendererV2* create(QDomElement& element);
@@ -211,6 +218,9 @@
 
 protected:
   QgsCategoryList mCategories;
+  QString mAttrName;
+
+  //! attribute index (derived from attribute name in startRender)
   int mAttrNum;
 
   //! hashtable for faster access to symbols
@@ -258,17 +268,17 @@
 class QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
 {
 public:
-  QgsGraduatedSymbolRendererV2(int attrNum = -1, QgsRangeList ranges = QgsRangeList());
+  QgsGraduatedSymbolRendererV2(QString attrName = QString(), QgsRangeList ranges = QgsRangeList());
   
   virtual ~QgsGraduatedSymbolRendererV2();
 
   virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
 	
-  virtual void startRender(QgsRenderContext& context);
+  virtual void startRender(QgsRenderContext& context, const QgsFieldMap& fields);
 	
   virtual void stopRender(QgsRenderContext& context);
 	
-  virtual QList<int> usedAttributes();
+  virtual QList<QString> usedAttributes();
 
   virtual QString dump();
 
@@ -276,9 +286,9 @@
 
   virtual QgsSymbolV2List symbols();
 
-  int attributeIndex() const { return mAttrNum; }
-  void setAttributeIndex(int attr) { mAttrNum = attr; }
-  
+  QString classAttribute() const { return mAttrName; }
+  void setClassAttribute(QString attr) { mAttrName = attr; }
+
   const QgsRangeList& ranges() { return mRanges; }
   
   bool updateRangeSymbol(int rangeIndex, QgsSymbolV2* symbol);
@@ -296,7 +306,7 @@
   
   static QgsGraduatedSymbolRendererV2* createRenderer(
                   QgsVectorLayer* vlayer,
-                  int attrNum,
+                  QString attrName,
                   int classes,
                   Mode mode,
                   QgsSymbolV2* symbol,
@@ -310,8 +320,11 @@
 
 protected:
   QgsRangeList mRanges;
+  QString mAttrName;
+  Mode mMode;
+
+  //! attribute index (derived from attribute name in startRender)
   int mAttrNum;
-  Mode mMode;
   
   QgsSymbolV2* symbolForValue(double value);
 };

Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-11-03 16:11:23 UTC (rev 11907)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-11-03 16:18:14 UTC (rev 11908)
@@ -150,9 +150,9 @@
   if (radSingleSymbol->isChecked())
     mRenderer = new QgsSingleSymbolRendererV2( mSingleSymbol->clone() );
   else if (radCategorized->isChecked())
-    mRenderer = new QgsCategorizedSymbolRendererV2(-1, QgsCategoryList());
+    mRenderer = new QgsCategorizedSymbolRendererV2(QString(), QgsCategoryList());
   else if (radGraduated->isChecked())
-    mRenderer = new QgsGraduatedSymbolRendererV2(-1, QgsRangeList());
+    mRenderer = new QgsGraduatedSymbolRendererV2(QString(), QgsRangeList());
   else
     Q_ASSERT(false);
     
@@ -178,7 +178,8 @@
 
       disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
       {
-        int idx = rendererCategorized()->attributeIndex();
+        QString attrName = rendererCategorized()->classAttribute();
+        int idx = cboCategorizedColumn->findText(attrName, Qt::MatchExactly);
         cboCategorizedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
       }
       connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
@@ -201,17 +202,11 @@
           spinGraduatedClasses->setValue( r->ranges().count() );
         
         // set column
-        int attrNum = r->attributeIndex();
-        const QgsFieldMap& flds = mLayer->dataProvider()->fields();
-        if (flds.contains(attrNum))
-        {
-          QString fldName = flds[ attrNum ].name();
-          for (int i=0; i < cboGraduatedColumn->count(); i++)
-          {
-            if (cboGraduatedColumn->itemText(i) == fldName)
-              cboGraduatedColumn->setCurrentIndex(i);
-          }
-        }
+        //disconnect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
+        QString attrName = r->classAttribute();
+        int idx = cboGraduatedColumn->findText(attrName, Qt::MatchExactly);
+        cboGraduatedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
+        //connect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
       }
       break;
       
@@ -337,7 +332,8 @@
 
 void QgsRendererV2PropertiesDialog::addCategories()
 {
-  int idx = mLayer->dataProvider()->fieldNameIndex(cboCategorizedColumn->currentText());
+  QString attrName = cboCategorizedColumn->currentText();
+  int idx = QgsFeatureRendererV2::fieldNameIndex(mLayer->pendingFields(), attrName);
   QList<QVariant> unique_vals;
   mLayer->dataProvider()->uniqueValues(idx, unique_vals);
   
@@ -366,7 +362,7 @@
       
   // recreate renderer
   delete mRenderer;
-  mRenderer = new QgsCategorizedSymbolRendererV2(idx, cats);
+  mRenderer = new QgsCategorizedSymbolRendererV2(attrName, cats);
   
   populateCategories();
 }
@@ -438,7 +434,7 @@
 
 void QgsRendererV2PropertiesDialog::classifyGraduated()
 {
-  int idx = mLayer->dataProvider()->fieldNameIndex(cboGraduatedColumn->currentText());
+  QString attrName = cboGraduatedColumn->currentText();
   
   int classes = spinGraduatedClasses->value();
   
@@ -452,7 +448,7 @@
   
   // create and set new renderer
   QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer(
-      mLayer, idx, classes, mode, mGraduatedSymbol, ramp);
+      mLayer, attrName, classes, mode, mGraduatedSymbol, ramp);
   r->setMode(mode);
   
   delete mRenderer;



More information about the QGIS-commit mailing list