Skip to content

Commit 0ce567b

Browse files
committedApr 20, 2023
Reverte merge behaviour: merge into existing feature when expl. selected
1 parent 3055b5b commit 0ce567b

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
@@ -105,9 +105,6 @@ QgsMergeAttributesDialog::QgsMergeAttributesDialog( const QgsFeatureList &featur
105105
break;
106106
}
107107

108-
if ( ! mFeatureList.isEmpty() )
109-
mTargetFeatureId = mFeatureList.first().id();
110-
111108
connect( mSkipAllButton, &QAbstractButton::clicked, this, &QgsMergeAttributesDialog::setAllToSkip );
112109
connect( mTableWidget, &QTableWidget::cellChanged, this, &QgsMergeAttributesDialog::tableWidgetCellChanged );
113110

@@ -234,12 +231,7 @@ void QgsMergeAttributesDialog::createTableWidgetContents()
234231
int idx = mTableWidget->horizontalHeaderItem( j )->data( FieldIndex ).toInt();
235232
bool setToManual = false;
236233

237-
// For the Id use the target feature
238-
if ( j == 0 )
239-
{
240-
mTableWidget->item( mTableWidget->rowCount() - 1, j )->setData( Qt::DisplayRole, mTargetFeatureId );
241-
}
242-
else if ( !mVectorLayer->dataProvider()->defaultValueClause( idx ).isEmpty() )
234+
if ( !mVectorLayer->dataProvider()->defaultValueClause( idx ).isEmpty() )
243235
{
244236
mTableWidget->item( mTableWidget->rowCount() - 1, j )->setData( Qt::DisplayRole, mVectorLayer->dataProvider()->defaultValueClause( idx ) );
245237
setToManual = true;

‎src/core/vector/qgsvectorlayereditutils.cpp

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

913-
// Modify merge feature
913+
// Modify target feature or create a new one if invalid
914914
QgsGeometry mergeGeometry = unionGeometry;
915-
mLayer->changeGeometry( targetFeatureId, mergeGeometry );
916-
mLayer->changeAttributeValues( targetFeatureId, newAttributes );
915+
if ( targetFeatureId == FID_NULL )
916+
{
917+
QgsFeature mergeFeature = QgsVectorLayerUtils::createFeature( mLayer, mergeGeometry, newAttributes );
918+
mLayer->addFeature( mergeFeature );
919+
}
920+
else
921+
{
922+
mLayer->changeGeometry( targetFeatureId, mergeGeometry );
923+
mLayer->changeAttributeValues( targetFeatureId, newAttributes );
924+
}
917925

918926
mLayer->endEditCommand();
919927

‎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.