Skip to content

Commit 9d2fa2c

Browse files
domi4484nyalldawson
authored andcommittedApr 21, 2023
Reverte merge behaviour: merge into existing feature when expl. selected
1 parent 9d3b38a commit 9d2fa2c

File tree

3 files changed

+14
-14
lines changed

3 files changed

+14
-14
lines changed
 

‎src/app/qgsmergeattributesdialog.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,6 @@ QgsMergeAttributesDialog::QgsMergeAttributesDialog( const QgsFeatureList &featur
108108
break;
109109
}
110110

111-
if ( ! mFeatureList.isEmpty() )
112-
mTargetFeatureId = mFeatureList.first().id();
113-
114111
connect( mSkipAllButton, &QAbstractButton::clicked, this, &QgsMergeAttributesDialog::setAllToSkip );
115112
connect( mTableWidget, &QTableWidget::cellChanged, this, &QgsMergeAttributesDialog::tableWidgetCellChanged );
116113

@@ -237,12 +234,7 @@ void QgsMergeAttributesDialog::createTableWidgetContents()
237234
int idx = mTableWidget->horizontalHeaderItem( j )->data( FieldIndex ).toInt();
238235
bool setToManual = false;
239236

240-
// For the Id use the target feature
241-
if ( j == 0 )
242-
{
243-
mTableWidget->item( mTableWidget->rowCount() - 1, j )->setData( Qt::DisplayRole, mTargetFeatureId );
244-
}
245-
else if ( !mVectorLayer->dataProvider()->defaultValueClause( idx ).isEmpty() )
237+
if ( !mVectorLayer->dataProvider()->defaultValueClause( idx ).isEmpty() )
246238
{
247239
mTableWidget->item( mTableWidget->rowCount() - 1, j )->setData( Qt::DisplayRole, mVectorLayer->dataProvider()->defaultValueClause( idx ) );
248240
setToManual = true;

‎src/core/vector/qgsvectorlayereditutils.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -760,10 +760,18 @@ bool QgsVectorLayerEditUtils::mergeFeatures( const QgsFeatureId &targetFeatureId
760760
mLayer->deleteFeature( *feature_it );
761761
}
762762

763-
// Modify merge feature
763+
// Modify target feature or create a new one if invalid
764764
QgsGeometry mergeGeometry = unionGeometry;
765-
mLayer->changeGeometry( targetFeatureId, mergeGeometry );
766-
mLayer->changeAttributeValues( targetFeatureId, newAttributes );
765+
if ( targetFeatureId == FID_NULL )
766+
{
767+
QgsFeature mergeFeature = QgsVectorLayerUtils::createFeature( mLayer, mergeGeometry, newAttributes );
768+
mLayer->addFeature( mergeFeature );
769+
}
770+
else
771+
{
772+
mLayer->changeGeometry( targetFeatureId, mergeGeometry );
773+
mLayer->changeAttributeValues( targetFeatureId, newAttributes );
774+
}
767775

768776
mLayer->endEditCommand();
769777

‎tests/src/app/testqgsmergeattributesdialog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ class TestQgsMergeattributesDialog : public QObject
8585
QgsMergeAttributesDialog dialog( QgsFeatureList() << f1 << f2, &layer, mQgisApp->mapCanvas() );
8686

8787
// At beginnning the first feature of the list is the target
88-
QCOMPARE( dialog.targetFeatureId(), f1.id() );
89-
QCOMPARE( dialog.mergedAttributes().first(), f1.id() );
88+
QCOMPARE( dialog.targetFeatureId(), FID_NULL );
89+
QCOMPARE( dialog.mergedAttributes().first(), "Autogenerate" );
9090

9191
// Check after taking feature with largest geometry
9292
QVERIFY( QMetaObject::invokeMethod( &dialog, "mFromLargestPushButton_clicked" ) );

0 commit comments

Comments
 (0)
Please sign in to comment.