Index: src/core/symbology-ng/qgsrulebasedrendererv2.h =================================================================== --- src/core/symbology-ng/qgsrulebasedrendererv2.h (Revision 14033) +++ src/core/symbology-ng/qgsrulebasedrendererv2.h (Arbeitskopie) @@ -102,6 +102,13 @@ //! store renderer info to XML element virtual QDomElement save( QDomDocument& doc ); + //! return a list of symbology items for the legend + virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ); + + //! return a list of item text / symbol + //! @note: this method was added in version 1.5 + virtual QgsLegendSymbolList legendSymbolItems(); + ///// //! return the total number of rules Index: src/core/symbology-ng/qgsrulebasedrendererv2.cpp =================================================================== --- src/core/symbology-ng/qgsrulebasedrendererv2.cpp (Revision 14033) +++ src/core/symbology-ng/qgsrulebasedrendererv2.cpp (Arbeitskopie) @@ -126,7 +126,15 @@ QgsSymbolV2* QgsRuleBasedRendererV2::symbolForFeature( QgsFeature& feature ) { - return mCurrentSymbol; + //return first matching rule (though sometimes not correct if several rules apply) + for ( QList::iterator it = mCurrentRules.begin(); it != mCurrentRules.end(); ++it ) + { + Rule* rule = *it; + if ( rule->isFilterOK( mCurrentFields, feature ) ) + { + return rule->symbol(); + } + } } void QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature, @@ -198,6 +206,7 @@ QgsSymbolV2* s = mDefaultSymbol->clone(); QgsRuleBasedRendererV2* r = new QgsRuleBasedRendererV2( s ); r->mRules = mRules; + r->setUsingSymbolLevels( usingSymbolLevels() ); return r; } @@ -243,7 +252,28 @@ return rendererElem; } +QgsLegendSymbologyList QgsRuleBasedRendererV2::legendSymbologyItems( QSize iconSize ) +{ + QgsLegendSymbologyList lst; + for ( QList::iterator it = mRules.begin(); it != mRules.end(); ++it ) + { + QPixmap pix = QgsSymbolLayerV2Utils::symbolPreviewPixmap( it->symbol(), iconSize ); + lst << qMakePair( it->filterExpression(), pix ); + } + return lst; +} +QgsLegendSymbolList QgsRuleBasedRendererV2::legendSymbolItems() +{ + QgsLegendSymbolList lst; + for ( QList::iterator it = mRules.begin(); it != mRules.end(); ++it ) + { + lst << qMakePair( it->filterExpression(), it->symbol() ); + } + return lst; +} + + QgsFeatureRendererV2* QgsRuleBasedRendererV2::create( QDomElement& element ) { // load symbols @@ -355,7 +385,7 @@ QList QgsRuleBasedRendererV2::refineRuleScales( QgsRuleBasedRendererV2::Rule& initialRule, QList scales ) { - qSort(scales); // make sure the scales are in ascending order + qSort( scales ); // make sure the scales are in ascending order QList rules; int oldScale = initialRule.scaleMinDenom(); int maxDenom = initialRule.scaleMaxDenom();