|
@@ -66,6 +66,13 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( QWidget *parent ) |
|
|
mAddFeatureButton->setToolTip( tr( "Add child feature" ) ); |
|
|
mAddFeatureButton->setObjectName( QStringLiteral( "mAddFeatureButton" ) ); |
|
|
buttonLayout->addWidget( mAddFeatureButton ); |
|
|
// duplicate feature |
|
|
mDuplicateFeatureButton = new QToolButton( this ); |
|
|
mDuplicateFeatureButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionDuplicateFeature.svg" ) ) ); |
|
|
mDuplicateFeatureButton->setText( tr( "Duplicate child feature" ) ); |
|
|
mDuplicateFeatureButton->setToolTip( tr( "Duplicate child feature" ) ); |
|
|
mDuplicateFeatureButton->setObjectName( QStringLiteral( "mDuplicateFeatureButton" ) ); |
|
|
buttonLayout->addWidget( mDuplicateFeatureButton ); |
|
|
// delete feature |
|
|
mDeleteFeatureButton = new QToolButton( this ); |
|
|
mDeleteFeatureButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionDeleteSelected.svg" ) ) ); |
|
@@ -130,6 +137,7 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( QWidget *parent ) |
|
|
connect( mToggleEditingButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::toggleEditing ); |
|
|
connect( mSaveEditsButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::saveEdits ); |
|
|
connect( mAddFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::addFeature ); |
|
|
connect( mDuplicateFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::duplicateFeature ); |
|
|
connect( mDeleteFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::deleteFeature ); |
|
|
connect( mLinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::linkFeature ); |
|
|
connect( mUnlinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::unlinkFeature ); |
|
@@ -286,6 +294,7 @@ void QgsRelationEditorWidget::updateButtons() |
|
|
} |
|
|
|
|
|
mAddFeatureButton->setEnabled( editable ); |
|
|
mDuplicateFeatureButton->setEnabled( editable && selectionNotEmpty ); |
|
|
mLinkFeatureButton->setEnabled( linkable ); |
|
|
mDeleteFeatureButton->setEnabled( editable && selectionNotEmpty ); |
|
|
mUnlinkFeatureButton->setEnabled( linkable && selectionNotEmpty ); |
|
@@ -425,6 +434,19 @@ void QgsRelationEditorWidget::linkFeature() |
|
|
} |
|
|
} |
|
|
|
|
|
void QgsRelationEditorWidget::duplicateFeature() |
|
|
{ |
|
|
QgsVectorLayer *layer = mRelation.referencingLayer(); |
|
|
|
|
|
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFilterFids( mFeatureSelectionMgr->selectedFeatureIds() ) ); |
|
|
QgsFeature f; |
|
|
while ( fit.nextFeature( f ) ) |
|
|
{ |
|
|
QgsVectorLayerUtils::QgsDuplicateFeatureContext duplicatedFeatureContext; |
|
|
QgsVectorLayerUtils::duplicateFeature( layer, f, QgsProject::instance(), 0, duplicatedFeatureContext ); |
|
|
} |
|
|
} |
|
|
|
|
|
void QgsRelationEditorWidget::deleteFeature() |
|
|
{ |
|
|
QgsVectorLayer *layer = nullptr; |
|
|