Skip to content

Commit 3d193e3

Browse files
committed
layer context menu: disable CRS related menu entries from table layers (fixes #12654)
1 parent b736317 commit 3d193e3

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

src/app/qgsapplayertreeviewmenuprovider.cpp

+18-16
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,18 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
6262
}
6363
else if ( QgsLayerTree::isLayer( node ) )
6464
{
65-
QgsMapLayer* layer = QgsLayerTree::toLayer( node )->layer();
65+
QgsMapLayer *layer = QgsLayerTree::toLayer( node )->layer();
66+
QgsRasterLayer *rlayer = qobject_cast<QgsRasterLayer *>( layer );
67+
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
6668

6769
menu->addAction( actions->actionZoomToLayer( mCanvas, menu ) );
6870
menu->addAction( actions->actionShowInOverview( menu ) );
6971

70-
if ( layer && layer->type() == QgsMapLayer::RasterLayer )
72+
if ( rlayer )
7173
{
7274
menu->addAction( tr( "&Zoom to Best Scale (100%)" ), QgisApp::instance(), SLOT( legendLayerZoomNative() ) );
7375

74-
QgsRasterLayer* rasterLayer = qobject_cast<QgsRasterLayer *>( layer );
75-
if ( rasterLayer && rasterLayer->rasterType() != QgsRasterLayer::Palette )
76+
if ( rlayer->rasterType() != QgsRasterLayer::Palette )
7677
menu->addAction( tr( "&Stretch Using Current Extent" ), QgisApp::instance(), SLOT( legendLayerStretchUsingCurrentExtent() ) );
7778
}
7879

@@ -81,21 +82,24 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
8182
// duplicate layer
8283
QAction* duplicateLayersAction = menu->addAction( QgsApplication::getThemeIcon( "/mActionDuplicateLayer.svg" ), tr( "&Duplicate" ), QgisApp::instance(), SLOT( duplicateLayers() ) );
8384

84-
// set layer scale visibility
85-
menu->addAction( tr( "&Set Layer Scale Visibility" ), QgisApp::instance(), SLOT( setLayerScaleVisibility() ) );
85+
if ( !vlayer || vlayer->geometryType() != QGis::NoGeometry )
86+
{
87+
// set layer scale visibility
88+
menu->addAction( tr( "&Set Layer Scale Visibility" ), QgisApp::instance(), SLOT( setLayerScaleVisibility() ) );
8689

87-
// set layer crs
88-
menu->addAction( QgsApplication::getThemeIcon( "/mActionSetCRS.png" ), tr( "&Set Layer CRS" ), QgisApp::instance(), SLOT( setLayerCRS() ) );
90+
// set layer crs
91+
menu->addAction( QgsApplication::getThemeIcon( "/mActionSetCRS.png" ), tr( "&Set Layer CRS" ), QgisApp::instance(), SLOT( setLayerCRS() ) );
8992

90-
// assign layer crs to project
91-
menu->addAction( QgsApplication::getThemeIcon( "/mActionSetProjectCRS.png" ), tr( "Set &Project CRS from Layer" ), QgisApp::instance(), SLOT( setProjectCRSFromLayer() ) );
93+
// assign layer crs to project
94+
menu->addAction( QgsApplication::getThemeIcon( "/mActionSetProjectCRS.png" ), tr( "Set &Project CRS from Layer" ), QgisApp::instance(), SLOT( setProjectCRSFromLayer() ) );
95+
}
9296

9397
// style-related actions
9498
if ( layer && mView->selectedLayerNodes().count() == 1 )
9599
{
96-
QMenu* menuStyleManager = new QMenu( tr( "Styles" ) );
100+
QMenu *menuStyleManager = new QMenu( tr( "Styles" ) );
97101

98-
QgisApp* app = QgisApp::instance();
102+
QgisApp *app = QgisApp::instance();
99103
menuStyleManager->addAction( tr( "Copy Style" ), app, SLOT( copyStyle() ) );
100104
if ( app->clipboard()->hasFormat( QGSCLIPBOARD_STYLE_MIME ) )
101105
{
@@ -110,10 +114,8 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
110114

111115
menu->addSeparator();
112116

113-
if ( layer && layer->type() == QgsMapLayer::VectorLayer )
117+
if ( vlayer )
114118
{
115-
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( layer );
116-
117119
QAction *toggleEditingAction = QgisApp::instance()->actionToggleEditing();
118120
QAction *saveLayerEditsAction = QgisApp::instance()->actionSaveActiveLayerEdits();
119121
QAction *allEditsAction = QgisApp::instance()->actionAllEdits();
@@ -155,7 +157,7 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
155157

156158
menu->addSeparator();
157159
}
158-
else if ( layer && layer->type() == QgsMapLayer::RasterLayer )
160+
else if ( rlayer )
159161
{
160162
menu->addAction( tr( "Save As..." ), QgisApp::instance(), SLOT( saveAsRasterFile() ) );
161163
menu->addAction( tr( "Save As Layer Definition File..." ), QgisApp::instance(), SLOT( saveAsLayerDefinition() ) );

0 commit comments

Comments
 (0)