QgsFeatureRendererV2* QgsSingleSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return nullptr; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); if ( !symbolMap.contains( "0" ) ) return nullptr; QgsSingleSymbolRendererV2* r = new QgsSingleSymbolRendererV2( symbolMap.take( "0" ) ); // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() && !rotationElem.attribute( "field" ).isEmpty() ) { convertSymbolRotation( r->mSymbol.data(), rotationElem.attribute( "field" ) ); } QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( "field" ).isEmpty() ) { convertSymbolSizeScale( r->mSymbol.data(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } // TODO: symbol levels return r; }
QgsFeatureRendererV2* QgsSingleSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); if ( !symbolMap.contains( "0" ) ) return NULL; QgsSingleSymbolRendererV2* r = new QgsSingleSymbolRendererV2( symbolMap.take( "0" ) ); // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() ) r->setRotationField( rotationElem.attribute( "field" ) ); QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() ) { r->setSizeScaleField( sizeScaleElem.attribute( "field" ) ); r->setScaleMethod( QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ) ); } // TODO: symbol levels return r; }
void QgsComposerSymbolV2Item::readXML( const QDomElement& itemElem, bool xServerAvailable ) { if ( itemElem.isNull() ) { return; } setText( itemElem.attribute( "text", "" ) ); setUserText( itemElem.attribute( "userText", "" ) ); QDomElement symbolsElem = itemElem.firstChildElement( "symbols" ); if ( !symbolsElem.isNull() ) { QgsSymbolV2Map loadSymbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); //we assume there is only one symbol in the map... QgsSymbolV2Map::iterator mapIt = loadSymbolMap.begin(); if ( mapIt != loadSymbolMap.end() ) { QgsSymbolV2* symbolNg = mapIt.value(); if ( symbolNg ) { setSymbolV2( symbolNg ); if ( xServerAvailable ) { setIcon( QgsSymbolLayerV2Utils::symbolPreviewIcon( symbolNg, QSize( 30, 30 ) ) ); } } } } }
QDomElement QgsCategorizedSymbolRendererV2::save( QDomDocument& doc ) { QDomElement rendererElem = doc.createElement( RENDERER_TAG_NAME ); rendererElem.setAttribute( "type", "categorizedSymbol" ); rendererElem.setAttribute( "symbollevels", ( mUsingSymbolLevels ? "1" : "0" ) ); rendererElem.setAttribute( "attr", mAttrName ); // categories int i = 0; QgsSymbolV2Map symbols; QDomElement catsElem = doc.createElement( "categories" ); QgsCategoryList::const_iterator it = mCategories.constBegin(); for ( ; it != mCategories.end(); it++ ) { const QgsRendererCategoryV2& cat = *it; QString symbolName = QString::number( i ); symbols.insert( symbolName, cat.symbol() ); QDomElement catElem = doc.createElement( "category" ); catElem.setAttribute( "value", cat.value().toString() ); catElem.setAttribute( "symbol", symbolName ); catElem.setAttribute( "label", cat.label() ); catsElem.appendChild( catElem ); i++; } rendererElem.appendChild( catsElem ); // save symbols QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols( symbols, "symbols", doc ); rendererElem.appendChild( symbolsElem ); // save source symbol if ( mSourceSymbol ) { QgsSymbolV2Map sourceSymbols; sourceSymbols.insert( "0", mSourceSymbol ); QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols( sourceSymbols, "source-symbol", doc ); rendererElem.appendChild( sourceSymbolElem ); } // save source color ramp if ( mSourceColorRamp ) { QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp( "[source]", mSourceColorRamp, doc ); rendererElem.appendChild( colorRampElem ); } QDomElement rotationElem = doc.createElement( "rotation" ); rotationElem.setAttribute( "field", mRotationField ); rendererElem.appendChild( rotationElem ); QDomElement sizeScaleElem = doc.createElement( "sizescale" ); sizeScaleElem.setAttribute( "field", mSizeScaleField ); sizeScaleElem.setAttribute( "scalemethod", QgsSymbolLayerV2Utils::encodeScaleMethod( mScaleMethod ) ); rendererElem.appendChild( sizeScaleElem ); return rendererElem; }
void QgsComposerSymbolV2Item::writeXML( QDomElement& elem, QDomDocument& doc ) const { QDomElement vectorClassElem = doc.createElement( "VectorClassificationItemNg" ); if ( mSymbolV2 ) { QgsSymbolV2Map saveSymbolMap; saveSymbolMap.insert( "classificationSymbol", mSymbolV2 ); QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols( saveSymbolMap, "symbols", doc ); vectorClassElem.appendChild( symbolsElem ); } vectorClassElem.setAttribute( "text", text() ); elem.appendChild( vectorClassElem ); }
QgsFeatureRendererV2* QgsRuleBasedRendererV2::create( QDomElement& element ) { // load symbols QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); if ( !symbolMap.contains( "default" ) ) { QgsDebugMsg( "default symbol not found!" ); return NULL; } QgsRuleBasedRendererV2* r = new QgsRuleBasedRendererV2( symbolMap.take( "default" ) ); r->mRules.clear(); QDomElement rulesElem = element.firstChildElement( "rules" ); QDomElement ruleElem = rulesElem.firstChildElement( "rule" ); while ( !ruleElem.isNull() ) { QString symbolIdx = ruleElem.attribute( "symbol" ); if ( symbolMap.contains( symbolIdx ) ) { QString filterExp = ruleElem.attribute( "filter" ); QString label = ruleElem.attribute( "label" ); QString description = ruleElem.attribute( "description" ); int scaleMinDenom = ruleElem.attribute( "scalemindenom", "0" ).toInt(); int scaleMaxDenom = ruleElem.attribute( "scalemaxdenom", "0" ).toInt(); r->mRules.append( Rule( symbolMap.take( symbolIdx ), scaleMinDenom, scaleMaxDenom, filterExp, label, description ) ); } else { QgsDebugMsg( "symbol for rule " + symbolIdx + " not found! (skipping)" ); } ruleElem = ruleElem.nextSiblingElement( "rule" ); } // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); return r; }
QDomElement QgsGraduatedSymbolRendererV2::save( QDomDocument& doc ) { QDomElement rendererElem = doc.createElement( RENDERER_TAG_NAME ); rendererElem.setAttribute( "type", "graduatedSymbol" ); rendererElem.setAttribute( "symbollevels", ( mUsingSymbolLevels ? "1" : "0" ) ); rendererElem.setAttribute( "attr", mAttrName ); // ranges int i = 0; QgsSymbolV2Map symbols; QDomElement rangesElem = doc.createElement( "ranges" ); QgsRangeList::const_iterator it = mRanges.constBegin(); for ( ; it != mRanges.constEnd(); ++it ) { const QgsRendererRangeV2& range = *it; QString symbolName = QString::number( i ); symbols.insert( symbolName, range.symbol() ); QDomElement rangeElem = doc.createElement( "range" ); rangeElem.setAttribute( "lower", QString::number( range.lowerValue(), 'f' ) ); rangeElem.setAttribute( "upper", QString::number( range.upperValue(), 'f' ) ); rangeElem.setAttribute( "symbol", symbolName ); rangeElem.setAttribute( "label", range.label() ); rangesElem.appendChild( rangeElem ); i++; } rendererElem.appendChild( rangesElem ); // save symbols QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols( symbols, "symbols", doc ); rendererElem.appendChild( symbolsElem ); // save source symbol if ( mSourceSymbol.data() ) { QgsSymbolV2Map sourceSymbols; sourceSymbols.insert( "0", mSourceSymbol.data() ); QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols( sourceSymbols, "source-symbol", doc ); rendererElem.appendChild( sourceSymbolElem ); } // save source color ramp if ( mSourceColorRamp.data() ) { QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp( "[source]", mSourceColorRamp.data(), doc ); rendererElem.appendChild( colorRampElem ); QDomElement invertedElem = doc.createElement( "invertedcolorramp" ); invertedElem.setAttribute( "value", mInvertedColorRamp ); rendererElem.appendChild( invertedElem ); } // save mode QString modeString; if ( mMode == EqualInterval ) modeString = "equal"; else if ( mMode == Quantile ) modeString = "quantile"; else if ( mMode == Jenks ) modeString = "jenks"; else if ( mMode == StdDev ) modeString = "stddev"; else if ( mMode == Pretty ) modeString = "pretty"; if ( !modeString.isEmpty() ) { QDomElement modeElem = doc.createElement( "mode" ); modeElem.setAttribute( "name", modeString ); rendererElem.appendChild( modeElem ); } QDomElement rotationElem = doc.createElement( "rotation" ); if ( mRotation.data() ) rotationElem.setAttribute( "field", QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mRotation.data() ) ); rendererElem.appendChild( rotationElem ); QDomElement sizeScaleElem = doc.createElement( "sizescale" ); if ( mSizeScale.data() ) sizeScaleElem.setAttribute( "field", QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mSizeScale.data() ) ); sizeScaleElem.setAttribute( "scalemethod", QgsSymbolLayerV2Utils::encodeScaleMethod( mScaleMethod ) ); rendererElem.appendChild( sizeScaleElem ); return rendererElem; }
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QDomElement rangesElem = element.firstChildElement( "ranges" ); if ( rangesElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); QgsRangeList ranges; QDomElement rangeElem = rangesElem.firstChildElement(); while ( !rangeElem.isNull() ) { if ( rangeElem.tagName() == "range" ) { double lowerValue = rangeElem.attribute( "lower" ).toDouble(); double upperValue = rangeElem.attribute( "upper" ).toDouble(); QString symbolName = rangeElem.attribute( "symbol" ); QString label = rangeElem.attribute( "label" ); if ( symbolMap.contains( symbolName ) ) { QgsSymbolV2* symbol = symbolMap.take( symbolName ); ranges.append( QgsRendererRangeV2( lowerValue, upperValue, symbol, label ) ); } } rangeElem = rangeElem.nextSiblingElement(); } QString attrName = element.attribute( "attr" ); QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges ); // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); // try to load source symbol (optional) QDomElement sourceSymbolElem = element.firstChildElement( "source-symbol" ); if ( !sourceSymbolElem.isNull() ) { QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols( sourceSymbolElem ); if ( sourceSymbolMap.contains( "0" ) ) { r->setSourceSymbol( sourceSymbolMap.take( "0" ) ); } QgsSymbolLayerV2Utils::clearSymbolMap( sourceSymbolMap ); } // try to load color ramp (optional) QDomElement sourceColorRampElem = element.firstChildElement( "colorramp" ); if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( "name" ) == "[source]" ) { r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) ); QDomElement invertedColorRampElem = element.firstChildElement( "invertedcolorramp" ); if ( !invertedColorRampElem.isNull() ) r->setInvertedColorRamp( invertedColorRampElem.attribute( "value" ) == "1" ); } // try to load mode QDomElement modeElem = element.firstChildElement( "mode" ); if ( !modeElem.isNull() ) { QString modeString = modeElem.attribute( "name" ); if ( modeString == "equal" ) r->setMode( EqualInterval ); else if ( modeString == "quantile" ) r->setMode( Quantile ); else if ( modeString == "jenks" ) r->setMode( Jenks ); else if ( modeString == "stddev" ) r->setMode( StdDev ); else if ( modeString == "pretty" ) r->setMode( Pretty ); } QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() ) r->setRotationField( rotationElem.attribute( "field" ) ); QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() ) r->setSizeScaleField( sizeScaleElem.attribute( "field" ) ); r->setScaleMethod( QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ) ); // TODO: symbol levels return r; }
QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QDomElement catsElem = element.firstChildElement( "categories" ); if ( catsElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); QgsCategoryList cats; QDomElement catElem = catsElem.firstChildElement(); while ( !catElem.isNull() ) { if ( catElem.tagName() == "category" ) { QVariant value = QVariant( catElem.attribute( "value" ) ); QString symbolName = catElem.attribute( "symbol" ); QString label = catElem.attribute( "label" ); if ( symbolMap.contains( symbolName ) ) { QgsSymbolV2* symbol = symbolMap.take( symbolName ); cats.append( QgsRendererCategoryV2( value, symbol, label ) ); } } catElem = catElem.nextSiblingElement(); } QString attrName = element.attribute( "attr" ); QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( attrName, cats ); // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); // try to load source symbol (optional) QDomElement sourceSymbolElem = element.firstChildElement( "source-symbol" ); if ( !sourceSymbolElem.isNull() ) { QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols( sourceSymbolElem ); if ( sourceSymbolMap.contains( "0" ) ) { r->setSourceSymbol( sourceSymbolMap.take( "0" ) ); } QgsSymbolLayerV2Utils::clearSymbolMap( sourceSymbolMap ); } // try to load color ramp (optional) QDomElement sourceColorRampElem = element.firstChildElement( "colorramp" ); if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( "name" ) == "[source]" ) { r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) ); QDomElement invertedColorRampElem = element.firstChildElement( "invertedcolorramp" ); if ( !invertedColorRampElem.isNull() ) r->setInvertedColorRamp( invertedColorRampElem.attribute( "value" ) == "1" ); } QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() ) r->setRotationField( rotationElem.attribute( "field" ) ); QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() ) { r->setSizeScaleField( sizeScaleElem.attribute( "field" ) ); r->setScaleMethod( QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ) ); } // TODO: symbol levels return r; }
QDomElement QgsCategorizedSymbolRendererV2::save( QDomDocument& doc ) { QDomElement rendererElem = doc.createElement( RENDERER_TAG_NAME ); rendererElem.setAttribute( "type", "categorizedSymbol" ); rendererElem.setAttribute( "symbollevels", ( mUsingSymbolLevels ? "1" : "0" ) ); rendererElem.setAttribute( "attr", mAttrName ); // categories int i = 0; QgsSymbolV2Map symbols; QDomElement catsElem = doc.createElement( "categories" ); QgsCategoryList::const_iterator it = mCategories.constBegin(); for ( ; it != mCategories.end(); ++it ) { const QgsRendererCategoryV2& cat = *it; QString symbolName = QString::number( i ); symbols.insert( symbolName, cat.symbol() ); QDomElement catElem = doc.createElement( "category" ); catElem.setAttribute( "value", cat.value().toString() ); catElem.setAttribute( "symbol", symbolName ); catElem.setAttribute( "label", cat.label() ); catElem.setAttribute( "render", cat.renderState() ? "true" : "false" ); catsElem.appendChild( catElem ); i++; } rendererElem.appendChild( catsElem ); // save symbols QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols( symbols, "symbols", doc ); rendererElem.appendChild( symbolsElem ); // save source symbol if ( mSourceSymbol.data() ) { QgsSymbolV2Map sourceSymbols; sourceSymbols.insert( "0", mSourceSymbol.data() ); QDomElement sourceSymbolElem = QgsSymbolLayerV2Utils::saveSymbols( sourceSymbols, "source-symbol", doc ); rendererElem.appendChild( sourceSymbolElem ); } // save source color ramp if ( mSourceColorRamp.data() ) { QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp( "[source]", mSourceColorRamp.data(), doc ); rendererElem.appendChild( colorRampElem ); QDomElement invertedElem = doc.createElement( "invertedcolorramp" ); invertedElem.setAttribute( "value", mInvertedColorRamp ); rendererElem.appendChild( invertedElem ); } QDomElement rotationElem = doc.createElement( "rotation" ); if ( mRotation.data() ) rotationElem.setAttribute( "field", QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mRotation.data() ) ); rendererElem.appendChild( rotationElem ); QDomElement sizeScaleElem = doc.createElement( "sizescale" ); if ( mSizeScale.data() ) sizeScaleElem.setAttribute( "field", QgsSymbolLayerV2Utils::fieldOrExpressionFromExpression( mSizeScale.data() ) ); sizeScaleElem.setAttribute( "scalemethod", QgsSymbolLayerV2Utils::encodeScaleMethod( mScaleMethod ) ); rendererElem.appendChild( sizeScaleElem ); if ( mPaintEffect ) mPaintEffect->saveProperties( doc, rendererElem ); return rendererElem; }
QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QDomElement catsElem = element.firstChildElement( "categories" ); if ( catsElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); QgsCategoryList cats; QDomElement catElem = catsElem.firstChildElement(); while ( !catElem.isNull() ) { if ( catElem.tagName() == "category" ) { QVariant value = QVariant( catElem.attribute( "value" ) ); QString symbolName = catElem.attribute( "symbol" ); QString label = catElem.attribute( "label" ); bool render = catElem.attribute( "render" ) != "false"; if ( symbolMap.contains( symbolName ) ) { QgsSymbolV2* symbol = symbolMap.take( symbolName ); cats.append( QgsRendererCategoryV2( value, symbol, label, render ) ); } } catElem = catElem.nextSiblingElement(); } QString attrName = element.attribute( "attr" ); QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( attrName, cats ); // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); // try to load source symbol (optional) QDomElement sourceSymbolElem = element.firstChildElement( "source-symbol" ); if ( !sourceSymbolElem.isNull() ) { QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols( sourceSymbolElem ); if ( sourceSymbolMap.contains( "0" ) ) { r->setSourceSymbol( sourceSymbolMap.take( "0" ) ); } QgsSymbolLayerV2Utils::clearSymbolMap( sourceSymbolMap ); } // try to load color ramp (optional) QDomElement sourceColorRampElem = element.firstChildElement( "colorramp" ); if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( "name" ) == "[source]" ) { r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) ); QDomElement invertedColorRampElem = element.firstChildElement( "invertedcolorramp" ); if ( !invertedColorRampElem.isNull() ) r->setInvertedColorRamp( invertedColorRampElem.attribute( "value" ) == "1" ); } QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() && !rotationElem.attribute( "field" ).isEmpty() ) { QgsCategoryList::iterator it = r->mCategories.begin(); for ( ; it != r->mCategories.end(); ++it ) { convertSymbolRotation( it->symbol(), rotationElem.attribute( "field" ) ); } if ( r->mSourceSymbol.data() ) { convertSymbolRotation( r->mSourceSymbol.data(), rotationElem.attribute( "field" ) ); } } QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( "field" ).isEmpty() ) { QgsCategoryList::iterator it = r->mCategories.begin(); for ( ; it != r->mCategories.end(); ++it ) { convertSymbolSizeScale( it->symbol(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } if ( r->mSourceSymbol.data() && r->mSourceSymbol->type() == QgsSymbolV2::Marker ) { convertSymbolSizeScale( r->mSourceSymbol.data(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } } // TODO: symbol levels return r; }
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create( QDomElement& element ) { QDomElement symbolsElem = element.firstChildElement( "symbols" ); if ( symbolsElem.isNull() ) return NULL; QDomElement rangesElem = element.firstChildElement( "ranges" ); if ( rangesElem.isNull() ) return NULL; QgsSymbolV2Map symbolMap = QgsSymbolLayerV2Utils::loadSymbols( symbolsElem ); QgsRangeList ranges; QDomElement rangeElem = rangesElem.firstChildElement(); while ( !rangeElem.isNull() ) { if ( rangeElem.tagName() == "range" ) { double lowerValue = rangeElem.attribute( "lower" ).toDouble(); double upperValue = rangeElem.attribute( "upper" ).toDouble(); QString symbolName = rangeElem.attribute( "symbol" ); QString label = rangeElem.attribute( "label" ); bool render = rangeElem.attribute( "render", "true" ) != "false"; if ( symbolMap.contains( symbolName ) ) { QgsSymbolV2* symbol = symbolMap.take( symbolName ); ranges.append( QgsRendererRangeV2( lowerValue, upperValue, symbol, label, render ) ); } } rangeElem = rangeElem.nextSiblingElement(); } QString attrName = element.attribute( "attr" ); QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges ); QString attrMethod = element.attribute( "graduatedMethod" ); if ( attrMethod.length() ) { if ( attrMethod == graduatedMethodStr( GraduatedColor ) ) r->setGraduatedMethod( GraduatedColor ); else if ( attrMethod == graduatedMethodStr( GraduatedSize ) ) r->setGraduatedMethod( GraduatedSize ); } // delete symbols if there are any more QgsSymbolLayerV2Utils::clearSymbolMap( symbolMap ); // try to load source symbol (optional) QDomElement sourceSymbolElem = element.firstChildElement( "source-symbol" ); if ( !sourceSymbolElem.isNull() ) { QgsSymbolV2Map sourceSymbolMap = QgsSymbolLayerV2Utils::loadSymbols( sourceSymbolElem ); if ( sourceSymbolMap.contains( "0" ) ) { r->setSourceSymbol( sourceSymbolMap.take( "0" ) ); } QgsSymbolLayerV2Utils::clearSymbolMap( sourceSymbolMap ); } // try to load color ramp (optional) QDomElement sourceColorRampElem = element.firstChildElement( "colorramp" ); if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( "name" ) == "[source]" ) { r->setSourceColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) ); QDomElement invertedColorRampElem = element.firstChildElement( "invertedcolorramp" ); if ( !invertedColorRampElem.isNull() ) r->setInvertedColorRamp( invertedColorRampElem.attribute( "value" ) == "1" ); } // try to load mode QDomElement modeElem = element.firstChildElement( "mode" ); if ( !modeElem.isNull() ) { QString modeString = modeElem.attribute( "name" ); if ( modeString == "equal" ) r->setMode( EqualInterval ); else if ( modeString == "quantile" ) r->setMode( Quantile ); else if ( modeString == "jenks" ) r->setMode( Jenks ); else if ( modeString == "stddev" ) r->setMode( StdDev ); else if ( modeString == "pretty" ) r->setMode( Pretty ); } QDomElement rotationElem = element.firstChildElement( "rotation" ); if ( !rotationElem.isNull() && !rotationElem.attribute( "field" ).isEmpty() ) { for ( QgsRangeList::iterator it = r->mRanges.begin(); it != r->mRanges.end(); ++it ) { convertSymbolRotation( it->symbol(), rotationElem.attribute( "field" ) ); } if ( r->mSourceSymbol.data() ) { convertSymbolRotation( r->mSourceSymbol.data(), rotationElem.attribute( "field" ) ); } } QDomElement sizeScaleElem = element.firstChildElement( "sizescale" ); if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( "field" ).isEmpty() ) { for ( QgsRangeList::iterator it = r->mRanges.begin(); it != r->mRanges.end(); ++it ) { convertSymbolSizeScale( it->symbol(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } if ( r->mSourceSymbol.data() && r->mSourceSymbol->type() == QgsSymbolV2::Marker ) { convertSymbolSizeScale( r->mSourceSymbol.data(), QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ), sizeScaleElem.attribute( "field" ) ); } } QDomElement labelFormatElem = element.firstChildElement( "labelformat" ); if ( ! labelFormatElem.isNull() ) { QgsRendererRangeV2LabelFormat labelFormat; labelFormat.setFromDomElement( labelFormatElem ); r->setLabelFormat( labelFormat ); } // TODO: symbol levels return r; }