Skip to content

Commit 716ba9b

Browse files
authored
[needs-docs] Add a "save selected features as" layer item shortcut
1 parent 7900570 commit 716ba9b

5 files changed

+25
-7
lines changed

src/app/qgisapp.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -6959,7 +6959,7 @@ void QgisApp::saveAsRasterFile( QgsRasterLayer *rasterLayer )
69596959
}
69606960

69616961

6962-
void QgisApp::saveAsFile( QgsMapLayer *layer )
6962+
void QgisApp::saveAsFile( QgsMapLayer *layer, bool onlySelected )
69636963
{
69646964
if ( !layer )
69656965
layer = activeLayer();
@@ -6974,7 +6974,7 @@ void QgisApp::saveAsFile( QgsMapLayer *layer )
69746974
}
69756975
else if ( layerType == QgsMapLayer::VectorLayer )
69766976
{
6977-
saveAsVectorFileGeneral( qobject_cast<QgsVectorLayer *>( layer ) );
6977+
saveAsVectorFileGeneral( qobject_cast<QgsVectorLayer *>( layer ), true, onlySelected );
69786978
}
69796979
}
69806980

@@ -7074,7 +7074,7 @@ QgisAppFieldValueConverter *QgisAppFieldValueConverter::clone() const
70747074

70757075
///@endcond
70767076

7077-
void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOption )
7077+
void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOption, bool onlySelected )
70787078
{
70797079
if ( !vlayer )
70807080
{
@@ -7096,6 +7096,7 @@ void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOpt
70967096

70977097
dialog->setMapCanvas( mMapCanvas );
70987098
dialog->setIncludeZ( QgsWkbTypes::hasZ( vlayer->wkbType() ) );
7099+
dialog->setOnlySelected( onlySelected );
70997100

71007101
if ( dialog->exec() == QDialog::Accepted )
71017102
{

src/app/qgisapp.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
692692

693693
public slots:
694694
//! save current vector layer
695-
void saveAsFile( QgsMapLayer *layer = nullptr );
695+
void saveAsFile( QgsMapLayer *layer = nullptr, bool onlySelected = false );
696696
//! save qml style for the current layer
697697
void saveStyleFile( QgsMapLayer *layer = nullptr );
698698
//! save qrl definition for the current layer
@@ -1768,7 +1768,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
17681768

17691769
void setLayoutAtlasFeature( QgsPrintLayout *layout, QgsMapLayer *layer, const QgsFeature &feat );
17701770

1771-
void saveAsVectorFileGeneral( QgsVectorLayer *vlayer = nullptr, bool symbologyOption = true );
1771+
void saveAsVectorFileGeneral( QgsVectorLayer *vlayer = nullptr, bool symbologyOption = true, bool onlySelected = false );
17721772

17731773
/**
17741774
* Paste features from clipboard into a new memory layer.

src/app/qgsapplayertreeviewmenuprovider.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,14 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
244244
{
245245
// save as vector file
246246
QMenu *menuExportVector = new QMenu( tr( "Export" ), menu );
247-
QAction *actionSaveAs = new QAction( tr( "Save as…" ), menuExportVector );
248-
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer Definition File…" ), menuExportVector );
247+
QAction *actionSaveAs = new QAction( tr( "Save Features as…" ), menuExportVector );
249248
connect( actionSaveAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile(); } );
250249
menuExportVector->addAction( actionSaveAs );
250+
QAction *actionSaveSelectedFeaturesAs = new QAction( tr( "Save Selected Features as…" ), menuExportVector );
251+
connect( actionSaveSelectedFeaturesAs, &QAction::triggered, QgisApp::instance(), [ = ] { QgisApp::instance()->saveAsFile( nullptr, true ); } );
252+
actionSaveSelectedFeaturesAs->setEnabled( vlayer->selectedFeatureCount() > 0 );
253+
menuExportVector->addAction( actionSaveSelectedFeaturesAs );
254+
QAction *actionSaveAsDefinitionLayer = new QAction( tr( "Save as Layer Definition File…" ), menuExportVector );
251255
connect( actionSaveAsDefinitionLayer, &QAction::triggered, QgisApp::instance(), &QgisApp::saveAsLayerDefinition );
252256
menuExportVector->addAction( actionSaveAsDefinitionLayer );
253257
if ( vlayer->isSpatial() )

src/gui/ogr/qgsvectorlayersaveasdialog.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -863,6 +863,11 @@ QgsRectangle QgsVectorLayerSaveAsDialog::filterExtent() const
863863
return mExtentGroupBox->outputExtent();
864864
}
865865

866+
void QgsVectorLayerSaveAsDialog::setOnlySelected( bool onlySelected )
867+
{
868+
mSelectedOnly->setChecked( onlySelected );
869+
}
870+
866871
bool QgsVectorLayerSaveAsDialog::onlySelected() const
867872
{
868873
return mSelectedOnly->isChecked();

src/gui/ogr/qgsvectorlayersaveasdialog.h

+8
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ class GUI_EXPORT QgsVectorLayerSaveAsDialog : public QDialog, private Ui::QgsVec
8282
bool hasFilterExtent() const;
8383
QgsRectangle filterExtent() const;
8484

85+
/**
86+
* Sets whether only selected features will be saved.
87+
*/
88+
void setOnlySelected( bool onlySelected );
89+
90+
/**
91+
* Returns whether only selected features will be saved.
92+
*/
8593
bool onlySelected() const;
8694

8795
/**

0 commit comments

Comments
 (0)