Skip to content

Commit 619d0f4

Browse files
committed
Disable some layer context menu actions for invalid layers
1 parent 7ae28bf commit 619d0f4

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/app/qgsapplayertreeviewmenuprovider.cpp

+22-9
Original file line numberDiff line numberDiff line change
@@ -140,18 +140,24 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
140140

141141
if ( layer && layer->isSpatial() )
142142
{
143-
menu->addAction( actions->actionZoomToLayer( mCanvas, menu ) );
143+
QAction *zoomToLayer = actions->actionZoomToLayer( mCanvas, menu );
144+
zoomToLayer->setEnabled( layer->isValid() );
145+
menu->addAction( zoomToLayer );
144146
if ( vlayer )
145147
{
146148
QAction *actionZoomSelected = actions->actionZoomToSelection( mCanvas, menu );
147-
actionZoomSelected->setEnabled( !vlayer->selectedFeatureIds().isEmpty() );
149+
actionZoomSelected->setEnabled( vlayer->isValid() && !vlayer->selectedFeatureIds().isEmpty() );
148150
menu->addAction( actionZoomSelected );
149151
}
150152
menu->addAction( actions->actionShowInOverview( menu ) );
151153
}
152154

153155
if ( vlayer )
154-
menu->addAction( actions->actionShowFeatureCount( menu ) );
156+
{
157+
QAction *showFeatureCount = actions->actionShowFeatureCount( menu );
158+
menu->addAction( showFeatureCount );
159+
showFeatureCount->setEnabled( vlayer->isValid() );
160+
}
155161

156162
QAction *actionCopyLayer = new QAction( tr( "Copy Layer" ), menu );
157163
connect( actionCopyLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::copyLayer );
@@ -161,10 +167,14 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
161167

162168
if ( rlayer )
163169
{
164-
menu->addAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionZoomActual.svg" ) ), tr( "&Zoom to Native Resolution (100%)" ), QgisApp::instance(), &QgisApp::legendLayerZoomNative );
170+
QAction *zoomToNative = menu->addAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionZoomActual.svg" ) ), tr( "&Zoom to Native Resolution (100%)" ), QgisApp::instance(), &QgisApp::legendLayerZoomNative );
171+
zoomToNative->setEnabled( rlayer->isValid() );
165172

166173
if ( rlayer->rasterType() != QgsRasterLayer::Palette )
167-
menu->addAction( tr( "&Stretch Using Current Extent" ), QgisApp::instance(), &QgisApp::legendLayerStretchUsingCurrentExtent );
174+
{
175+
QAction *stretch = menu->addAction( tr( "&Stretch Using Current Extent" ), QgisApp::instance(), &QgisApp::legendLayerStretchUsingCurrentExtent );
176+
stretch->setEnabled( rlayer->isValid() );
177+
}
168178
}
169179

170180
addCustomLayerActions( menu, layer );
@@ -208,8 +218,9 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
208218
// attribute table
209219
QgsSettings settings;
210220
QgsAttributeTableFilterModel::FilterMode initialMode = settings.enumValue( QStringLiteral( "qgis/attributeTableBehavior" ), QgsAttributeTableFilterModel::ShowAll );
211-
menu->addAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionOpenTable.svg" ) ), tr( "&Open Attribute Table" ),
212-
QgisApp::instance(), [ = ] { QgisApp::instance()->attributeTable( initialMode ); } );
221+
QAction *attributeTable = menu->addAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionOpenTable.svg" ) ), tr( "&Open Attribute Table" ),
222+
QgisApp::instance(), [ = ] { QgisApp::instance()->attributeTable( initialMode ); } );
223+
attributeTable->setEnabled( vlayer->isValid() );
213224

214225
// allow editing
215226
unsigned int cap = vlayer->dataProvider()->capabilities();
@@ -219,7 +230,7 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
219230
{
220231
menu->addAction( toggleEditingAction );
221232
toggleEditingAction->setChecked( vlayer->isEditable() );
222-
toggleEditingAction->setEnabled( true );
233+
toggleEditingAction->setEnabled( vlayer->isValid() );
223234
}
224235
if ( saveLayerEditsAction && vlayer->isModified() )
225236
{
@@ -298,10 +309,11 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
298309
QMenu *menuExportVector = new QMenu( tr( "Export" ), menu );
299310
QAction *actionSaveAs = new QAction( tr( "Save Features As…" ), menuExportVector );
300311
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } );
312+
actionSaveAs->setEnabled( vlayer->isValid() );
301313
menuExportVector->addAction( actionSaveAs );
302314
QAction *actionSaveSelectedFeaturesAs = new QAction( tr( "Save Selected Features As…" ), menuExportVector );
303315
connect( actionSaveSelectedFeaturesAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile( nullptr, true ); } );
304-
actionSaveSelectedFeaturesAs->setEnabled( vlayer->selectedFeatureCount() > 0 );
316+
actionSaveSelectedFeaturesAs->setEnabled( vlayer->isValid() && vlayer->selectedFeatureCount() > 0 );
305317
menuExportVector->addAction( actionSaveSelectedFeaturesAs );
306318
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer Definition File…" ), menuExportVector );
307319
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition );
@@ -322,6 +334,7 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
322334
QAction *actionSaveStyle = new QAction( tr( "Save as QGIS Layer Style File…" ), menuExportRaster );
323335
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } );
324336
menuExportRaster->addAction( actionSaveAs );
337+
actionSaveAs->setEnabled( rlayer->isValid() );
325338
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition );
326339
menuExportRaster->addAction( actionSaveAsDefinitionLayer );
327340
connect( actionSaveStyle, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveStyleFile(); } );

0 commit comments

Comments
 (0)