[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