int QgsMapToolLabel::dataDefinedColumnIndex( QgsPalLayerSettings::DataDefinedProperties p, QgsVectorLayer* vlayer ) const { QgsDebugMsg( QString( "dataDefinedProperties layer id:%1" ).arg( vlayer->id() ) ); QgsPalLayerSettings labelSettings( QgsPalLayerSettings::fromLayer( vlayer ) ); QgsDebugMsg( QString( "dataDefinedProperties count:%1" ).arg( labelSettings.dataDefinedProperties.size() ) ); QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator dIt = labelSettings.dataDefinedProperties.find( p ); if ( dIt != labelSettings.dataDefinedProperties.constEnd() ) { //QgsDebugMsg( "found data defined" ); QgsDataDefined* dd = dIt.value(); QString ddField = dd->field(); //QgsDebugMsg( "testing for active" ); // can only modify attributes that are data defined with a mapped field if ( dd->isActive() && !dd->useExpression() && !ddField.isEmpty() ) { //QgsDebugMsg( "looking up index" ); return vlayer->fieldNameIndex( ddField ); } } return -1; }
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(); }
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 QgsComposerObject::setDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property, const bool active, const bool useExpression, const QString &expression, const QString &field ) { if ( property == QgsComposerObject::AllProperties || property == QgsComposerObject::NoProperty ) { //bad property requested return; } bool defaultVals = ( !active && !useExpression && expression.isEmpty() && field.isEmpty() ); if ( mDataDefinedProperties.contains( property ) ) { QMap< QgsComposerObject::DataDefinedProperty, QgsDataDefined* >::const_iterator it = mDataDefinedProperties.find( property ); if ( it != mDataDefinedProperties.constEnd() ) { QgsDataDefined* dd = it.value(); dd->setActive( active ); dd->setExpressionString( expression ); dd->setField( field ); dd->setUseExpression( useExpression ); } } else if ( !defaultVals ) { QgsDataDefined* dd = new QgsDataDefined( active, useExpression, expression, field ); mDataDefinedProperties.insert( property, dd ); } }
bool QgsSymbolLayerV2::hasDataDefinedProperty( const QString& property ) const { if ( mDataDefinedProperties.isEmpty() ) return false; QgsDataDefined* dd = getDataDefinedProperty( property ); return dd && dd->isActive(); }
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; }
inline QgsDataDefined* rotateWholeSymbol( double additionalRotation, const QgsDataDefined& dd ) { QgsDataDefined* rotatedDD = new QgsDataDefined( dd ); QString exprString = dd.useExpression() ? dd.expressionString() : dd.field(); rotatedDD->setExpressionString( QString::number( additionalRotation ) + " + (" + exprString + ')' ); rotatedDD->setUseExpression( true ); return rotatedDD; }
inline QgsDataDefined* scaleWholeSymbol( double scaleFactor, const QgsDataDefined& dd ) { QgsDataDefined* scaledDD = new QgsDataDefined( dd ); QString exprString = dd.useExpression() ? dd.expressionString() : dd.field(); scaledDD->setExpressionString( QString::number( scaleFactor ) + "*(" + exprString + ')' ); scaledDD->setUseExpression( true ); return scaledDD; }
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 TestQgsDataDefined::assignment() { QgsDataDefined original( true, true, QString( "sqrt(2)" ), QString( "field" ) ); QgsDataDefined copy; copy = original; QVERIFY( copy == original ); copy.setActive( false ); QVERIFY( original.isActive() ); QVERIFY( copy != original ); }
inline QgsDataDefined* scaleWholeSymbol( double scaleFactorX, double scaleFactorY, const QgsDataDefined& dd ) { QgsDataDefined* scaledDD = new QgsDataDefined( dd ); QString exprString = dd.useExpression() ? dd.expressionString() : dd.field(); scaledDD->setExpressionString( ( !qgsDoubleNear( scaleFactorX, 0.0 ) ? "tostring(" + QString::number( scaleFactorX ) + "*(" + exprString + "))" : "'0'" ) + "|| ',' || " + ( !qgsDoubleNear( scaleFactorY, 0.0 ) ? "tostring(" + QString::number( scaleFactorY ) + "*(" + exprString + "))" : "'0'" ) ); scaledDD->setUseExpression( true ); return scaledDD; }
void QgsLabelPropertyDialog::insertChangedValue( QgsPalLayerSettings::DataDefinedProperties p, const QVariant& value ) { QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator ddIt = mDataDefinedProperties.constFind( p ); if ( ddIt != mDataDefinedProperties.constEnd() ) { QgsDataDefined* dd = ddIt.value(); if ( dd && dd->isActive() && !dd->useExpression() && !dd->field().isEmpty() ) { mChangedProperties.insert( mCurLabelFeat.fieldNameIndex( dd->field() ), value ); } } }
QString QgsMapToolLabel::dataDefinedColumnName( QgsPalLayerSettings::DataDefinedProperties p, const QgsPalLayerSettings& labelSettings ) const { //QgsDebugMsg( QString( "dataDefinedProperties count:%1" ).arg( labelSettings.dataDefinedProperties.size() ) ); QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator dIt = labelSettings.dataDefinedProperties.constFind( p ); if ( dIt != labelSettings.dataDefinedProperties.constEnd() ) { QgsDataDefined* dd = dIt.value(); // can only modify attributes that are data defined with a mapped field if ( dd->isActive() && !dd->useExpression() && !dd->field().isEmpty() ) return dd->field(); } return QString(); }
void QgsMarkerSymbolV2::setDataDefinedAngle( const QgsDataDefined& dd ) { const double symbolRotation = angle(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsMarkerSymbolLayerV2* layer = static_cast<QgsMarkerSymbolLayerV2 *>( *it ); if ( dd.hasDefaultValues() ) { layer->removeDataDefinedProperty( "angle" ); } else { if ( qgsDoubleNear( layer->angle(), symbolRotation ) ) { layer->setDataDefinedProperty( "angle", new QgsDataDefined( dd ) ); } else { QgsDataDefined* rotatedDD = rotateWholeSymbol( layer->angle() - symbolRotation, dd ); layer->setDataDefinedProperty( "angle", rotatedDD ); } } } }
void QgsMarkerSymbolV2::setDataDefinedSize( const QgsDataDefined &dd ) { const double symbolSize = size(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsMarkerSymbolLayerV2* layer = static_cast<QgsMarkerSymbolLayerV2 *>( *it ); if ( dd.hasDefaultValues() ) { layer->removeDataDefinedProperty( "size" ); layer->removeDataDefinedProperty( "offset" ); } else { if ( symbolSize == 0 || qgsDoubleNear( layer->size(), symbolSize ) ) { layer->setDataDefinedProperty( "size", new QgsDataDefined( dd ) ); } else { layer->setDataDefinedProperty( "size", scaleWholeSymbol( layer->size() / symbolSize, dd ) ); } if ( layer->offset().x() || layer->offset().y() ) { layer->setDataDefinedProperty( "offset", scaleWholeSymbol( layer->offset().x() / symbolSize, layer->offset().y() / symbolSize, dd ) ); } } } }
void QgsLineSymbolV2::setDataDefinedWidth( const QgsDataDefined& dd ) { const double symbolWidth = width(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsLineSymbolLayerV2* layer = static_cast<QgsLineSymbolLayerV2*>( *it ); if ( dd.hasDefaultValues() ) { layer->removeDataDefinedProperty( "width" ); layer->removeDataDefinedProperty( "offset" ); } else { if ( symbolWidth == 0 || qgsDoubleNear( layer->width(), symbolWidth ) ) { layer->setDataDefinedProperty( "width", new QgsDataDefined( dd ) ); } else { layer->setDataDefinedProperty( "width", scaleWholeSymbol( layer->width() / symbolWidth, dd ) ); } if ( layer->offset() ) { layer->setDataDefinedProperty( "offset", scaleWholeSymbol( layer->offset() / symbolWidth, dd ) ); } } } }
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 TestQgsDataDefined::expressionOrString() { QgsDataDefined dd; dd.setActive( true ); dd.setField( "field" ); dd.setExpressionString( "1+col1+col2" ); dd.setUseExpression( true ); QCOMPARE( dd.expressionOrField(), QString( "1+col1+col2" ) ); dd.setUseExpression( false ); QCOMPARE( dd.expressionOrField(), QString( "\"field\"" ) ); }
void TestQgsDataDefined::defaultValues() { QgsDataDefined* dd = new QgsDataDefined(); QVERIFY( dd->hasDefaultValues() ); dd->setActive( true ); QVERIFY( !dd->hasDefaultValues() ); delete dd; dd = new QgsDataDefined(); dd->setUseExpression( true ); QVERIFY( !dd->hasDefaultValues() ); delete dd; dd = new QgsDataDefined(); dd->setExpressionString( QString( "expression" ) ); QVERIFY( !dd->hasDefaultValues() ); delete dd; dd = new QgsDataDefined(); dd->setField( QString( "field" ) ); QVERIFY( !dd->hasDefaultValues() ); delete dd; }
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 ); }
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 QgsComposerUtils::readDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property, const QDomElement &ddElem, QMap<QgsComposerObject::DataDefinedProperty, QgsDataDefined *> *dataDefinedProperties ) { if ( property == QgsComposerObject::AllProperties || property == QgsComposerObject::NoProperty ) { //invalid property return; } QMap< QgsComposerObject::DataDefinedProperty, QgsDataDefined* >::const_iterator it = dataDefinedProperties->constFind( property ); QgsDataDefined* dd = 0; if ( it != dataDefinedProperties->constEnd() ) { dd = it.value(); } else { //QgsDataDefined for property doesn't currently exist, need to add new dd = new QgsDataDefined(); dataDefinedProperties->insert( property, dd ); } //set values for QgsDataDefined QString active = ddElem.attribute( "active" ); if ( active.compare( "true", Qt::CaseInsensitive ) == 0 ) { dd->setActive( true ); } else { dd->setActive( false ); } dd->setField( ddElem.attribute( "field" ) ); dd->setExpressionString( ddElem.attribute( "expr" ) ); QString useExpr = ddElem.attribute( "useExpr" ); if ( useExpr.compare( "true", Qt::CaseInsensitive ) == 0 ) { dd->setUseExpression( true ); } else { dd->setUseExpression( false ); } }
QVariant QgsSymbolLayerV2::evaluateDataDefinedProperty( const QString &property, const QgsFeature* feature, const QVariant& defaultVal, bool *ok ) const { if ( ok ) *ok = false; QgsDataDefined* dd = getDataDefinedProperty( property ); if ( !dd || !dd->isActive() ) return defaultVal; if ( dd->useExpression() ) { if ( dd->expression() ) { QgsExpressionContext context = feature ? QgsExpressionContextUtils::createFeatureBasedContext( *feature, QgsFields() ) : QgsExpressionContext(); QVariant result = dd->expression()->evaluate( &context ); if ( result.isValid() ) { if ( ok ) *ok = true; return result; } else return defaultVal; } else { return defaultVal; } } else if ( feature && !dd->field().isEmpty() && !mFields.isEmpty() ) { int attributeIndex = mFields.fieldNameIndex( dd->field() ); if ( attributeIndex >= 0 ) { if ( ok ) *ok = true; return feature->attribute( attributeIndex ); } } return defaultVal; }
QVariant QgsSymbolLayerV2::evaluateDataDefinedProperty( const QString& property, const QgsSymbolV2RenderContext& context, const QVariant& defaultVal, bool* ok ) const { if ( ok ) *ok = false; QgsDataDefined* dd = getDataDefinedProperty( property ); if ( !dd || !dd->isActive() ) return defaultVal; if ( dd->useExpression() ) { if ( dd->expression() ) { QVariant result = dd->expression()->evaluate( &context.renderContext().expressionContext() ); if ( result.isValid() ) { if ( ok ) *ok = true; return result; } else return defaultVal; } else { return defaultVal; } } else if ( context.feature() && !dd->field().isEmpty() && !mFields.isEmpty() ) { int attributeIndex = mFields.fieldNameIndex( dd->field() ); if ( attributeIndex >= 0 ) { if ( ok ) *ok = true; return context.feature()->attribute( attributeIndex ); } } return defaultVal; }
QgsExpression* QgsSymbolLayerV2::expression( const QString& property ) const { QgsDataDefined* dd = getDataDefinedProperty( property ); return dd ? dd->expression() : nullptr; }
void QgsLabelPropertyDialog::setDataDefinedValues( const QgsPalLayerSettings &layerSettings, QgsVectorLayer* vlayer ) { //loop through data defined properties and set all the GUI widget values. We can do this //even if the data defined property is set to an expression, as it's useful to show //users what the evaluated property is... QgsExpressionContext context; context << QgsExpressionContextUtils::globalScope() << QgsExpressionContextUtils::projectScope() << QgsExpressionContextUtils::atlasScope( nullptr ) << QgsExpressionContextUtils::mapSettingsScope( QgisApp::instance()->mapCanvas()->mapSettings() ) << QgsExpressionContextUtils::layerScope( vlayer ); context.setFeature( mCurLabelFeat ); QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator propIt = mDataDefinedProperties.constBegin(); for ( ; propIt != mDataDefinedProperties.constEnd(); ++propIt ) { QgsDataDefined* dd = propIt.value(); if ( !dd || !dd->isActive() ) { continue; } if ( !dd->expressionIsPrepared() ) { dd->prepareExpression( context ); } //TODO - pass expression context QVariant result = layerSettings.dataDefinedValue( propIt.key(), mCurLabelFeat, vlayer->fields(), &context ); if ( !result.isValid() || result.isNull() ) { //could not evaluate data defined value continue; } bool ok = false; switch ( propIt.key() ) { case QgsPalLayerSettings::Show: { int showLabel = result.toInt( &ok ); mShowLabelChkbx->setChecked( !ok || showLabel != 0 ); break; } case QgsPalLayerSettings::AlwaysShow: mAlwaysShowChkbx->setChecked( result.toBool() ); break; case QgsPalLayerSettings::MinScale: { int minScale = result.toInt( &ok ); if ( ok ) { mMinScaleSpinBox->setValue( minScale ); } break; } case QgsPalLayerSettings::MaxScale: { int maxScale = result.toInt( &ok ); if ( ok ) { mMaxScaleSpinBox->setValue( maxScale ); } break; } case QgsPalLayerSettings::BufferSize: { double bufferSize = result.toDouble( &ok ); if ( ok ) { mBufferSizeSpinBox->setValue( bufferSize ); } break; } case QgsPalLayerSettings::PositionX: { double posX = result.toDouble( &ok ); if ( ok ) { mXCoordSpinBox->setValue( posX ); } break; } case QgsPalLayerSettings::PositionY: { double posY = result.toDouble( &ok ); if ( ok ) { mYCoordSpinBox->setValue( posY ); } break; } case QgsPalLayerSettings::LabelDistance: { double labelDist = result.toDouble( &ok ); if ( ok ) { mLabelDistanceSpinBox->setValue( labelDist ); } break; } case QgsPalLayerSettings::Hali: mHaliComboBox->setCurrentIndex( mHaliComboBox->findData( result.toString() ) ); break; case QgsPalLayerSettings::Vali: mValiComboBox->setCurrentIndex( mValiComboBox->findData( result.toString() ) ); break; case QgsPalLayerSettings::BufferColor: mBufferColorButton->setColor( QColor( result.toString() ) ); break; case QgsPalLayerSettings::Color: mFontColorButton->setColor( QColor( result.toString() ) ); break; case QgsPalLayerSettings::Rotation: { double rot = result.toDouble( &ok ); if ( ok ) { mRotationSpinBox->setValue( rot ); } break; } case QgsPalLayerSettings::Size: { double size = result.toDouble( &ok ); if ( ok ) { mFontSizeSpinBox->setValue( size ); } else { mFontSizeSpinBox->setValue( 0 ); } break; } default: break; } } }
void QgsLabelPropertyDialog::enableDataDefinedWidgets( QgsVectorLayer* vlayer ) { //loop through data defined properties, this time setting whether or not the widgets are enabled //this can only be done for properties which are assigned to fields QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator propIt = mDataDefinedProperties.constBegin(); for ( ; propIt != mDataDefinedProperties.constEnd(); ++propIt ) { QgsDataDefined* dd = propIt.value(); if ( !dd ) { continue; } QString ddField = dd->field(); if ( !dd->isActive() || dd->useExpression() || ddField.isEmpty() ) { continue; // can only modify attributes with an active data definition of a mapped field } int ddIndx = vlayer->fieldNameIndex( ddField ); if ( ddIndx == -1 ) { continue; } QgsDebugMsg( QString( "ddField: %1" ).arg( ddField ) ); switch ( propIt.key() ) { case QgsPalLayerSettings::Show: mShowLabelChkbx->setEnabled( true ); break; case QgsPalLayerSettings::AlwaysShow: mAlwaysShowChkbx->setEnabled( true ); break; case QgsPalLayerSettings::MinScale: mMinScaleSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::MaxScale: mMaxScaleSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::BufferSize: mBufferSizeSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::PositionX: mXCoordSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::PositionY: mYCoordSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::LabelDistance: mLabelDistanceSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::Hali: mHaliComboBox->setEnabled( true ); break; case QgsPalLayerSettings::Vali: mValiComboBox->setEnabled( true ); break; case QgsPalLayerSettings::BufferColor: mBufferColorButton->setEnabled( true ); break; case QgsPalLayerSettings::Color: mFontColorButton->setEnabled( true ); break; case QgsPalLayerSettings::Rotation: mRotationSpinBox->setEnabled( true ); break; //font related properties case QgsPalLayerSettings::Family: mFontFamilyCmbBx->setEnabled( true ); break; case QgsPalLayerSettings::FontStyle: mFontStyleCmbBx->setEnabled( true ); break; case QgsPalLayerSettings::Underline: mFontUnderlineBtn->setEnabled( true ); break; case QgsPalLayerSettings::Strikeout: mFontStrikethroughBtn->setEnabled( true ); break; case QgsPalLayerSettings::Bold: mFontBoldBtn->setEnabled( true ); break; case QgsPalLayerSettings::Italic: mFontItalicBtn->setEnabled( true ); break; case QgsPalLayerSettings::Size: mFontSizeSpinBox->setEnabled( true ); break; default: break; } } }
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; }