Skip to content

Commit 886e7bf

Browse files
authored
Merge pull request #5925 from signedav/duplicateChildsRelation
[FEATURE] Duplicate child feature in releationwidget of attributeform
2 parents 8dfb17d + 7d4290d commit 886e7bf

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/gui/qgsrelationeditorwidget.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( QWidget *parent )
6666
mAddFeatureButton->setToolTip( tr( "Add child feature" ) );
6767
mAddFeatureButton->setObjectName( QStringLiteral( "mAddFeatureButton" ) );
6868
buttonLayout->addWidget( mAddFeatureButton );
69+
// duplicate feature
70+
mDuplicateFeatureButton = new QToolButton( this );
71+
mDuplicateFeatureButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionDuplicateFeature.svg" ) ) );
72+
mDuplicateFeatureButton->setText( tr( "Duplicate child feature" ) );
73+
mDuplicateFeatureButton->setToolTip( tr( "Duplicate child feature" ) );
74+
mDuplicateFeatureButton->setObjectName( QStringLiteral( "mDuplicateFeatureButton" ) );
75+
buttonLayout->addWidget( mDuplicateFeatureButton );
6976
// delete feature
7077
mDeleteFeatureButton = new QToolButton( this );
7178
mDeleteFeatureButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionDeleteSelected.svg" ) ) );
@@ -130,6 +137,7 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( QWidget *parent )
130137
connect( mToggleEditingButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::toggleEditing );
131138
connect( mSaveEditsButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::saveEdits );
132139
connect( mAddFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::addFeature );
140+
connect( mDuplicateFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::duplicateFeature );
133141
connect( mDeleteFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::deleteFeature );
134142
connect( mLinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::linkFeature );
135143
connect( mUnlinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::unlinkFeature );
@@ -286,6 +294,7 @@ void QgsRelationEditorWidget::updateButtons()
286294
}
287295

288296
mAddFeatureButton->setEnabled( editable );
297+
mDuplicateFeatureButton->setEnabled( editable && selectionNotEmpty );
289298
mLinkFeatureButton->setEnabled( linkable );
290299
mDeleteFeatureButton->setEnabled( editable && selectionNotEmpty );
291300
mUnlinkFeatureButton->setEnabled( linkable && selectionNotEmpty );
@@ -425,6 +434,19 @@ void QgsRelationEditorWidget::linkFeature()
425434
}
426435
}
427436

437+
void QgsRelationEditorWidget::duplicateFeature()
438+
{
439+
QgsVectorLayer *layer = mRelation.referencingLayer();
440+
441+
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFilterFids( mFeatureSelectionMgr->selectedFeatureIds() ) );
442+
QgsFeature f;
443+
while ( fit.nextFeature( f ) )
444+
{
445+
QgsVectorLayerUtils::QgsDuplicateFeatureContext duplicatedFeatureContext;
446+
QgsVectorLayerUtils::duplicateFeature( layer, f, QgsProject::instance(), 0, duplicatedFeatureContext );
447+
}
448+
}
449+
428450
void QgsRelationEditorWidget::deleteFeature()
429451
{
430452
QgsVectorLayer *layer = nullptr;

src/gui/qgsrelationeditorwidget.h

+2
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsCollapsibleGroupBox
146146
void updateButtons();
147147

148148
void addFeature();
149+
void duplicateFeature();
149150
void linkFeature();
150151
void deleteFeature();
151152
void unlinkFeature();
@@ -167,6 +168,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsCollapsibleGroupBox
167168
QToolButton *mToggleEditingButton = nullptr;
168169
QToolButton *mSaveEditsButton = nullptr;
169170
QToolButton *mAddFeatureButton = nullptr;
171+
QToolButton *mDuplicateFeatureButton = nullptr;
170172
QToolButton *mDeleteFeatureButton = nullptr;
171173
QToolButton *mLinkFeatureButton = nullptr;
172174
QToolButton *mUnlinkFeatureButton = nullptr;

0 commit comments

Comments
 (0)