Skip to content

Commit 4b29b80

Browse files
author
wonder
committed
[FEATURE] Labels for rules in rule-based renderers and some other goodies.
Applied patch #3222 from Mayeul Kauffmann with various modifications. git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@15217 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent cf9ae27 commit 4b29b80

File tree

6 files changed

+229
-65
lines changed

6 files changed

+229
-65
lines changed

src/core/symbology-ng/qgsrulebasedrendererv2.cpp

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
***************************************************************************/
1515

1616
#include "qgsrulebasedrendererv2.h"
17-
17+
#include "qgssymbollayerv2.h"
1818
#include "qgssearchtreenode.h"
1919
#include "qgssymbollayerv2utils.h"
2020
#include "qgsrendercontext.h"
@@ -28,10 +28,10 @@
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

6363
QString 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
}

src/core/symbology-ng/qgsrulebasedrendererv2.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
4444
{
4545
public:
4646
//! Constructor takes ownership of the symbol
47-
Rule( QgsSymbolV2* symbol, int scaleMinDenom = 0, int scaleMaxDenom = 0, QString filterExp = QString() );
47+
Rule( QgsSymbolV2* symbol, int scaleMinDenom = 0, int scaleMaxDenom = 0, QString filterExp = QString(), QString label = QString(), QString description = QString() );
4848
Rule( const Rule& other );
4949
~Rule();
5050
QString dump() const;
@@ -57,10 +57,14 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
5757
int scaleMinDenom() const { return mScaleMinDenom; }
5858
int scaleMaxDenom() const { return mScaleMaxDenom; }
5959
QString filterExpression() const { return mFilterExp; }
60+
QString label() const { return mLabel; }
61+
QString description() const { return mDescription; }
6062

6163
void setScaleMinDenom( int scaleMinDenom ) { mScaleMinDenom = scaleMinDenom; }
6264
void setScaleMaxDenom( int scaleMaxDenom ) { mScaleMaxDenom = scaleMaxDenom; }
6365
void setFilterExpression( QString filterExp ) { mFilterExp = filterExp; initFilter(); }
66+
void setLabel( QString label ) { mLabel = label; }
67+
void setDescription( QString description ) { mDescription = description; }
6468

6569
Rule& operator=( const Rule& other );
6670

@@ -70,7 +74,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
7074

7175
QgsSymbolV2* mSymbol;
7276
int mScaleMinDenom, mScaleMaxDenom;
73-
QString mFilterExp;
77+
QString mFilterExp, mLabel, mDescription;
7478

7579
// temporary
7680
QgsSearchString mFilterParsed;
@@ -81,7 +85,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
8185

8286
static QgsFeatureRendererV2* create( QDomElement& element );
8387

84-
//! Constructor. Takes ownership of the defult symbol.
88+
//! Constructor. Takes ownership of the default symbol.
8589
QgsRuleBasedRendererV2( QgsSymbolV2* defaultSymbol );
8690

8791
//! return symbol for current feature. Should not be used individually: there could be more symbols for a feature

0 commit comments

Comments
 (0)