Skip to content

Commit 7905f7f

Browse files
committed
Show current expression of virtual fields
1 parent 733b7c9 commit 7905f7f

5 files changed

+28
-5
lines changed

src/app/qgsfieldsproperties.cpp

+17-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <QMessageBox>
3838
#include <QSettings>
3939
#include <QFileDialog>
40+
#include <QHBoxLayout>
4041

4142
QgsFieldsProperties::QgsFieldsProperties( QgsVectorLayer *layer, QWidget* parent )
4243
: QWidget( parent )
@@ -242,9 +243,23 @@ void QgsFieldsProperties::setRow( int row, int idx, const QgsField& field )
242243
mFieldsList->setItem( row, attrTypeNameCol, new QTableWidgetItem( field.typeName() ) );
243244
mFieldsList->setItem( row, attrLengthCol, new QTableWidgetItem( QString::number( field.length() ) ) );
244245
mFieldsList->setItem( row, attrPrecCol, new QTableWidgetItem( QString::number( field.precision() ) ) );
245-
mFieldsList->setItem( row, attrCommentCol, new QTableWidgetItem( field.comment() ) );
246+
if ( mLayer->pendingFields().fieldOrigin( idx ) == QgsFields::OriginExpression )
247+
{
248+
QWidget* expressionWidget = new QWidget;
249+
expressionWidget->setLayout( new QHBoxLayout );
250+
QToolButton* editExpressionButton = new QToolButton;
251+
editExpressionButton->setIcon( QgsApplication::getThemeIcon( "/mIconExpression.svg" ) );
252+
expressionWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
253+
expressionWidget->layout()->addWidget( editExpressionButton );
254+
expressionWidget->layout()->addWidget( new QLabel( mLayer->expressionField( idx ) ) );
255+
mFieldsList->setCellWidget( row, attrCommentCol, expressionWidget );
256+
}
257+
else
258+
{
259+
mFieldsList->setItem( row, attrCommentCol, new QTableWidgetItem( field.comment() ) );
260+
}
246261

247-
for ( int i = 0; i < attrEditTypeCol; i++ )
262+
for ( int i = 0; i < attrCommentCol; i++ )
248263
mFieldsList->item( row, i )->setFlags( mFieldsList->item( row, i )->flags() & ~Qt::ItemIsEditable );
249264

250265
FieldConfig cfg( mLayer, idx );

src/core/qgsexpression.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2235,8 +2235,8 @@ QVariant QgsExpression::NodeBinaryOperator::eval( QgsExpression* parent, const Q
22352235
case boPlus:
22362236
if ( vL.type() == QVariant::String && vR.type() == QVariant::String )
22372237
{
2238-
QString sL = getStringValue( vL, parent ); ENSURE_NO_EVAL_ERROR;
2239-
QString sR = getStringValue( vR, parent ); ENSURE_NO_EVAL_ERROR;
2238+
QString sL = isNull( vL ) ? QString() : getStringValue( vL, parent ); ENSURE_NO_EVAL_ERROR;
2239+
QString sR = isNull( vR ) ? QString() : getStringValue( vR, parent ); ENSURE_NO_EVAL_ERROR;
22402240
return QVariant( sL + sR );
22412241
}
22422242
//intentional fall-through

src/core/qgsexpressionfieldbuffer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class CORE_EXPORT QgsExpressionFieldBuffer
7575
*/
7676
void updateFields( QgsFields& flds );
7777

78-
const QList<ExpressionField> expressions() const { return mExpressions; }
78+
const QList<ExpressionField>& expressions() const { return mExpressions; }
7979

8080
private:
8181
QList<ExpressionField> mExpressions;

src/core/qgsvectorlayer.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -2859,6 +2859,12 @@ void QgsVectorLayer::removeExpressionField( int index )
28592859
emit attributeDeleted( index );
28602860
}
28612861

2862+
const QString QgsVectorLayer::expressionField( int index )
2863+
{
2864+
int oi = mUpdatedFields.fieldOriginIndex( index );
2865+
return mExpressionFieldBuffer->expressions().value( oi ).expression;
2866+
}
2867+
28622868
void QgsVectorLayer::updateFields()
28632869
{
28642870
if ( !mDataProvider )

src/core/qgsvectorlayer.h

+2
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,8 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
668668
*/
669669
void removeExpressionField( int index );
670670

671+
const QString expressionField( int index );
672+
671673
/** Get the label object associated with this layer */
672674
QgsLabel *label();
673675

0 commit comments

Comments
 (0)