Skip to content

Commit 9d7ef65

Browse files
committedFeb 11, 2014
vector layer: fix attributeAdded signal
don't assume new attributes are added at end, because in case of joins they are added after the provider fields and before the joined fields. field calculator: prepare expression again after attribute was added (fixes #9320)
1 parent 3b438e2 commit 9d7ef65

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed
 

‎src/app/qgsfieldcalculator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@ void QgsFieldCalculator::accept()
150150
break;
151151
}
152152
}
153+
154+
if ( ! exp.prepare( mVectorLayer->pendingFields() ) )
155+
{
156+
QMessageBox::critical( 0, tr( "Evaluation error" ), exp.evalErrorString() );
157+
return;
158+
}
153159
}
154160

155161
if ( mAttributeId == -1 )

‎src/app/qgsfieldsproperties.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ void QgsFieldsProperties::loadRows()
207207

208208
void QgsFieldsProperties::setRow( int row, int idx, const QgsField &field )
209209
{
210-
QTableWidgetItem* dataItem = new QTableWidgetItem( idx );
210+
QTableWidgetItem* dataItem = new QTableWidgetItem();
211+
dataItem->setData( Qt::DisplayRole, idx );
211212
DesignerTreeItemData itemData( DesignerTreeItemData::Field, field.name() );
212213
dataItem->setData( DesignerTreeRole, itemData.asQVariant() );
213214
mFieldsList->setItem( row, attrIdCol, dataItem );
@@ -498,19 +499,20 @@ void QgsFieldsProperties::attributeTypeDialog()
498499
void QgsFieldsProperties::attributeAdded( int idx )
499500
{
500501
bool sorted = mFieldsList->isSortingEnabled();
501-
mFieldsList->setSortingEnabled( false );
502+
if ( sorted )
503+
mFieldsList->setSortingEnabled( false );
504+
502505
const QgsFields &fields = mLayer->pendingFields();
503506
int row = mFieldsList->rowCount();
504507
mFieldsList->insertRow( row );
505508
setRow( row, idx, fields[idx] );
509+
mFieldsList->setCurrentCell( row, idx );
506510

507-
for ( int i = idx; i < mIndexedWidgets.count(); i++ )
508-
{
511+
for ( int i = idx + 1; i < mIndexedWidgets.count(); i++ )
509512
mIndexedWidgets[i]->setData( Qt::DisplayRole, i );
510-
}
511513

512-
mFieldsList->setCurrentCell( row, idx );
513-
mFieldsList->setSortingEnabled( sorted );
514+
if ( sorted )
515+
mFieldsList->setSortingEnabled( true );
514516
}
515517

516518

‎src/core/qgsvectorlayerundocommand.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,11 @@ QgsVectorLayerUndoCommandAddAttribute::QgsVectorLayerUndoCommandAddAttribute( Qg
311311
: QgsVectorLayerUndoCommand( buffer )
312312
, mField( field )
313313
{
314-
mFieldIndex = layer()->pendingFields().count();
314+
const QgsFields &fields = layer()->pendingFields();
315+
int i;
316+
for ( i = 0; i < fields.count() && fields.fieldOrigin( i ) != QgsFields::OriginJoin; i++ )
317+
;
318+
mFieldIndex = i;
315319
}
316320

317321
void QgsVectorLayerUndoCommandAddAttribute::undo()

0 commit comments

Comments
 (0)
Please sign in to comment.