|
@@ -432,58 +432,91 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu() |
|
|
|
|
|
menu->addSeparator(); |
|
|
|
|
|
if ( vlayer ) |
|
|
// export menu |
|
|
if ( layer ) |
|
|
{ |
|
|
if ( vlayer->isTemporary() ) |
|
|
{ |
|
|
QAction *actionMakePermanent = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mActionFileSave.svg" ) ), tr( "Make Permanent…" ), menu ); |
|
|
connect( actionMakePermanent, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->makeMemoryLayerPermanent( vlayer ); } ); |
|
|
menu->addAction( actionMakePermanent ); |
|
|
} |
|
|
// save as vector file |
|
|
QMenu *menuExportVector = new QMenu( tr( "E&xport" ), menu ); |
|
|
QAction *actionSaveAs = new QAction( tr( "Save Features &As…" ), menuExportVector ); |
|
|
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } ); |
|
|
actionSaveAs->setEnabled( vlayer->isValid() ); |
|
|
menuExportVector->addAction( actionSaveAs ); |
|
|
QAction *actionSaveSelectedFeaturesAs = new QAction( tr( "Save &Selected Features As…" ), menuExportVector ); |
|
|
connect( actionSaveSelectedFeaturesAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile( nullptr, true ); } ); |
|
|
actionSaveSelectedFeaturesAs->setEnabled( vlayer->isValid() && vlayer->selectedFeatureCount() > 0 ); |
|
|
menuExportVector->addAction( actionSaveSelectedFeaturesAs ); |
|
|
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer &Definition File…" ), menuExportVector ); |
|
|
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition ); |
|
|
menuExportVector->addAction( actionSaveAsDefinitionLayer ); |
|
|
if ( vlayer->isSpatial() ) |
|
|
switch ( layer->type() ) |
|
|
{ |
|
|
QAction *actionSaveStyle = new QAction( tr( "Save as &QGIS Layer Style File…" ), menuExportVector ); |
|
|
connect( actionSaveStyle, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveStyleFile(); } ); |
|
|
menuExportVector->addAction( actionSaveStyle ); |
|
|
case QgsMapLayerType::VectorLayer: |
|
|
if ( vlayer ) |
|
|
{ |
|
|
if ( vlayer->isTemporary() ) |
|
|
{ |
|
|
QAction *actionMakePermanent = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mActionFileSave.svg" ) ), tr( "Make Permanent…" ), menu ); |
|
|
connect( actionMakePermanent, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->makeMemoryLayerPermanent( vlayer ); } ); |
|
|
menu->addAction( actionMakePermanent ); |
|
|
} |
|
|
// save as vector file |
|
|
QMenu *menuExportVector = new QMenu( tr( "E&xport" ), menu ); |
|
|
QAction *actionSaveAs = new QAction( tr( "Save Features &As…" ), menuExportVector ); |
|
|
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } ); |
|
|
actionSaveAs->setEnabled( vlayer->isValid() ); |
|
|
menuExportVector->addAction( actionSaveAs ); |
|
|
QAction *actionSaveSelectedFeaturesAs = new QAction( tr( "Save &Selected Features As…" ), menuExportVector ); |
|
|
connect( actionSaveSelectedFeaturesAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile( nullptr, true ); } ); |
|
|
actionSaveSelectedFeaturesAs->setEnabled( vlayer->isValid() && vlayer->selectedFeatureCount() > 0 ); |
|
|
menuExportVector->addAction( actionSaveSelectedFeaturesAs ); |
|
|
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer &Definition File…" ), menuExportVector ); |
|
|
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition ); |
|
|
menuExportVector->addAction( actionSaveAsDefinitionLayer ); |
|
|
if ( vlayer->isSpatial() ) |
|
|
{ |
|
|
QAction *actionSaveStyle = new QAction( tr( "Save as &QGIS Layer Style File…" ), menuExportVector ); |
|
|
connect( actionSaveStyle, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveStyleFile(); } ); |
|
|
menuExportVector->addAction( actionSaveStyle ); |
|
|
} |
|
|
menu->addMenu( menuExportVector ); |
|
|
} |
|
|
break; |
|
|
|
|
|
case QgsMapLayerType::RasterLayer: |
|
|
if ( rlayer ) |
|
|
{ |
|
|
QMenu *menuExportRaster = new QMenu( tr( "E&xport" ), menu ); |
|
|
QAction *actionSaveAs = new QAction( tr( "Save &As…" ), menuExportRaster ); |
|
|
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer &Definition File…" ), menuExportRaster ); |
|
|
QAction *actionSaveStyle = new QAction( tr( "Save as &QGIS Layer Style File…" ), menuExportRaster ); |
|
|
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } ); |
|
|
menuExportRaster->addAction( actionSaveAs ); |
|
|
actionSaveAs->setEnabled( rlayer->isValid() ); |
|
|
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition ); |
|
|
menuExportRaster->addAction( actionSaveAsDefinitionLayer ); |
|
|
connect( actionSaveStyle, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveStyleFile(); } ); |
|
|
menuExportRaster->addAction( actionSaveStyle ); |
|
|
menu->addMenu( menuExportRaster ); |
|
|
} |
|
|
break; |
|
|
|
|
|
case QgsMapLayerType::MeshLayer: |
|
|
case QgsMapLayerType::VectorTileLayer: |
|
|
case QgsMapLayerType::PointCloudLayer: |
|
|
{ |
|
|
QMenu *menuExportRaster = new QMenu( tr( "E&xport" ), menu ); |
|
|
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer &Definition File…" ), menuExportRaster ); |
|
|
QAction *actionSaveStyle = new QAction( tr( "Save as &QGIS Layer Style File…" ), menuExportRaster ); |
|
|
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition ); |
|
|
menuExportRaster->addAction( actionSaveAsDefinitionLayer ); |
|
|
connect( actionSaveStyle, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveStyleFile(); } ); |
|
|
menuExportRaster->addAction( actionSaveStyle ); |
|
|
menu->addMenu( menuExportRaster ); |
|
|
} |
|
|
break; |
|
|
|
|
|
case QgsMapLayerType::AnnotationLayer: |
|
|
break; |
|
|
|
|
|
case QgsMapLayerType::PluginLayer: |
|
|
if ( mView->selectedLayerNodes().count() == 1 ) |
|
|
{ |
|
|
// disable duplication of plugin layers |
|
|
duplicateLayersAction->setEnabled( false ); |
|
|
} |
|
|
break; |
|
|
|
|
|
} |
|
|
menu->addMenu( menuExportVector ); |
|
|
} |
|
|
else if ( rlayer ) |
|
|
{ |
|
|
QMenu *menuExportRaster = new QMenu( tr( "E&xport" ), menu ); |
|
|
QAction *actionSaveAs = new QAction( tr( "Save &As…" ), menuExportRaster ); |
|
|
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer &Definition File…" ), menuExportRaster ); |
|
|
QAction *actionSaveStyle = new QAction( tr( "Save as &QGIS Layer Style File…" ), menuExportRaster ); |
|
|
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } ); |
|
|
menuExportRaster->addAction( actionSaveAs ); |
|
|
actionSaveAs->setEnabled( rlayer->isValid() ); |
|
|
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition ); |
|
|
menuExportRaster->addAction( actionSaveAsDefinitionLayer ); |
|
|
connect( actionSaveStyle, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveStyleFile(); } ); |
|
|
menuExportRaster->addAction( actionSaveStyle ); |
|
|
menu->addMenu( menuExportRaster ); |
|
|
} |
|
|
else if ( layer && layer->type() == QgsMapLayerType::PluginLayer && mView->selectedLayerNodes().count() == 1 ) |
|
|
{ |
|
|
// disable duplication of plugin layers |
|
|
duplicateLayersAction->setEnabled( false ); |
|
|
menu->addSeparator(); |
|
|
} |
|
|
|
|
|
menu->addSeparator(); |
|
|
|
|
|
// style-related actions |
|
|
if ( layer && mView->selectedLayerNodes().count() == 1 ) |
|
|
{ |
|
|