bool QgsVectorLayerLabelProvider::prepare( const QgsRenderContext &context, QSet<QString> &attributeNames ) { QgsPalLayerSettings &lyr = mSettings; const QgsMapSettings &mapSettings = mEngine->mapSettings(); QgsDebugMsgLevel( "PREPARE LAYER " + mLayerId, 4 ); if ( lyr.drawLabels ) { if ( lyr.fieldName.isEmpty() ) { return false; } if ( lyr.isExpression ) { QgsExpression exp( lyr.fieldName ); if ( exp.hasEvalError() ) { QgsDebugMsgLevel( "Prepare error:" + exp.evalErrorString(), 4 ); return false; } } else { // If we aren't an expression, we check to see if we can find the column. if ( mFields.lookupField( lyr.fieldName ) == -1 ) { return false; } } } lyr.mCurFields = mFields; if ( lyr.drawLabels || lyr.obstacle ) { if ( lyr.drawLabels ) { // add field indices for label's text, from expression or field if ( lyr.isExpression ) { // 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 ); } } else { attributeNames.insert( lyr.fieldName ); } }
void QgsAttributeTypeDialog::defaultExpressionChanged() { QString expression = mExpressionWidget->expression(); if ( expression.isEmpty() ) { mDefaultPreviewLabel->setText( QString() ); return; } QgsExpressionContext context = mLayer->createExpressionContext(); if ( !mPreviewFeature.isValid() ) { // get first feature QgsFeatureIterator it = mLayer->getFeatures( QgsFeatureRequest().setLimit( 1 ) ); it.nextFeature( mPreviewFeature ); } context.setFeature( mPreviewFeature ); QgsExpression exp = QgsExpression( expression ); exp.prepare( &context ); if ( exp.hasParserError() ) { mDefaultPreviewLabel->setText( "<i>" + exp.parserErrorString() + "</i>" ); return; } QVariant val = exp.evaluate( &context ); if ( exp.hasEvalError() ) { mDefaultPreviewLabel->setText( "<i>" + exp.evalErrorString() + "</i>" ); return; } QString previewText = val.toString(); QgsEditorWidgetFactory *factory = QgsEditorWidgetRegistry::instance()->factory( editorWidgetType() ); if ( factory ) { previewText = factory->representValue( mLayer, mFieldIdx, editorWidgetConfig(), QVariant(), val ); } mDefaultPreviewLabel->setText( "<i>" + previewText + "</i>" ); }