Skip to content

Commit

Permalink
Only show "Set Project CRS from Layer" when all selected layers
Browse files Browse the repository at this point in the history
have the same CRS

Otherwise it's a confusing option
  • Loading branch information
nyalldawson committed Sep 23, 2020
1 parent 4c7fbc0 commit 0ea1e5f
Showing 1 changed file with 33 additions and 4 deletions.
37 changes: 33 additions & 4 deletions src/app/qgsapplayertreeviewmenuprovider.cpp
Expand Up @@ -335,10 +335,39 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
: tr( "No CRS" ), menuSetCRS ); : tr( "No CRS" ), menuSetCRS );
actionCurrentCrs->setEnabled( false ); actionCurrentCrs->setEnabled( false );
menuSetCRS->addAction( actionCurrentCrs ); menuSetCRS->addAction( actionCurrentCrs );
// assign layer crs to project
QAction *actionSetProjectCrs = new QAction( tr( "Set &Project CRS from Layer" ), menuSetCRS ); const QList<QgsLayerTreeNode *> selectedNodes = mView->selectedNodes();
connect( actionSetProjectCrs, &QAction::triggered, QgisApp::instance(), &QgisApp::setProjectCrsFromLayer ); QgsCoordinateReferenceSystem layerCrs;
menuSetCRS->addAction( actionSetProjectCrs ); bool firstLayer = true;
bool allSameCrs = true;
for ( QgsLayerTreeNode *node : selectedNodes )
{
if ( QgsLayerTree::isLayer( node ) )
{
QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
if ( nodeLayer->layer() )
{
if ( firstLayer )
{
layerCrs = nodeLayer->layer()->crs();
firstLayer = false;
}
else if ( nodeLayer->layer()->crs() != layerCrs )
{
allSameCrs = false;
break;
}
}
}
}

if ( allSameCrs && layerCrs.isValid() )
{
// assign layer crs to project
QAction *actionSetProjectCrs = new QAction( tr( "Set &Project CRS from Layer" ), menuSetCRS );
connect( actionSetProjectCrs, &QAction::triggered, QgisApp::instance(), &QgisApp::setProjectCrsFromLayer );
menuSetCRS->addAction( actionSetProjectCrs );
}


const QList< QgsCoordinateReferenceSystem> recentProjections = QgsCoordinateReferenceSystem::recentCoordinateReferenceSystems(); const QList< QgsCoordinateReferenceSystem> recentProjections = QgsCoordinateReferenceSystem::recentCoordinateReferenceSystems();
if ( !recentProjections.isEmpty() ) if ( !recentProjections.isEmpty() )
Expand Down

0 comments on commit 0ea1e5f

Please sign in to comment.