[labeling] When a layer is set to "blocking" label mode, correctly

handle data defined "is obstacle" and "priority" settings
This commit is contained in:
Nyall Dawson 2018-12-20 12:44:47 +10:00
parent 5cbf95a9bc
commit b46f49996e

View File

@ -134,28 +134,31 @@ bool QgsVectorLayerLabelProvider::prepare( const QgsRenderContext &context, QSet
lyr.mCurFields = mFields;
if ( lyr.drawLabels )
if ( lyr.drawLabels || lyr.obstacle )
{
// add field indices for label's text, from expression or field
if ( lyr.isExpression )
if ( lyr.drawLabels )
{
// prepare expression for use in QgsPalLayerSettings::registerFeature()
QgsExpression *exp = lyr.getLabelExpression();
exp->prepare( &context.expressionContext() );
if ( exp->hasEvalError() )
// add field indices for label's text, from expression or field
if ( lyr.isExpression )
{
QgsDebugMsgLevel( "Prepare error:" + exp->evalErrorString(), 4 );
// prepare expression for use in QgsPalLayerSettings::registerFeature()
QgsExpression *exp = lyr.getLabelExpression();
exp->prepare( &context.expressionContext() );
if ( exp->hasEvalError() )
{
QgsDebugMsgLevel( "Prepare error:" + exp->evalErrorString(), 4 );
}
Q_FOREACH ( const QString &name, exp->referencedColumns() )
{
QgsDebugMsgLevel( "REFERENCED COLUMN = " + name, 4 );
attributeNames.insert( name );
}
}
Q_FOREACH ( const QString &name, exp->referencedColumns() )
else
{
QgsDebugMsgLevel( "REFERENCED COLUMN = " + name, 4 );
attributeNames.insert( name );
attributeNames.insert( lyr.fieldName );
}
}
else
{
attributeNames.insert( lyr.fieldName );
}
lyr.dataDefinedProperties().prepare( context.expressionContext() );
// add field indices of data defined expression or field