QgsStringReplacement QgsStringReplacement::fromProperties( const QgsStringMap& properties ) { return QgsStringReplacement( properties.value( QStringLiteral( "match" ) ), properties.value( QStringLiteral( "replace" ) ), properties.value( QStringLiteral( "caseSensitive" ), QStringLiteral( "0" ) ) == QLatin1String( "1" ), properties.value( QStringLiteral( "wholeWord" ), QStringLiteral( "0" ) ) == QLatin1String( "1" ) ); }
void QgsComposerNodesItem::drawNodes( QPainter *painter ) const { double rectSize = 3.0 / horizontalViewScaleFactor(); QgsStringMap properties; properties.insert( QStringLiteral( "name" ), QStringLiteral( "cross" ) ); properties.insert( QStringLiteral( "color_border" ), QStringLiteral( "red" ) ); QScopedPointer<QgsMarkerSymbol> symbol; symbol.reset( QgsMarkerSymbol::createSimple( properties ) ); symbol.data()->setSize( rectSize ); symbol.data()->setAngle( 45 ); QgsRenderContext context = QgsComposerUtils::createRenderContext( mComposition, painter ); context.setForceVectorOutput( true ); QgsExpressionContext expressionContext = createExpressionContext(); context.setExpressionContext( expressionContext ); symbol.data()->startRender( context ); Q_FOREACH ( QPointF pt, mPolygon ) symbol.data()->renderPoint( pt, nullptr, context ); symbol.data()->stopRender( context ); if ( mSelectedNode >= 0 && mSelectedNode < mPolygon.size() ) drawSelectedNode( painter ); }
QgsExpressionContextScope* QgsExpressionContextUtils::projectScope() { QgsProject* project = QgsProject::instance(); QgsExpressionContextScope* scope = new QgsExpressionContextScope( QObject::tr( "Project" ) ); const QgsStringMap vars = QgsProject::instance()->variables(); QgsStringMap::const_iterator it = vars.constBegin(); for ( ; it != vars.constEnd(); ++it ) { scope->setVariable( it.key(), it.value() ); } //add other known project variables scope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "project_title" ), project->title(), true ) ); scope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "project_path" ), project->fileInfo().filePath(), true ) ); scope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "project_folder" ), project->fileInfo().dir().path(), true ) ); scope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "project_filename" ), project->fileInfo().fileName(), true ) ); QgsCoordinateReferenceSystem projectCrs = project->crs(); scope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "project_crs" ), projectCrs.authid(), true ) ); scope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "project_crs_definition" ), projectCrs.toProj4(), true ) ); scope->addFunction( QStringLiteral( "project_color" ), new GetNamedProjectColor() ); return scope; }
void QgsSimpleLineSymbolLayerV2::toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const { if ( mPenStyle == Qt::NoPen ) return; QDomElement symbolizerElem = doc.createElement( "se:LineSymbolizer" ); if ( !props.value( "uom", "" ).isEmpty() ) symbolizerElem.setAttribute( "uom", props.value( "uom", "" ) ); element.appendChild( symbolizerElem ); // <Geometry> QgsSymbolLayerV2Utils::createGeometryElement( doc, symbolizerElem, props.value( "geom", "" ) ); // <Stroke> QDomElement strokeElem = doc.createElement( "se:Stroke" ); symbolizerElem.appendChild( strokeElem ); Qt::PenStyle penStyle = mUseCustomDashPattern ? Qt::CustomDashLine : mPenStyle; QgsSymbolLayerV2Utils::lineToSld( doc, strokeElem, penStyle, mColor, mWidth, &mPenJoinStyle, &mPenCapStyle, &mCustomDashVector ); // <se:PerpendicularOffset> if ( mOffset != 0 ) { QDomElement perpOffsetElem = doc.createElement( "se:PerpendicularOffset" ); perpOffsetElem.appendChild( doc.createTextNode( QString::number( mOffset ) ) ); symbolizerElem.appendChild( perpOffsetElem ); } }
void QgsFontMarkerSymbolLayerV2::writeSldMarker( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const { // <Graphic> QDomElement graphicElem = doc.createElement( "se:Graphic" ); element.appendChild( graphicElem ); QString fontPath = QString( "ttf://%1" ).arg( mFontFamily ); int markIndex = mChr.unicode(); QgsSymbolLayerV2Utils::externalMarkerToSld( doc, graphicElem, fontPath, "ttf", &markIndex, mColor, mSize ); // <Rotation> QString angleFunc; bool ok; double angle = props.value( "angle", "0" ).toDouble( &ok ); if ( !ok ) { angleFunc = QString( "%1 + %2" ).arg( props.value( "angle", "0" ) ).arg( mAngle ); } else if ( angle + mAngle != 0 ) { angleFunc = QString::number( angle + mAngle ); } QgsSymbolLayerV2Utils::createRotationElement( doc, graphicElem, angleFunc ); // <Displacement> QgsSymbolLayerV2Utils::createDisplacementElement( doc, graphicElem, mOffset ); }
void QgsSvgMarkerSymbolLayerV2::writeSldMarker( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const { // <Graphic> QDomElement graphicElem = doc.createElement( "se:Graphic" ); element.appendChild( graphicElem ); QgsSymbolLayerV2Utils::externalGraphicToSld( doc, graphicElem, mPath, "image/svg+xml", mFillColor, mSize ); // <Rotation> QString angleFunc; bool ok; double angle = props.value( "angle", "0" ).toDouble( &ok ); if ( !ok ) { angleFunc = QString( "%1 + %2" ).arg( props.value( "angle", "0" ) ).arg( mAngle ); } else if ( angle + mAngle != 0 ) { angleFunc = QString::number( angle + mAngle ); } QgsSymbolLayerV2Utils::createRotationElement( doc, graphicElem, angleFunc ); // <Displacement> QgsSymbolLayerV2Utils::createDisplacementElement( doc, graphicElem, mOffset ); }
void QgsSymbolLayer::restoreDataDefinedProperties( const QgsStringMap &stringMap ) { QgsStringMap::const_iterator propIt = stringMap.constBegin(); for ( ; propIt != stringMap.constEnd(); ++propIt ) { if ( propIt.key().endsWith( QLatin1String( "_dd_expression" ) ) ) { //found a data defined property //get data defined property name by stripping "_dd_expression" from property key QString propertyName = propIt.key().left( propIt.key().length() - 14 ); QgsDataDefined* dd = QgsDataDefined::fromMap( stringMap, propertyName ); if ( dd ) setDataDefinedProperty( propertyName, dd ); } else if ( propIt.key().endsWith( QLatin1String( "_expression" ) ) ) { //old style data defined property, upgrade //get data defined property name by stripping "_expression" from property key QString propertyName = propIt.key().left( propIt.key().length() - 11 ); setDataDefinedProperty( propertyName, new QgsDataDefined( propIt.value() ) ); } } }
void QgsAuthConfigSelect::populateConfigSelector() { loadAvailableConfigs(); validateConfig(); cmbConfigSelect->blockSignals( true ); cmbConfigSelect->clear(); cmbConfigSelect->addItem( tr( "No authentication" ), "0" ); QgsStringMap sortmap; QgsAuthMethodConfigsMap::const_iterator cit = mConfigs.constBegin(); for ( cit = mConfigs.constBegin(); cit != mConfigs.constEnd(); ++cit ) { QgsAuthMethodConfig config = cit.value(); sortmap.insert( QStringLiteral( "%1 (%2)" ).arg( config.name(), config.method() ), cit.key() ); } QgsStringMap::const_iterator sm = sortmap.constBegin(); for ( sm = sortmap.constBegin(); sm != sortmap.constEnd(); ++sm ) { cmbConfigSelect->addItem( sm.key(), sm.value() ); } cmbConfigSelect->blockSignals( false ); int indx = 0; if ( !mAuthCfg.isEmpty() ) { indx = cmbConfigSelect->findData( mAuthCfg ); } cmbConfigSelect->setCurrentIndex( indx > 0 ? indx : 0 ); }
QgsStringMap QgsAuthPkcs12Edit::configMap() const { QgsStringMap config; config.insert( "bundlepath", lePkcs12Bundle->text() ); config.insert( "bundlepass", lePkcs12KeyPass->text() ); return config; }
void QgsComposerArrow::createDefaultLineSymbol() { delete mLineSymbol; QgsStringMap properties; properties.insert( QStringLiteral( "color" ), QStringLiteral( "0,0,0,255" ) ); properties.insert( QStringLiteral( "width" ), QStringLiteral( "1" ) ); properties.insert( QStringLiteral( "capstyle" ), QStringLiteral( "square" ) ); mLineSymbol = QgsLineSymbol::createSimple( properties ); }
QgsStringMap QgsDrawSourceEffect::properties() const { QgsStringMap props; props.insert( QStringLiteral( "enabled" ), mEnabled ? "1" : "0" ); props.insert( QStringLiteral( "draw_mode" ), QString::number( int( mDrawMode ) ) ); props.insert( QStringLiteral( "blend_mode" ), QString::number( int( mBlendMode ) ) ); props.insert( QStringLiteral( "transparency" ), QString::number( mTransparency ) ); return props; }
void QgsComposerArrow::createDefaultLineSymbol() { delete mLineSymbol; QgsStringMap properties; properties.insert( "color", "0,0,0,255" ); properties.insert( "width", "1" ); properties.insert( "capstyle", "square" ); mLineSymbol = QgsLineSymbolV2::createSimple( properties ); }
QgsStringMap QgsStringReplacement::properties() const { QgsStringMap map; map.insert( QStringLiteral( "match" ), mMatch ); map.insert( QStringLiteral( "replace" ), mReplacement ); map.insert( QStringLiteral( "caseSensitive" ), mCaseSensitive ? "1" : "0" ); map.insert( QStringLiteral( "wholeWord" ), mWholeWordOnly ? "1" : "0" ); return map; }
QgsStringMap QgsAuthPkiPathsEdit::configMap() const { QgsStringMap config; config.insert( "certpath", lePkiPathsCert->text() ); config.insert( "keypath", lePkiPathsKey->text() ); config.insert( "keypass", lePkiPathsKeyPass->text() ); return config; }
void QgsSVGFillSymbolLayer::toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const { QDomElement symbolizerElem = doc.createElement( "se:PolygonSymbolizer" ); if ( !props.value( "uom", "" ).isEmpty() ) symbolizerElem.setAttribute( "uom", props.value( "uom", "" ) ); element.appendChild( symbolizerElem ); QgsSymbolLayerV2Utils::createGeometryElement( doc, symbolizerElem, props.value( "geom", "" ) ); QDomElement fillElem = doc.createElement( "se:Fill" ); symbolizerElem.appendChild( fillElem ); QDomElement graphicFillElem = doc.createElement( "se:GraphicFill" ); fillElem.appendChild( graphicFillElem ); QDomElement graphicElem = doc.createElement( "se:Graphic" ); graphicFillElem.appendChild( graphicElem ); if ( !mSvgFilePath.isEmpty() ) { QgsSymbolLayerV2Utils::externalGraphicToSld( doc, graphicElem, mSvgFilePath, "image/svg+xml", mSvgFillColor, mPatternWidth ); } else { // TODO: create svg from data // <se:InlineContent> symbolizerElem.appendChild( doc.createComment( "SVG from data not implemented yet" ) ); } if ( mSvgOutlineColor.isValid() || mSvgOutlineWidth >= 0 ) { QgsSymbolLayerV2Utils::lineToSld( doc, graphicElem, Qt::SolidLine, mSvgOutlineColor, mSvgOutlineWidth ); } // <Rotation> QString angleFunc; bool ok; double angle = props.value( "angle", "0" ).toDouble( &ok ); if ( !ok ) { angleFunc = QString( "%1 + %2" ).arg( props.value( "angle", "0" ) ).arg( mAngle ); } else if ( angle + mAngle != 0 ) { angleFunc = QString::number( angle + mAngle ); } QgsSymbolLayerV2Utils::createRotationElement( doc, graphicElem, angleFunc ); if ( mOutline ) { // the outline sub symbol should be stored within the Stroke element, // but it will be stored in a separated LineSymbolizer because it could // have more than one layer mOutline->toSld( doc, element, props ); } }
void QgsLayoutItemPolyline::createDefaultPolylineStyleSymbol() { QgsStringMap properties; properties.insert( QStringLiteral( "color" ), QStringLiteral( "0,0,0,255" ) ); properties.insert( QStringLiteral( "width" ), QStringLiteral( "0.3" ) ); properties.insert( QStringLiteral( "capstyle" ), QStringLiteral( "square" ) ); mPolylineStyleSymbol.reset( QgsLineSymbol::createSimple( properties ) ); refreshSymbol(); }
void QgsExpressionContextUtils::setProjectVariable( const QString& name, const QVariant& value ) { QgsProject* project = QgsProject::instance(); QgsStringMap vars = project->variables(); vars.insert( name, value.toString() ); project->setVariables( vars ); }
void QgsAuthPkcs12Edit::loadConfig( const QgsStringMap &configmap ) { clearConfig(); mConfigMap = configmap; lePkcs12Bundle->setText( configmap.value( "bundlepath" ) ); lePkcs12KeyPass->setText( configmap.value( "bundlepass" ) ); validateConfig(); }
void QgsComposerMapOverview::createDefaultFrameSymbol() { delete mFrameSymbol; QgsStringMap properties; properties.insert( "color", "255,0,0,255" ); properties.insert( "style", "solid" ); properties.insert( "style_border", "no" ); mFrameSymbol = QgsFillSymbolV2::createSimple( properties ); mFrameSymbol->setAlpha( 0.3 ); }
QgsSymbolLayer *QgsEllipseSymbolLayer::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement graphicElem = element.firstChildElement( QStringLiteral( "Graphic" ) ); if ( graphicElem.isNull() ) return nullptr; QString name = QStringLiteral( "circle" ); QColor fillColor, strokeColor; double strokeWidth, size; double widthHeightFactor = 1.0; Qt::PenStyle strokeStyle; QgsStringMap vendorOptions = QgsSymbolLayerUtils::getVendorOptionList( graphicElem ); for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it ) { if ( it.key() == QLatin1String( "widthHeightFactor" ) ) { bool ok; double v = it.value().toDouble( &ok ); if ( ok && !qgsDoubleNear( v, 0.0 ) && v > 0 ) widthHeightFactor = v; } } if ( !QgsSymbolLayerUtils::wellKnownMarkerFromSld( graphicElem, name, fillColor, strokeColor, strokeStyle, strokeWidth, size ) ) return nullptr; QString uom = element.attribute( QStringLiteral( "uom" ) ); size = QgsSymbolLayerUtils::sizeInPixelsFromSldUom( uom, size ); strokeWidth = QgsSymbolLayerUtils::sizeInPixelsFromSldUom( uom, strokeWidth ); double angle = 0.0; QString angleFunc; if ( QgsSymbolLayerUtils::rotationFromSldElement( graphicElem, angleFunc ) ) { bool ok; double d = angleFunc.toDouble( &ok ); if ( ok ) angle = d; } QgsEllipseSymbolLayer *m = new QgsEllipseSymbolLayer(); m->setOutputUnit( QgsUnitTypes::RenderUnit::RenderPixels ); m->setSymbolName( name ); m->setFillColor( fillColor ); m->setStrokeColor( strokeColor ); m->setStrokeStyle( strokeStyle ); m->setStrokeWidth( strokeWidth ); m->setSymbolWidth( size ); m->setSymbolHeight( size / widthHeightFactor ); m->setAngle( angle ); return m; }
void QgsComposerPolyline::createDefaultPolylineStyleSymbol() { QgsStringMap properties; properties.insert( "color", "0,0,0,255" ); properties.insert( "width", "0.3" ); properties.insert( "capstyle", "square" ); mPolylineStyleSymbol.reset( QgsLineSymbolV2::createSimple( properties ) ); emit frameChanged(); }
void QgsAuthPkiPathsEdit::loadConfig( const QgsStringMap &configmap ) { clearConfig(); mConfigMap = configmap; lePkiPathsCert->setText( configmap.value( "certpath" ) ); lePkiPathsKey->setText( configmap.value( "keypath" ) ); lePkiPathsKeyPass->setText( configmap.value( "keypass" ) ); validateConfig(); }
QgsLayoutItemShape::QgsLayoutItemShape( QgsLayout *layout ) : QgsLayoutItem( layout ) { QgsStringMap properties; properties.insert( QStringLiteral( "color" ), QStringLiteral( "white" ) ); properties.insert( QStringLiteral( "style" ), QStringLiteral( "solid" ) ); properties.insert( QStringLiteral( "style_border" ), QStringLiteral( "solid" ) ); properties.insert( QStringLiteral( "color_border" ), QStringLiteral( "black" ) ); properties.insert( QStringLiteral( "width_border" ), QStringLiteral( "0.3" ) ); properties.insert( QStringLiteral( "joinstyle" ), QStringLiteral( "miter" ) ); mShapeStyleSymbol.reset( QgsFillSymbol::createSimple( properties ) ); }
void QgsMarkerSymbolLayer::toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap &props ) const { QDomElement symbolizerElem = doc.createElement( QStringLiteral( "se:PointSymbolizer" ) ); if ( !props.value( QStringLiteral( "uom" ), QString() ).isEmpty() ) symbolizerElem.setAttribute( QStringLiteral( "uom" ), props.value( QStringLiteral( "uom" ), QString() ) ); element.appendChild( symbolizerElem ); // <Geometry> QgsSymbolLayerUtils::createGeometryElement( doc, symbolizerElem, props.value( QStringLiteral( "geom" ), QString() ) ); writeSldMarker( doc, symbolizerElem, props ); }
void QgsEllipseSymbolLayerV2::toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const { QDomElement symbolizerElem = doc.createElement( "se:PointSymbolizer" ); if ( !props.value( "uom", "" ).isEmpty() ) symbolizerElem.setAttribute( "uom", props.value( "uom", "" ) ); element.appendChild( symbolizerElem ); // <Geometry> QgsSymbolLayerV2Utils::createGeometryElement( doc, symbolizerElem, props.value( "geom", "" ) ); writeSldMarker( doc, symbolizerElem, props ); }
QStringList QgsProcessingModelChildAlgorithm::asPythonCode( const QgsProcessing::PythonOutputType outputType, const QgsStringMap &extraParameters, int currentIndent, int indentSize ) const { QStringList lines; const QString baseIndent = QString( ' ' ).repeated( currentIndent ); const QString lineIndent = QString( ' ' ).repeated( indentSize ); if ( !algorithm() ) return QStringList(); QStringList paramParts; for ( auto paramIt = mParams.constBegin(); paramIt != mParams.constEnd(); ++paramIt ) { QStringList sourceParts; const QgsProcessingParameterDefinition *def = algorithm() ? algorithm()->parameterDefinition( paramIt.key() ) : nullptr; const auto parts = paramIt.value(); for ( const QgsProcessingModelChildParameterSource &source : parts ) { QString part = source.asPythonCode( outputType, def ); if ( !part.isEmpty() ) sourceParts << part; } if ( sourceParts.count() == 1 ) paramParts << QStringLiteral( "'%1': %2" ).arg( paramIt.key(), sourceParts.at( 0 ) ); else paramParts << QStringLiteral( "'%1': [%2]" ).arg( paramIt.key(), sourceParts.join( ',' ) ); } lines << baseIndent + QStringLiteral( "alg_params = {" ); lines.reserve( lines.size() + paramParts.size() ); for ( const QString &p : qgis::as_const( paramParts ) ) { lines << baseIndent + lineIndent + p + ','; } for ( auto it = extraParameters.constBegin(); it != extraParameters.constEnd(); ++it ) { lines << baseIndent + lineIndent + QStringLiteral( "%1: %2," ).arg( QgsProcessingUtils::stringToPythonLiteral( it.key() ), it.value() ); } if ( lines.constLast().endsWith( ',' ) ) { lines[ lines.count() - 1 ].truncate( lines.constLast().length() - 1 ); } lines << baseIndent + QStringLiteral( "}" ); lines << baseIndent + QStringLiteral( "outputs['%1'] = processing.run('%2', alg_params, context=context, feedback=feedback, is_child_algorithm=True)" ).arg( mId, mAlgorithmId ); for ( auto outputIt = mModelOutputs.constBegin(); outputIt != mModelOutputs.constEnd(); ++outputIt ) { lines << baseIndent + QStringLiteral( "results['%1:%2'] = outputs['%1']['%3']" ).arg( mId, outputIt.key(), outputIt.value().childOutputName() ); } return lines; }
QgsAnnotation::QgsAnnotation( QObject *parent ) : QObject( parent ) , mMarkerSymbol( new QgsMarkerSymbol() ) { QgsStringMap props; props.insert( QStringLiteral( "color" ), QStringLiteral( "white" ) ); props.insert( QStringLiteral( "style" ), QStringLiteral( "solid" ) ); props.insert( QStringLiteral( "style_border" ), QStringLiteral( "solid" ) ); props.insert( QStringLiteral( "color_border" ), QStringLiteral( "black" ) ); props.insert( QStringLiteral( "width_border" ), QStringLiteral( "0.3" ) ); props.insert( QStringLiteral( "joinstyle" ), QStringLiteral( "miter" ) ); mFillSymbol.reset( QgsFillSymbol::createSimple( props ) ); }
void QgsComposerPolygon::createDefaultPolygonStyleSymbol() { QgsStringMap properties; properties.insert( "color", "white" ); properties.insert( "style", "solid" ); properties.insert( "style_border", "solid" ); properties.insert( "color_border", "black" ); properties.insert( "width_border", "0.3" ); properties.insert( "joinstyle", "miter" ); mPolygonStyleSymbol.reset( QgsFillSymbolV2::createSimple( properties ) ); emit frameChanged(); }
QgsSymbolLayerV2* QgsEllipseSymbolLayerV2::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement graphicElem = element.firstChildElement( "Graphic" ); if ( graphicElem.isNull() ) return NULL; QString name = "circle"; QColor fillColor, borderColor; double borderWidth, size; double widthHeightFactor = 1.0; Qt::PenStyle borderStyle; QgsStringMap vendorOptions = QgsSymbolLayerV2Utils::getVendorOptionList( graphicElem ); for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it ) { if ( it.key() == "widthHeightFactor" ) { bool ok; double v = it.value().toDouble( &ok ); if ( ok && !qgsDoubleNear( v, 0.0 ) && v > 0 ) widthHeightFactor = v; } } if ( !QgsSymbolLayerV2Utils::wellKnownMarkerFromSld( graphicElem, name, fillColor, borderColor, borderStyle, borderWidth, size ) ) return NULL; double angle = 0.0; QString angleFunc; if ( QgsSymbolLayerV2Utils::rotationFromSldElement( graphicElem, angleFunc ) ) { bool ok; double d = angleFunc.toDouble( &ok ); if ( ok ) angle = d; } QgsEllipseSymbolLayerV2 *m = new QgsEllipseSymbolLayerV2(); m->setSymbolName( name ); m->setFillColor( fillColor ); m->setOutlineColor( borderColor ); m->setOutlineStyle( borderStyle ); m->setOutlineWidth( borderWidth ); m->setSymbolWidth( size ); m->setSymbolHeight( size / widthHeightFactor ); m->setAngle( angle ); return m; }
void QgsRendererRangeV2::toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const { if ( !mSymbol.data() || props.value( "attribute", "" ).isEmpty() ) return; QString attrName = props[ "attribute" ]; QDomElement ruleElem = doc.createElement( "se:Rule" ); element.appendChild( ruleElem ); QDomElement nameElem = doc.createElement( "se:Name" ); nameElem.appendChild( doc.createTextNode( mLabel ) ); ruleElem.appendChild( nameElem ); QDomElement descrElem = doc.createElement( "se:Description" ); QDomElement titleElem = doc.createElement( "se:Title" ); QString descrStr = QString( "range: %1 - %2" ).arg( mLowerValue ).arg( mUpperValue ); titleElem.appendChild( doc.createTextNode( !mLabel.isEmpty() ? mLabel : descrStr ) ); descrElem.appendChild( titleElem ); ruleElem.appendChild( descrElem ); // create the ogc:Filter for the range QString filterFunc = QString( "%1 > %2 AND %1 <= %3" ) .arg( attrName.replace( "\"", "\"\"" ) ) .arg( mLowerValue ).arg( mUpperValue ); QgsSymbolLayerV2Utils::createFunctionElement( doc, ruleElem, filterFunc ); mSymbol->toSld( doc, ruleElem, props ); }