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

svn_qgis at osgeo.org svn_qgis at osgeo.org
Thu Jul 23 05:42:00 EDT 2009


Author: wonder
Date: 2009-07-23 05:41:59 -0400 (Thu, 23 Jul 2009)
New Revision: 11151

Modified:
   branches/symbology-ng-branch/python/core/symbology-ng-core.sip
   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/core/symbology-ng/qgssymbollayerv2.h
   branches/symbology-ng-branch/src/core/symbology-ng/qgssymbolv2.cpp
   branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
   branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp
   branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.h
Log:
Slightly reworked the internal working of symbol levels. Fixes some problems with symbol levels handling.


Modified: branches/symbology-ng-branch/python/core/symbology-ng-core.sip
===================================================================
--- branches/symbology-ng-branch/python/core/symbology-ng-core.sip	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/python/core/symbology-ng-core.sip	2009-07-23 09:41:59 UTC (rev 11151)
@@ -61,8 +61,8 @@
 
   void renderFeature(QgsFeature& feature, QgsRenderContext& context, int layer = -1);
 
-  QgsSymbolV2LevelOrder& symbolLevels();
-  void setSymbolLevels(const QgsSymbolV2LevelOrder& levelOrder);
+  bool usingSymbolLevels() const;
+  void setUsingSymbolLevels(bool usingSymbolLevels);
 
 protected:
   QgsFeatureRendererV2(RendererType type);
@@ -296,7 +296,11 @@
 	
   void setLocked(bool locked);
 	bool isLocked() const;
-	
+
+  // used only with rending with symbol levels is turned on (0 = first pass, 1 = second, ...)
+  void setRenderingPass(int renderingPass);
+  int renderingPass() const;
+
 protected:
   QgsSymbolLayerV2(QgsSymbolV2::SymbolType type, bool locked = false);
 	

Modified: branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp	2009-07-23 09:41:59 UTC (rev 11151)
@@ -73,6 +73,8 @@
 #include "qgsmaplayerregistry.h"
 
 #include "qgsrendererv2.h"
+#include "qgssymbolv2.h"
+#include "qgssymbollayerv2.h"
 
 #ifdef Q_WS_X11
 #include "qgsclipper.h"
@@ -706,8 +708,23 @@
       mLabelingRegisterFeatureHook(fet, mLabelingLayerContext);
   }
 
+  // find out the order
+  QgsSymbolV2LevelOrder levels;
+  QgsSymbolV2List symbols = mRendererV2->symbols();
+  for (int i = 0; i < symbols.count(); i++)
+  {
+    QgsSymbolV2* sym = symbols[i];
+    for (int j = 0; j < sym->symbolLayerCount(); j++)
+    {
+      int level = sym->symbolLayer(j)->renderingPass();
+      QgsSymbolV2LevelItem item(sym,j);
+      while (level >= levels.count()) // append new empty levels
+        levels.append( QgsSymbolV2Level() );
+      levels[level].append(item);
+    }
+  }
+
   // 2. draw features in correct order
-  QgsSymbolV2LevelOrder& levels = mRendererV2->symbolLevels();
   for (int l = 0; l < levels.count(); l++)
   {
     QgsSymbolV2Level& level = levels[l];
@@ -762,10 +779,10 @@
 
     select( attributes, rendererContext.extent() );
 
-    if (mRendererV2->symbolLevels().isEmpty())
+    if (mRendererV2->usingSymbolLevels())
+      drawRendererV2Levels(rendererContext, labeling);
+    else
       drawRendererV2(rendererContext, labeling);
-    else
-      drawRendererV2Levels(rendererContext, labeling);
 
     return TRUE;
   }

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp	2009-07-23 09:41:59 UTC (rev 11151)
@@ -111,7 +111,7 @@
 
 
 QgsFeatureRendererV2::QgsFeatureRendererV2(RendererType type)
-  : mType(type)
+  : mType(type), mUsingSymbolLevels(false)
 {
 }
 
@@ -294,7 +294,7 @@
 QgsFeatureRendererV2* QgsSingleSymbolRendererV2::clone()
 {
   QgsSingleSymbolRendererV2* r = new QgsSingleSymbolRendererV2( mSymbol->clone() );
-  r->setSymbolLevels( symbolLevels() );
+  r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
 
@@ -496,7 +496,7 @@
 QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::clone()
 {
   QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( mAttrNum, mCategories );
-  r->setSymbolLevels( symbolLevels() );
+  r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
 
@@ -654,7 +654,7 @@
 QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone()
 {
   QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( mAttrNum, mRanges );
-  r->setSymbolLevels( symbolLevels() );
+  r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
 

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.h	2009-07-23 09:41:59 UTC (rev 11151)
@@ -73,15 +73,15 @@
   //! for symbol levels
   virtual QgsSymbolV2List symbols()=0;
 
-  QgsSymbolV2LevelOrder& symbolLevels() { return mLevelOrder; }
-  void setSymbolLevels(const QgsSymbolV2LevelOrder& levelOrder) { mLevelOrder = levelOrder; }
+  bool usingSymbolLevels() const { return mUsingSymbolLevels; }
+  void setUsingSymbolLevels(bool usingSymbolLevels) { mUsingSymbolLevels = usingSymbolLevels; }
   
 protected:
   QgsFeatureRendererV2(RendererType type);
   
   RendererType mType;
 
-  QgsSymbolV2LevelOrder mLevelOrder;
+  bool mUsingSymbolLevels;
 };
 
 class QgsSingleSymbolRendererV2 : public QgsFeatureRendererV2

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2.h	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgssymbollayerv2.h	2009-07-23 09:41:59 UTC (rev 11151)
@@ -49,13 +49,19 @@
 	
   void setLocked(bool locked) { mLocked = locked; }
 	bool isLocked() const { return mLocked; }
+
+  // used only with rending with symbol levels is turned on (0 = first pass, 1 = second, ...)
+  void setRenderingPass(int renderingPass) { mRenderingPass = renderingPass; }
+  int renderingPass() const { return mRenderingPass; }
 	
 protected:
-  QgsSymbolLayerV2(QgsSymbolV2::SymbolType type, bool locked = false) : mType(type), mLocked(locked) {}
+  QgsSymbolLayerV2(QgsSymbolV2::SymbolType type, bool locked = false)
+      : mType(type), mLocked(locked), mRenderingPass(0) {}
 	
   QgsSymbolV2::SymbolType mType;
 	bool mLocked;
   QColor mColor;
+  int mRenderingPass;
 };
 
 //////////////////////

Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgssymbolv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgssymbolv2.cpp	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgssymbolv2.cpp	2009-07-23 09:41:59 UTC (rev 11151)
@@ -216,6 +216,7 @@
   {
     QgsSymbolLayerV2* layer = (*it)->clone();
     layer->setLocked( (*it)->isLocked() );
+    layer->setRenderingPass( (*it)->renderingPass() );
     lst.append( layer );
   }
   return lst;

Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-07-23 09:41:59 UTC (rev 11151)
@@ -550,9 +550,9 @@
 {
   QgsSymbolV2List symbols = mRenderer->symbols();
 
-  QgsSymbolLevelsV2Dialog dlg(symbols, mRenderer->symbolLevels(), this);
+  QgsSymbolLevelsV2Dialog dlg(symbols, mRenderer->usingSymbolLevels(), this);
   if (dlg.exec())
   {
-    mRenderer->setSymbolLevels( dlg.levels() );
+    mRenderer->setUsingSymbolLevels( dlg.usingLevels() );
   }
 }

Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp	2009-07-23 09:41:59 UTC (rev 11151)
@@ -2,16 +2,17 @@
 #include "qgssymbollevelsv2dialog.h"
 
 #include "qgssymbollayerv2utils.h"
+#include "qgssymbollayerv2.h"
 #include "qgssymbolv2.h"
 
 #include <QTableWidgetItem>
 
-QgsSymbolLevelsV2Dialog::QgsSymbolLevelsV2Dialog(QgsSymbolV2List symbols, QgsSymbolV2LevelOrder levels, QWidget* parent)
- : QDialog(parent), mSymbols(symbols), mLevels(levels)
+QgsSymbolLevelsV2Dialog::QgsSymbolLevelsV2Dialog(QgsSymbolV2List symbols, bool usingSymbolLevels, QWidget* parent)
+ : QDialog(parent), mSymbols(symbols)
 {
   setupUi(this);
 
-  chkEnable->setChecked( !levels.isEmpty() );
+  chkEnable->setChecked( usingSymbolLevels );
 
   connect(chkEnable, SIGNAL(clicked()), this, SLOT(updateUi()));
 
@@ -42,17 +43,14 @@
 
   updateUi();
 
-  connect(tableLevels, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(updateLevels(QTableWidgetItem*)));
+  if (!usingSymbolLevels)
+    setDefaultLevels();
+
   populateTable();
 }
 
 void QgsSymbolLevelsV2Dialog::populateTable()
 {
-  if (mLevels.isEmpty())
-    return;
-
-  disconnect(tableLevels, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(updateLevels(QTableWidgetItem*)));
-
   for (int row = 0; row < mSymbols.count(); row++)
   {
     QgsSymbolV2* sym = mSymbols[row];
@@ -66,81 +64,33 @@
       }
       else
       {
-        item = new QTableWidgetItem( QString::number(levelForSymbolLayer(sym, layer)) );
+        item = new QTableWidgetItem( QString::number( sym->symbolLayer(layer)->renderingPass() ) );
       }
       tableLevels->setItem(row, layer, item);
     }
   }
 
-  connect(tableLevels, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(updateLevels(QTableWidgetItem*)));
-
 }
 
 void QgsSymbolLevelsV2Dialog::updateUi()
 {
-  if (chkEnable->isChecked())
-  {
-    if (mLevels.isEmpty())
-      setDefaultLevels();
-    populateTable();
-  }
-  else
-    mLevels.clear();
-
   tableLevels->setEnabled(chkEnable->isChecked());
 }
 
 void QgsSymbolLevelsV2Dialog::setDefaultLevels()
 {
-  mLevels.clear();
-  for (int col = 0; col < tableLevels->columnCount(); col++)
+  for (int i = 0; i < mSymbols.count(); i++)
   {
-    QgsSymbolV2Level level;
-    for (int i = 0; i < mSymbols.count(); i++)
+    QgsSymbolV2* sym = mSymbols[i];
+    for (int layer = 0; layer < sym->symbolLayerCount(); layer++)
     {
-      QgsSymbolV2* sym = mSymbols[i];
-      if (col < sym->symbolLayerCount())
-        level.append(QgsSymbolV2LevelItem(sym, col));
+      sym->symbolLayer(layer)->setRenderingPass(layer);
     }
-    mLevels.append(level);
   }
 }
 
-int QgsSymbolLevelsV2Dialog::levelForSymbolLayer(QgsSymbolV2* sym, int layer)
-{
-  for (int l = 0; l < mLevels.count(); l++)
-  {
-    QgsSymbolV2Level& level = mLevels[l];
-    for (int i = 0; i < level.count(); i++)
-    {
-      QgsSymbolV2LevelItem& item = level[i];
-      if (item.symbol() == sym && item.layer() == layer)
-        return l;
-    }
-  }
-  return -1;
-}
 
-void QgsSymbolLevelsV2Dialog::updateLevels(QTableWidgetItem* item)
+bool QgsSymbolLevelsV2Dialog::usingLevels() const
 {
-  int num = item->text().toInt();
-  if (num > 100)
-  {
-    item->setText("0");
-    return;
-  }
-
-  mLevels.clear();
-  for (int col = 0; col < tableLevels->columnCount(); col++)
-  {
-    for (int row = 0; row < mSymbols.count(); row++)
-    {
-      QgsSymbolV2* sym = mSymbols[row];
-      int level = tableLevels->item(row,col)->text().toInt();
-      QgsSymbolV2LevelItem item(sym,col);
-      while (level >= mLevels.count()) // append new empty levels
-        mLevels.append( QgsSymbolV2Level() );
-      mLevels[level].append(item);
-    }
-  }
+  return chkEnable->isChecked();
 }

Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.h	2009-07-22 20:58:32 UTC (rev 11150)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollevelsv2dialog.h	2009-07-23 09:41:59 UTC (rev 11151)
@@ -13,24 +13,21 @@
 {
   Q_OBJECT
 public:
-    QgsSymbolLevelsV2Dialog(QgsSymbolV2List symbols, QgsSymbolV2LevelOrder levels, QWidget* parent = NULL);
+    QgsSymbolLevelsV2Dialog(QgsSymbolV2List symbols, bool usingSymbolLevels, QWidget* parent = NULL);
 
-    QgsSymbolV2LevelOrder& levels() { return mLevels; }
+    bool usingLevels() const;
 
 public slots:
     void updateUi();
-    void updateLevels(QTableWidgetItem* item);
 
 protected:
     void populateTable();
     void setDefaultLevels();
-    int levelForSymbolLayer(QgsSymbolV2* sym, int layer);
 
 protected:
     //! maximal number of layers from all symbols
     int mMaxLayers;
     QgsSymbolV2List mSymbols;
-    QgsSymbolV2LevelOrder mLevels;
 };
 
 #endif // QGSSYMBOLLEVELSV2DIALOG_H



More information about the QGIS-commit mailing list