[QGIS Commit] r11918 - in branches/symbology-ng-branch/src: core/symbology-ng gui/symbology-ng

svn_qgis at osgeo.org svn_qgis at osgeo.org
Wed Nov 4 09:04:15 EST 2009


Author: wonder
Date: 2009-11-04 09:04:14 -0500 (Wed, 04 Nov 2009)
New Revision: 11918

Modified:
   branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.h
   branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h
   branches/symbology-ng-branch/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.h
   branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.cpp
   branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.h
   branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
Log:
categorized and graduated renderers remember their source symbol and color ramp


Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp	2009-11-04 14:04:14 UTC (rev 11918)
@@ -3,6 +3,7 @@
 
 #include "qgssymbolv2.h"
 #include "qgssymbollayerv2utils.h"
+#include "qgsvectorcolorrampv2.h"
 
 #include "qgsfeature.h"
 #include "qgslogger.h"
@@ -63,7 +64,11 @@
 ///////////////////
 
 QgsCategorizedSymbolRendererV2::QgsCategorizedSymbolRendererV2(QString attrName, QgsCategoryList categories)
-  : QgsFeatureRendererV2(RendererCategorizedSymbol), mAttrName(attrName), mCategories(categories)
+  : QgsFeatureRendererV2(RendererCategorizedSymbol),
+    mAttrName(attrName),
+    mCategories(categories),
+    mSourceSymbol(NULL),
+    mSourceColorRamp(NULL)
 {
   for (int i = 0; i < mCategories.count(); ++i)
   {
@@ -80,6 +85,8 @@
 QgsCategorizedSymbolRendererV2::~QgsCategorizedSymbolRendererV2()
 {
   mCategories.clear(); // this should also call destructors of symbols
+  delete mSourceSymbol;
+  delete mSourceColorRamp;
 }
 
 void QgsCategorizedSymbolRendererV2::rebuildHash()
@@ -202,6 +209,10 @@
 QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::clone()
 {
   QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( mAttrName, mCategories );
+  if (mSourceSymbol)
+    r->setSourceSymbol(mSourceSymbol->clone());
+  if (mSourceColorRamp)
+    r->setSourceColorRamp(mSourceColorRamp->clone());
   r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
@@ -251,6 +262,25 @@
   // delete symbols if there are any more
   QgsSymbolLayerV2Utils::clearSymbolMap(symbolMap);
 
+  // try to load source symbol (optional)
+  QDomElement sourceSymbolElem = element.firstChildElement("source-symbol");
+  if (!sourceSymbolElem.isNull())
+  {
+    QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols(sourceSymbolElem);
+    if (sourceSymbolMap.contains("0"))
+    {
+      r->setSourceSymbol( sourceSymbolMap.take("0") );
+    }
+    QgsSymbolLayerV2Utils::clearSymbolMap(sourceSymbolMap);
+  }
+
+  // try to load color ramp (optional)
+  QDomElement sourceColorRampElem = element.firstChildElement("colorramp");
+  if (!sourceColorRampElem.isNull() && sourceColorRampElem.attribute("name") == "[source]")
+  {
+    r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp(sourceColorRampElem) );
+  }
+
   // TODO: symbol levels
   return r;
 }
@@ -283,8 +313,44 @@
   rendererElem.appendChild(catsElem);
 
   // save symbols
-  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, doc);
+  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, "symbols", doc);
   rendererElem.appendChild(symbolsElem);
 
+  // save source symbol
+  if (mSourceSymbol)
+  {
+    QgsSymbolV2Map sourceSymbols;
+    sourceSymbols.insert("0", mSourceSymbol);
+    QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols(sourceSymbols, "source-symbol", doc);
+    rendererElem.appendChild(sourceSymbolElem);
+  }
+
+  // save source color ramp
+  if (mSourceColorRamp)
+  {
+    QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp("[source]", mSourceColorRamp, doc);
+    rendererElem.appendChild(colorRampElem);
+  }
+
   return rendererElem;
 }
+
+QgsSymbolV2* QgsCategorizedSymbolRendererV2::sourceSymbol()
+{
+  return mSourceSymbol;
+}
+void QgsCategorizedSymbolRendererV2::setSourceSymbol(QgsSymbolV2* sym)
+{
+  delete mSourceSymbol;
+  mSourceSymbol = sym;
+}
+
+QgsVectorColorRampV2* QgsCategorizedSymbolRendererV2::sourceColorRamp()
+{
+  return mSourceColorRamp;
+}
+void QgsCategorizedSymbolRendererV2::setSourceColorRamp(QgsVectorColorRampV2* ramp)
+{
+  delete mSourceColorRamp;
+  mSourceColorRamp = ramp;
+}

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.h	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgscategorizedsymbolrendererv2.h	2009-11-04 14:04:14 UTC (rev 11918)
@@ -5,6 +5,7 @@
 
 #include <QHash>
 
+class QgsVectorColorRampV2;
 
 class QgsRendererCategoryV2
 {
@@ -78,9 +79,17 @@
   //! store renderer info to XML element
   virtual QDomElement save(QDomDocument& doc);
 
+  QgsSymbolV2* sourceSymbol();
+  void setSourceSymbol(QgsSymbolV2* sym);
+
+  QgsVectorColorRampV2* sourceColorRamp();
+  void setSourceColorRamp(QgsVectorColorRampV2* ramp);
+
 protected:
   QgsCategoryList mCategories;
   QString mAttrName;
+  QgsSymbolV2* mSourceSymbol;
+  QgsVectorColorRampV2* mSourceColorRamp;
 
   //! attribute index (derived from attribute name in startRender)
   int mAttrNum;

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp	2009-11-04 14:04:14 UTC (rev 11918)
@@ -3,6 +3,7 @@
 
 #include "qgssymbolv2.h"
 #include "qgssymbollayerv2utils.h"
+#include "qgsvectorcolorrampv2.h"
 
 #include "qgsfeature.h"
 #include "qgslogger.h"
@@ -68,7 +69,12 @@
 
 
 QgsGraduatedSymbolRendererV2::QgsGraduatedSymbolRendererV2(QString attrName, QgsRangeList ranges)
-  : QgsFeatureRendererV2(RendererGraduatedSymbol), mAttrName(attrName), mRanges(ranges), mMode(Custom)
+  : QgsFeatureRendererV2(RendererGraduatedSymbol),
+    mAttrName(attrName),
+    mRanges(ranges),
+    mMode(Custom),
+    mSourceSymbol(NULL),
+    mSourceColorRamp(NULL)
 {
   // TODO: check ranges for sanity (NULL symbols, invalid ranges)
 }
@@ -76,6 +82,8 @@
 QgsGraduatedSymbolRendererV2::~QgsGraduatedSymbolRendererV2()
 {
   mRanges.clear(); // should delete all the symbols
+  delete mSourceSymbol;
+  delete mSourceColorRamp;
 }
 
 QgsSymbolV2* QgsGraduatedSymbolRendererV2::symbolForValue(double value)
@@ -155,6 +163,10 @@
 QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone()
 {
   QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrName, mRanges );
+  if (mSourceSymbol)
+    r->setSourceSymbol(mSourceSymbol->clone());
+  if (mSourceColorRamp)
+    r->setSourceColorRamp(mSourceColorRamp->clone());
   r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
@@ -275,7 +287,11 @@
     ranges.append( QgsRendererRangeV2(lower, upper, newSymbol, label) );
   }
 
-  return new QgsGraduatedSymbolRendererV2( attrName, ranges );
+  QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges );
+  r->setSourceSymbol( symbol->clone() );
+  r->setSourceColorRamp( ramp->clone() );
+  r->setMode(mode);
+  return r;
 }
 
 
@@ -318,6 +334,36 @@
   // delete symbols if there are any more
   QgsSymbolLayerV2Utils::clearSymbolMap(symbolMap);
 
+  // try to load source symbol (optional)
+  QDomElement sourceSymbolElem = element.firstChildElement("source-symbol");
+  if (!sourceSymbolElem.isNull())
+  {
+    QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols(sourceSymbolElem);
+    if (sourceSymbolMap.contains("0"))
+    {
+      r->setSourceSymbol( sourceSymbolMap.take("0") );
+    }
+    QgsSymbolLayerV2Utils::clearSymbolMap(sourceSymbolMap);
+  }
+
+  // try to load color ramp (optional)
+  QDomElement sourceColorRampElem = element.firstChildElement("colorramp");
+  if (!sourceColorRampElem.isNull() && sourceColorRampElem.attribute("name") == "[source]")
+  {
+    r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp(sourceColorRampElem) );
+  }
+
+  // try to load mode
+  QDomElement modeElem = element.firstChildElement("mode");
+  if (!modeElem.isNull())
+  {
+    QString modeString = modeElem.attribute("name");
+    if (modeString == "equal")
+      r->setMode(EqualInterval);
+    else if (modeString == "quantile")
+      r->setMode(Quantile);
+  }
+
   // TODO: symbol levels
   return r;
 }
@@ -351,8 +397,57 @@
   rendererElem.appendChild(rangesElem);
 
   // save symbols
-  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, doc);
+  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, "symbols", doc);
   rendererElem.appendChild(symbolsElem);
 
+  // save source symbol
+  if (mSourceSymbol)
+  {
+    QgsSymbolV2Map sourceSymbols;
+    sourceSymbols.insert("0", mSourceSymbol);
+    QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols(sourceSymbols, "source-symbol", doc);
+    rendererElem.appendChild(sourceSymbolElem);
+  }
+
+  // save source color ramp
+  if (mSourceColorRamp)
+  {
+    QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp("[source]", mSourceColorRamp, doc);
+    rendererElem.appendChild(colorRampElem);
+  }
+
+  // save mode
+  QString modeString;
+  if (mMode == EqualInterval)
+    modeString = "equal";
+  else if (mMode == Quantile)
+    modeString = "quantile";
+  if (!modeString.isEmpty())
+  {
+    QDomElement modeElem = doc.createElement("mode");
+    modeElem.setAttribute("name", modeString);
+    rendererElem.appendChild(modeElem);
+  }
+
   return rendererElem;
 }
+
+QgsSymbolV2* QgsGraduatedSymbolRendererV2::sourceSymbol()
+{
+  return mSourceSymbol;
+}
+void QgsGraduatedSymbolRendererV2::setSourceSymbol(QgsSymbolV2* sym)
+{
+  delete mSourceSymbol;
+  mSourceSymbol = sym;
+}
+
+QgsVectorColorRampV2* QgsGraduatedSymbolRendererV2::sourceColorRamp()
+{
+  return mSourceColorRamp;
+}
+void QgsGraduatedSymbolRendererV2::setSourceColorRamp(QgsVectorColorRampV2* ramp)
+{
+  delete mSourceColorRamp;
+  mSourceColorRamp = ramp;
+}

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h	2009-11-04 14:04:14 UTC (rev 11918)
@@ -87,10 +87,18 @@
   //! store renderer info to XML element
   virtual QDomElement save(QDomDocument& doc);
 
+  QgsSymbolV2* sourceSymbol();
+  void setSourceSymbol(QgsSymbolV2* sym);
+
+  QgsVectorColorRampV2* sourceColorRamp();
+  void setSourceColorRamp(QgsVectorColorRampV2* ramp);
+
 protected:
   QgsRangeList mRanges;
   QString mAttrName;
   Mode mMode;
+  QgsSymbolV2* mSourceSymbol;
+  QgsVectorColorRampV2* mSourceColorRamp;
 
   //! attribute index (derived from attribute name in startRender)
   int mAttrNum;

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp	2009-11-04 14:04:14 UTC (rev 11918)
@@ -95,7 +95,7 @@
 
   QgsSymbolV2Map symbols;
   symbols["0"] = mSymbol;
-  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, doc);
+  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(symbols, "symbols", doc);
   rendererElem.appendChild(symbolsElem);
 
   return rendererElem;

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.cpp	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.cpp	2009-11-04 14:04:14 UTC (rev 11918)
@@ -205,7 +205,7 @@
   {
     if (e.tagName() == "colorramp")
     {
-      QgsVectorColorRampV2* ramp = loadColorRamp(e);
+      QgsVectorColorRampV2* ramp = QgsSymbolLayerV2Utils::loadColorRamp(e);
       if (ramp != NULL)
         addColorRamp(e.attribute("name"), ramp);
     }
@@ -220,26 +220,7 @@
 }
 
 
-QgsVectorColorRampV2* QgsStyleV2::loadColorRamp(QDomElement& element)
-{
-  QString rampType = element.attribute("type");
-  
-  // parse properties
-  QgsStringMap props = QgsSymbolLayerV2Utils::parseProperties(element);
-  
-  if (rampType == "gradient")
-    return QgsVectorGradientColorRampV2::create(props);
-  else if (rampType == "random")
-    return QgsVectorRandomColorRampV2::create(props);
-  else
-  {
-    QgsDebugMsg("unknown colorramp type " + rampType);
-    return NULL;
-  }
-}
 
-
-
 bool QgsStyleV2::save(QString filename)
 {
   mErrorString = QString();
@@ -251,14 +232,14 @@
   root.setAttribute("version", STYLE_CURRENT_VERSION);
   doc.appendChild(root);
 
-  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(mSymbols, doc);
+  QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols(mSymbols, "symbols", doc);
 
   QDomElement rampsElem = doc.createElement("colorramps");
   
   // save color ramps
   for (QMap<QString, QgsVectorColorRampV2*>::iterator itr = mColorRamps.begin(); itr != mColorRamps.end(); ++itr)
   {
-    QDomElement rampEl = saveColorRamp(itr.key(), itr.value(), doc);
+    QDomElement rampEl = QgsSymbolLayerV2Utils::saveColorRamp(itr.key(), itr.value(), doc);
     rampsElem.appendChild(rampEl);
   }
 
@@ -278,13 +259,3 @@
   
   return true;
 }
-
-QDomElement QgsStyleV2::saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc)
-{
-  QDomElement rampEl = doc.createElement("colorramp");
-  rampEl.setAttribute("type", ramp->type());
-  rampEl.setAttribute("name", name);
-  
-  QgsSymbolLayerV2Utils::saveProperties(ramp->properties(), doc, rampEl);
-  return rampEl;
-}

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.h	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsstylev2.h	2009-11-04 14:04:14 UTC (rev 11918)
@@ -78,10 +78,6 @@
   
 protected:
 
-  QgsVectorColorRampV2* loadColorRamp(QDomElement& element);
-  
-  QDomElement saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc);
-
   QgsSymbolV2Map mSymbols;
   QgsVectorColorRampV2Map mColorRamps;
   

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.cpp	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.cpp	2009-11-04 14:04:14 UTC (rev 11918)
@@ -515,9 +515,9 @@
   return symbols;
 }
 
-QDomElement QgsSymbolLayerV2Utils::saveSymbols(QgsSymbolV2Map& symbols, QDomDocument& doc)
+QDomElement QgsSymbolLayerV2Utils::saveSymbols(QgsSymbolV2Map& symbols, QString tagName, QDomDocument& doc)
 {
-  QDomElement symbolsElem = doc.createElement("symbols");
+  QDomElement symbolsElem = doc.createElement(tagName);
 
   QMap<QString, QgsSymbolV2*> subSymbols;
 
@@ -544,3 +544,33 @@
     delete symbols.value(name);
   symbols.clear();
 }
+
+
+QgsVectorColorRampV2* QgsSymbolLayerV2Utils::loadColorRamp(QDomElement& element)
+{
+  QString rampType = element.attribute("type");
+
+  // parse properties
+  QgsStringMap props = QgsSymbolLayerV2Utils::parseProperties(element);
+
+  if (rampType == "gradient")
+    return QgsVectorGradientColorRampV2::create(props);
+  else if (rampType == "random")
+    return QgsVectorRandomColorRampV2::create(props);
+  else
+  {
+    QgsDebugMsg("unknown colorramp type " + rampType);
+    return NULL;
+  }
+}
+
+
+QDomElement QgsSymbolLayerV2Utils::saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc)
+{
+  QDomElement rampEl = doc.createElement("colorramp");
+  rampEl.setAttribute("type", ramp->type());
+  rampEl.setAttribute("name", name);
+
+  QgsSymbolLayerV2Utils::saveProperties(ramp->properties(), doc, rampEl);
+  return rampEl;
+}

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.h	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2utils.h	2009-11-04 14:04:14 UTC (rev 11918)
@@ -57,9 +57,12 @@
   static void saveProperties(QgsStringMap props, QDomDocument& doc, QDomElement& element);
 
   static QgsSymbolV2Map loadSymbols(QDomElement& element);
-  static QDomElement saveSymbols(QgsSymbolV2Map& symbols, QDomDocument& doc);
+  static QDomElement saveSymbols(QgsSymbolV2Map& symbols, QString tagName, QDomDocument& doc);
 
   static void clearSymbolMap(QgsSymbolV2Map& symbols);
+
+  static QgsVectorColorRampV2* loadColorRamp(QDomElement& element);
+  static QDomElement saveColorRamp(QString name, QgsVectorColorRampV2* ramp, QDomDocument& doc);
 };
 
 class QPolygonF;

Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-11-04 09:08:34 UTC (rev 11917)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-11-04 14:04:14 UTC (rev 11918)
@@ -181,15 +181,39 @@
     
       stackedWidget->setCurrentWidget(pageCategorized);
       updateCategorizedSymbolIcon();
+      populateCategories();
 
-      disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
       {
-        QString attrName = rendererCategorized()->classAttribute();
+        QgsCategorizedSymbolRendererV2* r = rendererCategorized();
+
+        // set column
+        disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+        QString attrName = r->classAttribute();
         int idx = cboCategorizedColumn->findText(attrName, Qt::MatchExactly);
         cboCategorizedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
+        connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+
+        // set source symbol
+        if (r->sourceSymbol())
+        {
+          delete mCategorizedSymbol;
+          mCategorizedSymbol = r->sourceSymbol()->clone();
+          updateCategorizedSymbolIcon();
+        }
+
+        // set source color ramp
+        if (r->sourceColorRamp())
+        {
+          QSize rampIconSize(50,16);
+          QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(r->sourceColorRamp(), rampIconSize);
+          if (cboCategorizedColorRamp->itemText(0) == "[source]")
+            cboCategorizedColorRamp->setItemIcon(0, icon);
+          else
+            cboCategorizedColorRamp->insertItem(0, icon, "[source]");
+          cboCategorizedColorRamp->setCurrentIndex(0);
+        }
       }
-      connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
-      populateCategories();
+
       break;
   
     case QgsFeatureRendererV2::RendererGraduatedSymbol:
@@ -213,6 +237,26 @@
         int idx = cboGraduatedColumn->findText(attrName, Qt::MatchExactly);
         cboGraduatedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
         //connect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
+
+        // set source symbol
+        if (r->sourceSymbol())
+        {
+          delete mGraduatedSymbol;
+          mGraduatedSymbol = r->sourceSymbol()->clone();
+          updateGraduatedSymbolIcon();
+        }
+
+        // set source color ramp
+        if (r->sourceColorRamp())
+        {
+          QSize rampIconSize(50,16);
+          QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(r->sourceColorRamp(), rampIconSize);
+          if (cboGraduatedColorRamp->itemText(0) == "[source]")
+            cboGraduatedColorRamp->setItemIcon(0, icon);
+          else
+            cboGraduatedColorRamp->insertItem(0, icon, "[source]");
+          cboGraduatedColorRamp->setCurrentIndex(0);
+        }
       }
       break;
       
@@ -346,9 +390,14 @@
   //DlgAddCategories dlg(mStyle, createDefaultSymbol(), unique_vals, this);
   //if (!dlg.exec())
   //  return;
+
+  QgsVectorColorRampV2* ramp = NULL;
+  QString rampName = cboCategorizedColorRamp->currentText();
+  if (rampName == "[source]" && rendererCategorized())
+    ramp = rendererCategorized()->sourceColorRamp()->clone();
+  else
+    ramp = mStyle->colorRamp( rampName );
   
-  QgsVectorColorRampV2* ramp = mStyle->colorRamp( cboCategorizedColorRamp->currentText() );
-  
   QgsCategoryList cats;
   ::createCategories(cats, unique_vals, mCategorizedSymbol, ramp );
   
@@ -368,8 +417,11 @@
       
   // recreate renderer
   delete mRenderer;
-  mRenderer = new QgsCategorizedSymbolRendererV2(attrName, cats);
-  
+  QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2(attrName, cats);
+  r->setSourceSymbol(mCategorizedSymbol->clone());
+  r->setSourceColorRamp(ramp->clone());
+  mRenderer = r;
+
   populateCategories();
 }
 
@@ -444,8 +496,13 @@
   
   int classes = spinGraduatedClasses->value();
   
-  QgsVectorColorRampV2* ramp = mStyle->colorRamp( cboGraduatedColorRamp->currentText() );
-  
+  QgsVectorColorRampV2* ramp = NULL;
+  QString rampName = cboGraduatedColorRamp->currentText();
+  if (rampName == "[source]" && rendererGraduated())
+    ramp = rendererGraduated()->sourceColorRamp()->clone();
+  else
+    ramp = mStyle->colorRamp( rampName );
+
   QgsGraduatedSymbolRendererV2::Mode mode;
   if (cboGraduatedMode->currentIndex() == 0)
     mode = QgsGraduatedSymbolRendererV2::EqualInterval;
@@ -455,7 +512,6 @@
   // create and set new renderer
   QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer(
       mLayer, attrName, classes, mode, mGraduatedSymbol, ramp);
-  r->setMode(mode);
   
   delete mRenderer;
   mRenderer = r;



More information about the QGIS-commit mailing list