From 5f391ff6e9faa518df3110997cbce54359b3cb69 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 4 Feb 2020 13:39:18 +0100 Subject: [PATCH 1/4] skip map layer actions with MultipleFeatures as target in the arttribute table context menu --- src/gui/attributetable/qgsdualview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/attributetable/qgsdualview.cpp b/src/gui/attributetable/qgsdualview.cpp index d50043271e34..38bc61903022 100644 --- a/src/gui/attributetable/qgsdualview.cpp +++ b/src/gui/attributetable/qgsdualview.cpp @@ -706,7 +706,7 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &atInd return; } //add actions from QgsMapLayerActionRegistry to context menu - QList registeredActions = QgsGui::mapLayerActionRegistry()->mapLayerActions( mLayer ); + QList registeredActions = QgsGui::mapLayerActionRegistry()->mapLayerActions( mLayer, QgsMapLayerAction::Layer | QgsMapLayerAction::SingleFeature ); if ( !registeredActions.isEmpty() ) { //add a separator between user defined and standard actions From d53bab5cd1ddfef524fadf27f2a6f7f068390839 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 4 Feb 2020 14:15:05 +0100 Subject: [PATCH 2/4] list action with MultipleFeatures as target to be run for the layer selection --- src/gui/attributetable/qgsdualview.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gui/attributetable/qgsdualview.cpp b/src/gui/attributetable/qgsdualview.cpp index 38bc61903022..0bf473962085 100644 --- a/src/gui/attributetable/qgsdualview.cpp +++ b/src/gui/attributetable/qgsdualview.cpp @@ -720,6 +720,23 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &atInd } } + // entries for multiple features layer actions + if ( mLayer->selectedFeatureCount() > 1 ) + { + const QList constRegisteredActions = QgsGui::mapLayerActionRegistry()->mapLayerActions( mLayer, QgsMapLayerAction::MultipleFeatures ); + if ( !constRegisteredActions.isEmpty() ) + { + menu->addSeparator(); + QAction *action = menu->addAction( tr( "Actions on selection (%1)" ).arg( mLayer->selectedFeatureCount() ) ); + action->setEnabled( false ); + + for ( QgsMapLayerAction *action : constRegisteredActions ) + { + menu->addAction( action->text(), action, [ = ]() {action->triggerForFeatures( mLayer, mLayer->selectedFeatures() );} ); + } + } + } + menu->addSeparator(); QgsAttributeTableAction *a = new QgsAttributeTableAction( tr( "Open Form" ), this, QString(), rowSourceIndex ); menu->addAction( tr( "Open Form" ), a, &QgsAttributeTableAction::featureForm ); From b9c036d074a7ef1f2a20f83009a768977b7551fb Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 4 Feb 2020 14:15:25 +0100 Subject: [PATCH 3/4] only show if the context menu is shown over a selected row --- src/gui/attributetable/qgsdualview.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/attributetable/qgsdualview.cpp b/src/gui/attributetable/qgsdualview.cpp index 0bf473962085..d3c0bc62ac51 100644 --- a/src/gui/attributetable/qgsdualview.cpp +++ b/src/gui/attributetable/qgsdualview.cpp @@ -721,7 +721,9 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &atInd } // entries for multiple features layer actions - if ( mLayer->selectedFeatureCount() > 1 ) + // only show if the context menu is shown over a selected row + QgsFeatureId currentFid = masterModel()->rowToId( sourceIndex.row() ); + if ( mLayer->selectedFeatureCount() > 1 && mLayer->selectedFeatureIds().contains( currentFid ) ) { const QList constRegisteredActions = QgsGui::mapLayerActionRegistry()->mapLayerActions( mLayer, QgsMapLayerAction::MultipleFeatures ); if ( !constRegisteredActions.isEmpty() ) From 7e7def8e3a3e4b7cdfcc82dac5fba94937224927 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Wed, 5 Feb 2020 07:18:41 +0100 Subject: [PATCH 4/4] Fix case Co-Authored-By: Nyall Dawson --- src/gui/attributetable/qgsdualview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/attributetable/qgsdualview.cpp b/src/gui/attributetable/qgsdualview.cpp index d3c0bc62ac51..d2344fa86c0a 100644 --- a/src/gui/attributetable/qgsdualview.cpp +++ b/src/gui/attributetable/qgsdualview.cpp @@ -729,7 +729,7 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &atInd if ( !constRegisteredActions.isEmpty() ) { menu->addSeparator(); - QAction *action = menu->addAction( tr( "Actions on selection (%1)" ).arg( mLayer->selectedFeatureCount() ) ); + QAction *action = menu->addAction( tr( "Actions on Selection (%1)" ).arg( mLayer->selectedFeatureCount() ) ); action->setEnabled( false ); for ( QgsMapLayerAction *action : constRegisteredActions )