Skip to content

Commit cc6feae

Browse files
committedAug 22, 2015
More misc porting to expression contexts
1 parent 000a62f commit cc6feae

File tree

4 files changed

+40
-8
lines changed

4 files changed

+40
-8
lines changed
 

‎src/app/qgsattributetabledialog.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,11 @@ void QgsAttributeTableDialog::runFieldCalculation( QgsVectorLayer* layer, QStrin
365365

366366
int rownum = 1;
367367

368+
QgsExpressionContext context;
369+
context << QgsExpressionContextUtils::globalScope()
370+
<< QgsExpressionContextUtils::projectScope()
371+
<< QgsExpressionContextUtils::layerScope( layer );
372+
368373
QgsField fld = layer->fields()[ fieldindex ];
369374

370375
//go through all the features and change the new attributes
@@ -377,8 +382,10 @@ void QgsAttributeTableDialog::runFieldCalculation( QgsVectorLayer* layer, QStrin
377382
continue;
378383
}
379384

380-
exp.setCurrentRowNumber( rownum );
381-
QVariant value = exp.evaluate( &feature );
385+
context.setFeature( feature );
386+
context.lastScope()->setVariable( QString( "_rownum_" ), rownum );
387+
388+
QVariant value = exp.evaluate( &context );
382389
fld.convertCompatible( value );
383390
// Bail if we have a update error
384391
if ( exp.hasEvalError() )
@@ -768,7 +775,12 @@ void QgsAttributeTableDialog::setFilterExpression( QString filterString )
768775
return;
769776
}
770777

771-
if ( ! filterExpression.prepare( mLayer->fields() ) )
778+
QgsExpressionContext context;
779+
context << QgsExpressionContextUtils::globalScope()
780+
<< QgsExpressionContextUtils::projectScope()
781+
<< QgsExpressionContextUtils::layerScope( mLayer );
782+
783+
if ( ! filterExpression.prepare( &context ) )
772784
{
773785
QgisApp::instance()->messageBar()->pushMessage( tr( "Evaluation error" ), filterExpression.evalErrorString(), QgsMessageBar::WARNING, QgisApp::instance()->messageTimeout() );
774786
}
@@ -790,7 +802,8 @@ void QgsAttributeTableDialog::setFilterExpression( QString filterString )
790802

791803
while ( featIt.nextFeature( f ) )
792804
{
793-
if ( filterExpression.evaluate( &f ).toInt() != 0 )
805+
context.setFeature( f );
806+
if ( filterExpression.evaluate( &context ).toInt() != 0 )
794807
filteredFeatures << f.id();
795808

796809
// check if there were errors during evaluating

‎src/app/qgslabelpropertydialog.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,13 @@ void QgsLabelPropertyDialog::setDataDefinedValues( const QgsPalLayerSettings &la
204204
//loop through data defined properties and set all the GUI widget values. We can do this
205205
//even if the data defined property is set to an expression, as it's useful to show
206206
//users what the evaluated property is...
207+
208+
QgsExpressionContext context;
209+
context << QgsExpressionContextUtils::globalScope()
210+
<< QgsExpressionContextUtils::projectScope()
211+
<< QgsExpressionContextUtils::layerScope( vlayer );
212+
context.setFeature( mCurLabelFeat );
213+
207214
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator propIt = mDataDefinedProperties.constBegin();
208215
for ( ; propIt != mDataDefinedProperties.constEnd(); ++propIt )
209216
{
@@ -215,11 +222,11 @@ void QgsLabelPropertyDialog::setDataDefinedValues( const QgsPalLayerSettings &la
215222

216223
if ( !dd->expressionIsPrepared() )
217224
{
218-
dd->prepareExpression( vlayer );
225+
dd->prepareExpression( context );
219226
}
220227

221228
//TODO - pass expression context
222-
QVariant result = layerSettings.dataDefinedValue( propIt.key(), mCurLabelFeat, vlayer->fields() );
229+
QVariant result = layerSettings.dataDefinedValue( propIt.key(), mCurLabelFeat, vlayer->fields(), &context );
223230
if ( !result.isValid() || result.isNull() )
224231
{
225232
//could not evaluate data defined value

‎src/gui/qgshtmlannotationitem.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,12 @@ void QgsHtmlAnnotationItem::setFeatureForMapPosition()
218218
mFeatureId = currentFeatureId;
219219
mFeature = currentFeature;
220220

221-
QString newtext = QgsExpression::replaceExpressionText( mHtmlSource, &mFeature, vectorLayer() );
221+
QgsExpressionContext context;
222+
context << QgsExpressionContextUtils::globalScope()
223+
<< QgsExpressionContextUtils::projectScope()
224+
<< QgsExpressionContextUtils::layerScope( mVectorLayer );
225+
context.setFeature( mFeature );
226+
QString newtext = QgsExpression::replaceExpressionText( mHtmlSource, &context );
222227
mWebView->setHtml( newtext );
223228
}
224229

‎src/gui/qgsmaptip.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,14 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPoint &mapPosition, QgsM
9696

9797
int idx = vlayer->fieldNameIndex( vlayer->displayField() );
9898
if ( idx < 0 )
99-
return QgsExpression::replaceExpressionText( vlayer->displayField(), &feature, vlayer );
99+
{
100+
QgsExpressionContext context;
101+
context << QgsExpressionContextUtils::globalScope()
102+
<< QgsExpressionContextUtils::projectScope()
103+
<< QgsExpressionContextUtils::layerScope( vlayer );
104+
context.setFeature( feature );
105+
return QgsExpression::replaceExpressionText( vlayer->displayField(), &context );
106+
}
100107
else
101108
return feature.attribute( idx ).toString();
102109
}

0 commit comments

Comments
 (0)
Please sign in to comment.