void QgsEllipseSymbolLayerV2::writeSldMarker( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const { // <Graphic> QDomElement graphicElem = doc.createElement( "se:Graphic" ); element.appendChild( graphicElem ); QgsSymbolLayerV2Utils::wellKnownMarkerToSld( doc, graphicElem, mSymbolName, mColor, mOutlineColor, mOutlineStyle, mOutlineWidth, mSymbolWidth ); // store w/h factor in a <VendorOption> double widthHeightFactor = mSymbolWidth / mSymbolHeight; QDomElement factorElem = QgsSymbolLayerV2Utils::createVendorOptionElement( doc, "widthHeightFactor", QString::number( widthHeightFactor ) ); graphicElem.appendChild( factorElem ); // <Rotation> QgsDataDefined* ddRotation = getDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION ); QString angleFunc = props.value( "angle", "" ); if ( angleFunc.isEmpty() ) // symbol has no angle set { if ( ddRotation && ddRotation->isActive() ) { angleFunc = ddRotation->useExpression() ? ddRotation->expressionString() : ddRotation->field(); } else if ( !qgsDoubleNear( mAngle, 0.0 ) ) angleFunc = QString::number( mAngle ); } else if ( ddRotation && ddRotation->isActive() ) { // the symbol has an angle and the symbol layer have a rotation // property set angleFunc = QString( "%1 + %2" ).arg( angleFunc, ddRotation->useExpression() ? ddRotation->expressionString() : ddRotation->field() ); } else if ( !qgsDoubleNear( mAngle, 0.0 ) ) { // both the symbol and the symbol layer have angle value set bool ok; double angle = angleFunc.toDouble( &ok ); if ( !ok ) { // its a string (probably a property name or a function) angleFunc = QString( "%1 + %2" ).arg( angleFunc ).arg( mAngle ); } else if ( !qgsDoubleNear( angle + mAngle, 0.0 ) ) { // it's a double value angleFunc = QString::number( angle + mAngle ); } } QgsSymbolLayerV2Utils::createRotationElement( doc, graphicElem, angleFunc ); }
QgsLegendSymbolListV2 QgsSingleSymbolRendererV2::legendSymbolItemsV2() const { QgsLegendSymbolListV2 lst; if ( mSymbol->type() == QgsSymbolV2::Marker ) { const QgsMarkerSymbolV2 * symbol = static_cast<const QgsMarkerSymbolV2 *>( mSymbol.data() ); QgsDataDefined sizeDD = symbol->dataDefinedSize(); if ( sizeDD.isActive() && sizeDD.useExpression() ) { QgsScaleExpression scaleExp( sizeDD.expressionString() ); if ( scaleExp.type() != QgsScaleExpression::Unknown ) { QgsLegendSymbolItemV2 title( nullptr, scaleExp.baseExpression(), QString() ); lst << title; Q_FOREACH ( double v, QgsSymbolLayerV2Utils::prettyBreaks( scaleExp.minValue(), scaleExp.maxValue(), 4 ) ) { QgsLegendSymbolItemV2 si( mSymbol.data(), QString::number( v ), QString() ); QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( si.symbol() ); s->setDataDefinedSize( 0 ); s->setSize( scaleExp.size( v ) ); lst << si; } return lst; } }
void QgsSizeScaleWidget::setFromSymbol() { if ( !mSymbol ) { return; } QgsDataDefined ddSize = mSymbol->dataDefinedSize(); QgsScaleExpression expr( ddSize.expressionString() ); if ( expr ) { for ( int i = 0; i < scaleMethodComboBox->count(); i++ ) { if ( scaleMethodComboBox->itemData( i ).toInt() == int( expr.type() ) ) { scaleMethodComboBox->setCurrentIndex( i ); break; } } mExpressionWidget->setField( expr.baseExpression() ); minValueSpinBox->setValue( expr.minValue() ); maxValueSpinBox->setValue( expr.maxValue() ); minSizeSpinBox->setValue( expr.minSize() ); maxSizeSpinBox->setValue( expr.maxSize() ); nullSizeSpinBox->setValue( expr.nullSize() ); } updatePreview(); }
void TestQgsDataDefined::create() { QgsDataDefined* dd = new QgsDataDefined( true, true, QString( "exp" ), QString( "field" ) ); QVERIFY( dd->isActive() ); QVERIFY( dd->useExpression() ); QCOMPARE( dd->expressionString(), QString( "exp" ) ); QCOMPARE( dd->field(), QString( "field" ) ); delete dd; }
QString QgsSingleSymbolRendererV2::rotationField() const { if ( mSymbol->type() == QgsSymbolV2::Marker ) { QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( mSymbol.data() ); QgsDataDefined ddAngle = s->dataDefinedAngle(); return ddAngle.useExpression() ? ddAngle.expressionString() : ddAngle.field(); } return QString(); }
void QgsComposerUtils::writeDataDefinedPropertyMap( QDomElement &itemElem, QDomDocument &doc, const QMap<QgsComposerObject::DataDefinedProperty, QString> *dataDefinedNames, const QMap<QgsComposerObject::DataDefinedProperty, QgsDataDefined *> *dataDefinedProperties ) { QMap<QgsComposerObject::DataDefinedProperty, QString >::const_iterator i = dataDefinedNames->constBegin(); for ( ; i != dataDefinedNames->constEnd(); ++i ) { QString newElemName = i.value(); QMap< QgsComposerObject::DataDefinedProperty, QgsDataDefined* >::const_iterator it = dataDefinedProperties->find( i.key() ); if ( it != dataDefinedProperties->constEnd() ) { QgsDataDefined* dd = it.value(); if ( dd ) { bool active = dd->isActive(); bool useExpr = dd->useExpression(); QString expr = dd->expressionString(); QString field = dd->field(); bool defaultVals = ( !active && !useExpr && expr.isEmpty() && field.isEmpty() ); if ( !defaultVals ) { QDomElement ddElem = doc.createElement( newElemName ); if ( active ) { ddElem.setAttribute( "active", "true" ); } else { ddElem.setAttribute( "active", "false" ); } if ( useExpr ) { ddElem.setAttribute( "useExpr", "true" ); } else { ddElem.setAttribute( "useExpr", "false" ); } ddElem.setAttribute( "expr", expr ); ddElem.setAttribute( "field", field ); itemElem.appendChild( ddElem ); } } } } }
QgsLegendSymbolListV2 QgsCategorizedSymbolRendererV2::legendSymbolItemsV2() const { QgsLegendSymbolListV2 lst; if ( mSourceSymbol.data() && mSourceSymbol->type() == QgsSymbolV2::Marker ) { // check that all symbols that have the same size expression QgsDataDefined ddSize; foreach ( QgsRendererCategoryV2 category, mCategories ) { const QgsMarkerSymbolV2 * symbol = static_cast<const QgsMarkerSymbolV2 *>( category.symbol() ); if ( !ddSize.hasDefaultValues() && symbol->dataDefinedSize() != ddSize ) { // no common size expression return QgsFeatureRendererV2::legendSymbolItemsV2(); } else { ddSize = symbol->dataDefinedSize(); } } if ( !ddSize.isActive() || !ddSize.useExpression() ) { return QgsFeatureRendererV2::legendSymbolItemsV2(); } QgsScaleExpression exp( ddSize.expressionString() ); if ( exp.type() != QgsScaleExpression::Unknown ) { QgsLegendSymbolItemV2 title( NULL, exp.baseExpression(), "" ); lst << title; foreach ( double v, QgsSymbolLayerV2Utils::prettyBreaks( exp.minValue(), exp.maxValue(), 4 ) ) { QgsLegendSymbolItemV2 si( mSourceSymbol.data(), QString::number( v ), "" ); QgsMarkerSymbolV2 * s = static_cast<QgsMarkerSymbolV2 *>( si.symbol() ); s->setDataDefinedSize( QgsDataDefined() ); s->setSize( exp.size( v ) ); lst << si; } // now list the categorized symbols const QgsLegendSymbolListV2 list2 = QgsFeatureRendererV2::legendSymbolItemsV2() ; foreach ( QgsLegendSymbolItemV2 item, list2 ) lst << item; return lst; }
void QgsDataDefinedButton::showAssistant() { if ( !mAssistant.data() ) return; if ( mAssistant->exec() == QDialog::Accepted ) { QgsDataDefined dd = mAssistant->dataDefined(); setUseExpression( dd.useExpression() ); setActive( dd.isActive() ); if ( dd.isActive() && dd.useExpression() ) setExpression( dd.expressionString() ); else if ( dd.isActive() ) setField( dd.field() ); updateGui(); } activateWindow(); // reset focus to parent window }
void TestQgsDataDefined::gettersSetters() { QgsDataDefined dd; dd.setActive( false ); QVERIFY( !dd.isActive() ); dd.setActive( true ); QVERIFY( dd.isActive() ); dd.setUseExpression( false ); QVERIFY( !dd.useExpression() ); dd.setUseExpression( true ); QVERIFY( dd.useExpression() ); dd.setExpressionString( QString( "expression" ) ); QCOMPARE( dd.expressionString(), QString( "expression" ) ); dd.setField( QString( "field" ) ); QCOMPARE( dd.field(), QString( "field" ) ); }
bool QgsDataDefined::operator==( const QgsDataDefined &other ) const { return other.isActive() == mActive && other.useExpression() == mUseExpression && other.field() == mField && other.expressionString() == mExpressionString; }