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 ); } }
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 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 ); } }
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" ) ); }
void TestQgsDataDefined::referencedColumns() { QgsDataDefined dd; dd.setActive( true ); dd.setUseExpression( true ); QStringList cols = dd.referencedColumns(); QVERIFY( cols.isEmpty() ); //set as expression dd.setExpressionString( "1+col1+col2" ); cols = dd.referencedColumns(); QCOMPARE( cols.length(), 2 ); QVERIFY( cols.contains( QString( "col1" ) ) ); QVERIFY( cols.contains( QString( "col2" ) ) ); //alter expression and check that referenced columns is updated dd.setExpressionString( "1+col1+col2+col3" ); cols = dd.referencedColumns(); QCOMPARE( cols.length(), 3 ); QVERIFY( cols.contains( QString( "col1" ) ) ); QVERIFY( cols.contains( QString( "col2" ) ) ); QVERIFY( cols.contains( QString( "col3" ) ) ); //switch to field dd.setUseExpression( false ); cols = dd.referencedColumns(); QVERIFY( cols.isEmpty() ); dd.setField( "field" ); cols = dd.referencedColumns(); QCOMPARE( cols.length(), 1 ); QVERIFY( cols.contains( QString( "field" ) ) ); //switch back to expression dd.setUseExpression( true ); cols = dd.referencedColumns(); QCOMPARE( cols.length(), 3 ); QVERIFY( cols.contains( QString( "col1" ) ) ); QVERIFY( cols.contains( QString( "col2" ) ) ); QVERIFY( cols.contains( QString( "col3" ) ) ); }
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; }