1414 ***************************************************************************/
1515
1616#include " qgsrulebasedrendererv2.h"
17-
17+ # include " qgssymbollayerv2.h "
1818#include " qgssearchtreenode.h"
1919#include " qgssymbollayerv2utils.h"
2020#include " qgsrendercontext.h"
2828
2929
3030
31- QgsRuleBasedRendererV2::Rule::Rule ( QgsSymbolV2* symbol, int scaleMinDenom, int scaleMaxDenom, QString filterExp )
31+ QgsRuleBasedRendererV2::Rule::Rule ( QgsSymbolV2* symbol, int scaleMinDenom, int scaleMaxDenom, QString filterExp, QString label, QString description )
3232 : mSymbol( symbol ),
3333 mScaleMinDenom( scaleMinDenom ), mScaleMaxDenom( scaleMaxDenom ),
34- mFilterExp( filterExp )
34+ mFilterExp( filterExp ), mLabel( label ), mDescription( description )
3535{
3636 initFilter ();
3737}
@@ -62,8 +62,8 @@ void QgsRuleBasedRendererV2::Rule::initFilter()
6262
6363QString QgsRuleBasedRendererV2::Rule::dump () const
6464{
65- return QString ( " RULE - scale [%1,%2 ] - filter %3 - symbol %4 " )
66- .arg ( mScaleMinDenom ).arg ( mScaleMaxDenom )
65+ return QString ( " RULE %1 - scale [%2,%3 ] - filter %4 - symbol %5 " )
66+ .arg ( mLabel ). arg ( mScaleMinDenom ).arg ( mScaleMaxDenom )
6767 .arg ( mFilterExp ).arg ( mSymbol ->dump () );
6868
6969}
@@ -107,6 +107,8 @@ QgsRuleBasedRendererV2::Rule& QgsRuleBasedRendererV2::Rule::operator=( const Qgs
107107 mScaleMinDenom = other.mScaleMinDenom ;
108108 mScaleMaxDenom = other.mScaleMaxDenom ;
109109 mFilterExp = other.mFilterExp ;
110+ mLabel = other.mLabel ;
111+ mDescription = other.mDescription ;
110112 initFilter ();
111113 }
112114 return *this ;
@@ -233,6 +235,8 @@ QDomElement QgsRuleBasedRendererV2::save( QDomDocument& doc )
233235 ruleElem.setAttribute ( " filter" , rule.filterExpression () );
234236 ruleElem.setAttribute ( " scalemindenom" , rule.scaleMinDenom () );
235237 ruleElem.setAttribute ( " scalemaxdenom" , rule.scaleMaxDenom () );
238+ ruleElem.setAttribute ( " label" , rule.label () );
239+ ruleElem.setAttribute ( " description" , rule.description () );
236240 rulesElem.appendChild ( ruleElem );
237241 }
238242 rendererElem.appendChild ( rulesElem );
@@ -250,7 +254,7 @@ QgsLegendSymbologyList QgsRuleBasedRendererV2::legendSymbologyItems( QSize iconS
250254 for ( QList<Rule>::iterator it = mRules .begin (); it != mRules .end (); ++it )
251255 {
252256 QPixmap pix = QgsSymbolLayerV2Utils::symbolPreviewPixmap ( it->symbol (), iconSize );
253- lst << qMakePair ( it->filterExpression (), pix );
257+ lst << qMakePair ( it->label (), pix );
254258 }
255259 return lst;
256260}
@@ -260,7 +264,7 @@ QgsLegendSymbolList QgsRuleBasedRendererV2::legendSymbolItems()
260264 QgsLegendSymbolList lst;
261265 for ( QList<Rule>::iterator it = mRules .begin (); it != mRules .end (); ++it )
262266 {
263- lst << qMakePair ( it->filterExpression (), it->symbol () );
267+ lst << qMakePair ( it->label (), it->symbol () );
264268 }
265269 return lst;
266270}
@@ -292,9 +296,11 @@ QgsFeatureRendererV2* QgsRuleBasedRendererV2::create( QDomElement& element )
292296 if ( symbolMap.contains ( symbolIdx ) )
293297 {
294298 QString filterExp = ruleElem.attribute ( " filter" );
299+ QString label = ruleElem.attribute ( " label" );
300+ QString description = ruleElem.attribute ( " description" );
295301 int scaleMinDenom = ruleElem.attribute ( " scalemindenom" , " 0" ).toInt ();
296302 int scaleMaxDenom = ruleElem.attribute ( " scalemaxdenom" , " 0" ).toInt ();
297- r->mRules .append ( Rule ( symbolMap.take ( symbolIdx ), scaleMinDenom, scaleMaxDenom, filterExp ) );
303+ r->mRules .append ( Rule ( symbolMap.take ( symbolIdx ), scaleMinDenom, scaleMaxDenom, filterExp, label, description ) );
298304 }
299305 else
300306 {
@@ -350,11 +356,13 @@ QList<QgsRuleBasedRendererV2::Rule> QgsRuleBasedRendererV2::refineRuleCategories
350356 {
351357 QString newfilter = QString ( " %1 = '%2'" ).arg ( r->classAttribute () ).arg ( cat.value ().toString () );
352358 QString filter = initialRule.filterExpression ();
359+ QString label = initialRule.label ();
360+ QString description = initialRule.description ();
353361 if ( filter.isEmpty () )
354362 filter = newfilter;
355363 else
356364 filter = QString ( " (%1) AND (%2)" ).arg ( filter ).arg ( newfilter );
357- rules.append ( Rule ( cat.symbol ()->clone (), initialRule.scaleMinDenom (), initialRule.scaleMaxDenom (), filter ) );
365+ rules.append ( Rule ( cat.symbol ()->clone (), initialRule.scaleMinDenom (), initialRule.scaleMaxDenom (), filter, initialRule. label (), initialRule. description () ) );
358366 }
359367 return rules;
360368}
@@ -366,11 +374,13 @@ QList<QgsRuleBasedRendererV2::Rule> QgsRuleBasedRendererV2::refineRuleRanges( Qg
366374 {
367375 QString newfilter = QString ( " %1 >= '%2' AND %1 <= '%3'" ).arg ( r->classAttribute () ).arg ( rng.lowerValue () ).arg ( rng.upperValue () );
368376 QString filter = initialRule.filterExpression ();
377+ QString label = initialRule.label ();
378+ QString description = initialRule.description ();
369379 if ( filter.isEmpty () )
370380 filter = newfilter;
371381 else
372382 filter = QString ( " (%1) AND (%2)" ).arg ( filter ).arg ( newfilter );
373- rules.append ( Rule ( rng.symbol ()->clone (), initialRule.scaleMinDenom (), initialRule.scaleMaxDenom (), filter ) );
383+ rules.append ( Rule ( rng.symbol ()->clone (), initialRule.scaleMinDenom (), initialRule.scaleMaxDenom (), filter, initialRule. label (), initialRule. description () ) );
374384 }
375385 return rules;
376386}
@@ -387,10 +397,10 @@ QList<QgsRuleBasedRendererV2::Rule> QgsRuleBasedRendererV2::refineRuleScales( Qg
387397 continue ; // jump over the first scales out of the interval
388398 if ( maxDenom != 0 && maxDenom <= scale )
389399 break ; // ignore the latter scales out of the interval
390- rules.append ( Rule ( initialRule.symbol ()->clone (), oldScale, scale, initialRule.filterExpression () ) );
400+ rules.append ( Rule ( initialRule.symbol ()->clone (), oldScale, scale, initialRule.filterExpression (), initialRule. label (), initialRule. description () ) );
391401 oldScale = scale;
392402 }
393403 // last rule
394- rules.append ( Rule ( initialRule.symbol ()->clone (), oldScale, maxDenom, initialRule.filterExpression () ) );
404+ rules.append ( Rule ( initialRule.symbol ()->clone (), oldScale, maxDenom, initialRule.filterExpression (), initialRule. label (), initialRule. description () ) );
395405 return rules;
396406}
0 commit comments