Skip to content

Commit

Permalink
Make field expression widget work even without a layer (needed in com…
Browse files Browse the repository at this point in the history
…poser)
  • Loading branch information
wonder-sk committed Jun 17, 2014
1 parent 8097d04 commit 172277e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 17 deletions.
10 changes: 3 additions & 7 deletions src/gui/qgsfieldexpressionwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ QString QgsFieldExpressionWidget::currentText()
bool QgsFieldExpressionWidget::isValidExpression( QString *expressionError )
{
QString temp;
return QgsExpression::isValid( currentText(), layer()->pendingFields(), expressionError ? *expressionError : temp );
QgsVectorLayer* vl = layer();
return QgsExpression::isValid( currentText(), vl ? vl->pendingFields() : QgsFields(), expressionError ? *expressionError : temp );
}

bool QgsFieldExpressionWidget::isExpression()
Expand Down Expand Up @@ -163,9 +164,6 @@ void QgsFieldExpressionWidget::editExpression()
QString currentExpression = currentText();
QgsVectorLayer* vl = layer();

if ( !vl )
return;

QgsExpressionBuilderDialog dlg( vl, currentExpression );
if ( !mDa.isNull() )
{
Expand Down Expand Up @@ -263,10 +261,8 @@ void QgsFieldExpressionWidget::updateLineEditStyle( const QString expression )
bool QgsFieldExpressionWidget::isExpressionValid( const QString expressionStr )
{
QgsVectorLayer* vl = layer();
if ( !vl )
return false;

QgsExpression expression( expressionStr );
expression.prepare( vl->pendingFields() );
expression.prepare( vl ? vl->pendingFields() : QgsFields() );
return !expression.hasParserError();
}
15 changes: 5 additions & 10 deletions src/gui/qgsfieldmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,6 @@ QVariant QgsFieldModel::data( const QModelIndex &index, int role ) const
if ( !index.isValid() )
return QVariant();

if ( !mLayer )
return QVariant();

qint64 exprIdx = index.internalId() - mFields.count();

switch ( role )
Expand Down Expand Up @@ -213,10 +210,8 @@ QVariant QgsFieldModel::data( const QModelIndex &index, int role ) const
{
if ( exprIdx >= 0 )
{
if ( !mLayer )
return false;
QgsExpression exp( mExpression[exprIdx] );
exp.prepare( mLayer->pendingFields() );
exp.prepare( mLayer ? mLayer->pendingFields() : QgsFields() );
return !exp.hasParserError();
}
return true;
Expand All @@ -243,21 +238,21 @@ QVariant QgsFieldModel::data( const QModelIndex &index, int role ) const
{
return mFields[index.internalId()].name();
}
else
else if ( mLayer )
{
return mLayer->attributeDisplayName( index.internalId() );
}
else
return QVariant();
}

case Qt::ForegroundRole:
{
if ( exprIdx >= 0 )
{
// if expression, test validity
if ( !mLayer )
return false;
QgsExpression exp( mExpression[exprIdx] );
exp.prepare( mLayer->pendingFields() );
exp.prepare( mLayer ? mLayer->pendingFields() : QgsFields() );
if ( exp.hasParserError() )
{
return QBrush( QColor( Qt::red ) );
Expand Down

0 comments on commit 172277e

Please sign in to comment.