Skip to content

Commit

Permalink
Reverte merge behaviour: merge into existing feature when expl. selected
Browse files Browse the repository at this point in the history
  • Loading branch information
domi4484 authored and github-actions[bot] committed Apr 21, 2023
1 parent 61b4be8 commit 03f2a4a
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 14 deletions.
10 changes: 1 addition & 9 deletions src/app/qgsmergeattributesdialog.cpp
Expand Up @@ -105,9 +105,6 @@ QgsMergeAttributesDialog::QgsMergeAttributesDialog( const QgsFeatureList &featur
break;
}

if ( ! mFeatureList.isEmpty() )
mTargetFeatureId = mFeatureList.first().id();

connect( mSkipAllButton, &QAbstractButton::clicked, this, &QgsMergeAttributesDialog::setAllToSkip );
connect( mTableWidget, &QTableWidget::cellChanged, this, &QgsMergeAttributesDialog::tableWidgetCellChanged );

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

// For the Id use the target feature
if ( j == 0 )
{
mTableWidget->item( mTableWidget->rowCount() - 1, j )->setData( Qt::DisplayRole, mTargetFeatureId );
}
else if ( !mVectorLayer->dataProvider()->defaultValueClause( idx ).isEmpty() )
if ( !mVectorLayer->dataProvider()->defaultValueClause( idx ).isEmpty() )
{
mTableWidget->item( mTableWidget->rowCount() - 1, j )->setData( Qt::DisplayRole, mVectorLayer->dataProvider()->defaultValueClause( idx ) );
setToManual = true;
Expand Down
14 changes: 11 additions & 3 deletions src/core/vector/qgsvectorlayereditutils.cpp
Expand Up @@ -910,10 +910,18 @@ bool QgsVectorLayerEditUtils::mergeFeatures( const QgsFeatureId &targetFeatureId
mLayer->deleteFeature( *feature_it );
}

// Modify merge feature
// Modify target feature or create a new one if invalid
QgsGeometry mergeGeometry = unionGeometry;
mLayer->changeGeometry( targetFeatureId, mergeGeometry );
mLayer->changeAttributeValues( targetFeatureId, newAttributes );
if ( targetFeatureId == FID_NULL )
{
QgsFeature mergeFeature = QgsVectorLayerUtils::createFeature( mLayer, mergeGeometry, newAttributes );
mLayer->addFeature( mergeFeature );
}
else
{
mLayer->changeGeometry( targetFeatureId, mergeGeometry );
mLayer->changeAttributeValues( targetFeatureId, newAttributes );
}

mLayer->endEditCommand();

Expand Down
4 changes: 2 additions & 2 deletions tests/src/app/testqgsmergeattributesdialog.cpp
Expand Up @@ -85,8 +85,8 @@ class TestQgsMergeattributesDialog : public QObject
QgsMergeAttributesDialog dialog( QgsFeatureList() << f1 << f2, &layer, mQgisApp->mapCanvas() );

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

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

0 comments on commit 03f2a4a

Please sign in to comment.