26 #include <QDomDocument>
27 #include <QDomElement>
33 mScaleMinDenom( scaleMinDenom ), mScaleMaxDenom( scaleMaxDenom ),
34 mFilterExp( filterExp ), mLabel( label ), mDescription( description )
52 if ( !mFilterExp.isEmpty() )
54 mFilterParsed.setString( mFilterExp );
55 mFilterTree = mFilterParsed.tree();
65 return QString(
"RULE %1 - scale [%2,%3] - filter %4 - symbol %5" )
66 .arg( mLabel ).arg( mScaleMinDenom ).arg( mScaleMaxDenom )
67 .arg( mFilterExp ).arg( mSymbol->dump() );
76 return mFilterTree->referencedColumns();
84 bool res = mFilterTree->checkAgainst( fields, f );
91 if ( mScaleMinDenom == 0 && mScaleMaxDenom == 0 )
93 if ( mScaleMinDenom != 0 && mScaleMinDenom > scale )
95 if ( mScaleMaxDenom != 0 && mScaleMaxDenom < scale )
102 if (
this != &other )
149 bool drawVertexMarker )
170 for ( QList<Rule>::iterator it =
mRules.begin(); it !=
mRules.end(); ++it )
201 for ( QList<Rule>::iterator it =
mRules.begin(); it !=
mRules.end(); ++it )
206 return attrs.values();
224 for ( QList<Rule>::iterator it =
mRules.begin(); it !=
mRules.end(); ++it )
227 lst.append( rule.
symbol() );
236 rendererElem.setAttribute(
"type",
"RuleRenderer" );
238 rendererElem.setAttribute(
"firstrule", (
mUsingFirstRule ?
"1" :
"0" ) );
240 QDomElement rulesElem = doc.createElement(
"rules" );
246 for ( QList<Rule>::iterator it =
mRules.begin(); it !=
mRules.end(); ++i, ++it )
249 symbols[QString::number( i )] = rule.
symbol();
250 QDomElement ruleElem = doc.createElement(
"rule" );
251 ruleElem.setAttribute(
"symbol", i );
253 ruleElem.setAttribute(
"scalemindenom", rule.
scaleMinDenom() );
254 ruleElem.setAttribute(
"scalemaxdenom", rule.
scaleMaxDenom() );
255 ruleElem.setAttribute(
"label", rule.
label() );
256 ruleElem.setAttribute(
"description", rule.
description() );
257 rulesElem.appendChild( ruleElem );
259 rendererElem.appendChild( rulesElem );
262 rendererElem.appendChild( symbolsElem );
271 for ( QList<Rule>::iterator it =
mRules.begin(); it !=
mRules.end(); ++it )
274 lst << qMakePair( it->label(), pix );
282 for ( QList<Rule>::iterator it =
mRules.begin(); it !=
mRules.end(); ++it )
284 lst << qMakePair( it->label(), it->symbol() );
293 QDomElement symbolsElem = element.firstChildElement(
"symbols" );
294 if ( symbolsElem.isNull() )
299 if ( !symbolMap.contains(
"default" ) )
308 QDomElement rulesElem = element.firstChildElement(
"rules" );
309 QDomElement ruleElem = rulesElem.firstChildElement(
"rule" );
310 while ( !ruleElem.isNull() )
312 QString symbolIdx = ruleElem.attribute(
"symbol" );
313 if ( symbolMap.contains( symbolIdx ) )
315 QString filterExp = ruleElem.attribute(
"filter" );
316 QString label = ruleElem.attribute(
"label" );
317 QString description = ruleElem.attribute(
"description" );
318 int scaleMinDenom = ruleElem.attribute(
"scalemindenom",
"0" ).toInt();
319 int scaleMaxDenom = ruleElem.attribute(
"scalemaxdenom",
"0" ).toInt();
320 r->
mRules.append(
Rule( symbolMap.take( symbolIdx ), scaleMinDenom, scaleMaxDenom, filterExp, label, description ) );
324 QgsDebugMsg(
"symbol for rule " + symbolIdx +
" not found! (skipping)" );
326 ruleElem = ruleElem.nextSiblingElement(
"rule" );
353 mRules.insert( index, rule );
368 mRules.swap( index1, index2 );
380 QString newfilter = QString(
"%1 = '%2'" ).arg( r->
classAttribute() ).arg( cat.
value().toString() );
382 QString label = initialRule.
label();
384 if ( filter.isEmpty() )
387 filter = QString(
"(%1) AND (%2)" ).arg( filter ).arg( newfilter );
400 QString label = initialRule.
label();
402 if ( filter.isEmpty() )
405 filter = QString(
"(%1) AND (%2)" ).arg( filter ).arg( newfilter );
417 foreach(
int scale, scales )
421 if ( maxDenom != 0 && maxDenom <= scale )