diff --git a/src/app/qgsfieldcalculator.cpp b/src/app/qgsfieldcalculator.cpp index bfb36ea3a7d..77aa944ac78 100644 --- a/src/app/qgsfieldcalculator.cpp +++ b/src/app/qgsfieldcalculator.cpp @@ -150,6 +150,12 @@ void QgsFieldCalculator::accept() break; } } + + if ( ! exp.prepare( mVectorLayer->pendingFields() ) ) + { + QMessageBox::critical( 0, tr( "Evaluation error" ), exp.evalErrorString() ); + return; + } } if ( mAttributeId == -1 ) diff --git a/src/app/qgsfieldsproperties.cpp b/src/app/qgsfieldsproperties.cpp index f1643e73705..d724af3a4a8 100644 --- a/src/app/qgsfieldsproperties.cpp +++ b/src/app/qgsfieldsproperties.cpp @@ -207,7 +207,8 @@ void QgsFieldsProperties::loadRows() void QgsFieldsProperties::setRow( int row, int idx, const QgsField &field ) { - QTableWidgetItem* dataItem = new QTableWidgetItem( idx ); + QTableWidgetItem* dataItem = new QTableWidgetItem(); + dataItem->setData( Qt::DisplayRole, idx ); DesignerTreeItemData itemData( DesignerTreeItemData::Field, field.name() ); dataItem->setData( DesignerTreeRole, itemData.asQVariant() ); mFieldsList->setItem( row, attrIdCol, dataItem ); @@ -498,19 +499,20 @@ void QgsFieldsProperties::attributeTypeDialog() void QgsFieldsProperties::attributeAdded( int idx ) { bool sorted = mFieldsList->isSortingEnabled(); - mFieldsList->setSortingEnabled( false ); + if ( sorted ) + mFieldsList->setSortingEnabled( false ); + const QgsFields &fields = mLayer->pendingFields(); int row = mFieldsList->rowCount(); mFieldsList->insertRow( row ); setRow( row, idx, fields[idx] ); - - for ( int i = idx; i < mIndexedWidgets.count(); i++ ) - { - mIndexedWidgets[i]->setData( Qt::DisplayRole, i ); - } - mFieldsList->setCurrentCell( row, idx ); - mFieldsList->setSortingEnabled( sorted ); + + for ( int i = idx + 1; i < mIndexedWidgets.count(); i++ ) + mIndexedWidgets[i]->setData( Qt::DisplayRole, i ); + + if ( sorted ) + mFieldsList->setSortingEnabled( true ); } diff --git a/src/core/qgsvectorlayerundocommand.cpp b/src/core/qgsvectorlayerundocommand.cpp index 5e40dafe4a9..db21dbed3f7 100644 --- a/src/core/qgsvectorlayerundocommand.cpp +++ b/src/core/qgsvectorlayerundocommand.cpp @@ -311,7 +311,11 @@ QgsVectorLayerUndoCommandAddAttribute::QgsVectorLayerUndoCommandAddAttribute( Qg : QgsVectorLayerUndoCommand( buffer ) , mField( field ) { - mFieldIndex = layer()->pendingFields().count(); + const QgsFields &fields = layer()->pendingFields(); + int i; + for ( i = 0; i < fields.count() && fields.fieldOrigin( i ) != QgsFields::OriginJoin; i++ ) + ; + mFieldIndex = i; } void QgsVectorLayerUndoCommandAddAttribute::undo()