@@ -1385,6 +1385,8 @@ void QgisApp::createActions()
1385
1385
connect( mActionSelectFreehand, SIGNAL( triggered() ), this, SLOT( selectByFreehand() ) );
1386
1386
connect( mActionSelectRadius, SIGNAL( triggered() ), this, SLOT( selectByRadius() ) );
1387
1387
connect( mActionDeselectAll, SIGNAL( triggered() ), this, SLOT( deselectAll() ) );
1388
+ connect( mActionSelectAll, SIGNAL( triggered() ), this, SLOT( selectAll() ) );
1389
+ connect( mActionInvertSelection, SIGNAL( triggered() ), this, SLOT( invertSelection() ) );
1388
1390
connect( mActionSelectByExpression, SIGNAL( triggered() ), this, SLOT( selectByExpression() ) );
1389
1391
connect( mActionIdentify, SIGNAL( triggered() ), this, SLOT( identify() ) );
1390
1392
connect( mActionFeatureAction, SIGNAL( triggered() ), this, SLOT( doFeatureAction() ) );
@@ -1624,6 +1626,8 @@ void QgisApp::createActionGroups()
1624
1626
mMapToolGroup->addAction( mActionSelectFreehand );
1625
1627
mMapToolGroup->addAction( mActionSelectRadius );
1626
1628
mMapToolGroup->addAction( mActionDeselectAll );
1629
+ mMapToolGroup->addAction( mActionSelectAll );
1630
+ mMapToolGroup->addAction( mActionInvertSelection );
1627
1631
mMapToolGroup->addAction( mActionMeasure );
1628
1632
mMapToolGroup->addAction( mActionMeasureArea );
1629
1633
mMapToolGroup->addAction( mActionMeasureAngle );
@@ -1834,14 +1838,25 @@ void QgisApp::createToolBars()
1834
1838
1835
1839
mToolbarMenu->addActions( toolbarMenuActions );
1836
1840
1837
- // select tool button
1841
+ // selection tool button
1838
1842
1839
1843
QToolButton *bt = new QToolButton( mAttributesToolBar );
1840
1844
bt->setPopupMode( QToolButton::MenuButtonPopup );
1841
1845
QList<QAction*> selectActions;
1842
- selectActions << mActionSelectFeatures << mActionSelectPolygon
1843
- << mActionSelectFreehand << mActionSelectRadius ;
1846
+ selectActions << mActionDeselectAll << mActionSelectAll
1847
+ << mActionInvertSelection << mActionSelectByExpression ;
1844
1848
bt->addActions( selectActions );
1849
+ bt->setDefaultAction( mActionDeselectAll );
1850
+ QAction* selectionAction = mAttributesToolBar->insertWidget( mActionOpenTable, bt );
1851
+
1852
+ // select tool button
1853
+
1854
+ bt = new QToolButton( mAttributesToolBar );
1855
+ bt->setPopupMode( QToolButton::MenuButtonPopup );
1856
+ QList<QAction*> selectionActions;
1857
+ selectionActions << mActionSelectFeatures << mActionSelectPolygon
1858
+ << mActionSelectFreehand << mActionSelectRadius;
1859
+ bt->addActions( selectionActions );
1845
1860
1846
1861
QAction* defSelectAction = mActionSelectFeatures;
1847
1862
switch ( settings.value( "/UI/selectTool", 0 ).toInt() )
@@ -1863,7 +1878,7 @@ void QgisApp::createToolBars()
1863
1878
break;
1864
1879
}
1865
1880
bt->setDefaultAction( defSelectAction );
1866
- QAction* selectAction = mAttributesToolBar->insertWidget( mActionDeselectAll , bt );
1881
+ QAction* selectAction = mAttributesToolBar->insertWidget( selectionAction , bt );
1867
1882
selectAction->setObjectName( "ActionSelect" );
1868
1883
connect( bt, SIGNAL( triggered( QAction * ) ), this, SLOT( toolButtonActionTriggered( QAction * ) ) );
1869
1884
@@ -2294,6 +2309,8 @@ void QgisApp::setTheme( const QString& theThemeName )
2294
2309
mActionSelectFreehand->setIcon( QgsApplication::getThemeIcon( "/mActionSelectFreehand.svg" ) );
2295
2310
mActionSelectRadius->setIcon( QgsApplication::getThemeIcon( "/mActionSelectRadius.svg" ) );
2296
2311
mActionDeselectAll->setIcon( QgsApplication::getThemeIcon( "/mActionDeselectAll.svg" ) );
2312
+ mActionSelectAll->setIcon( QgsApplication::getThemeIcon( "/mActionSelectAll.png" ) );
2313
+ mActionInvertSelection->setIcon( QgsApplication::getThemeIcon( "/mActionInvertSelection.png" ) );
2297
2314
mActionSelectByExpression->setIcon( QgsApplication::getThemeIcon( "/mIconExpressionSelect.svg" ) );
2298
2315
mActionOpenTable->setIcon( QgsApplication::getThemeIcon( "/mActionOpenTable.png" ) );
2299
2316
mActionOpenFieldCalc->setIcon( QgsApplication::getThemeIcon( "/mActionCalculateField.png" ) );
@@ -6676,6 +6693,56 @@ void QgisApp::deselectAll()
6676
6693
mMapCanvas->setRenderFlag( true );
6677
6694
}
6678
6695
6696
+ void QgisApp::invertSelection()
6697
+ {
6698
+ QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mMapCanvas->currentLayer() );
6699
+ if ( !vlayer )
6700
+ {
6701
+ messageBar()->pushMessage(
6702
+ tr( "No active vector layer" ),
6703
+ tr( "To invert selection, choose a vector layer in the legend" ),
6704
+ QgsMessageBar::INFO,
6705
+ messageTimeout() );
6706
+ return;
6707
+ }
6708
+
6709
+ // Turn off rendering to improve speed.
6710
+ bool renderFlagState = mMapCanvas->renderFlag();
6711
+ if ( renderFlagState )
6712
+ mMapCanvas->setRenderFlag( false );
6713
+
6714
+ vlayer->invertSelection();
6715
+
6716
+ // Turn on rendering (if it was on previously)
6717
+ if ( renderFlagState )
6718
+ mMapCanvas->setRenderFlag( true );
6719
+ }
6720
+
6721
+ void QgisApp::selectAll()
6722
+ {
6723
+ QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mMapCanvas->currentLayer() );
6724
+ if ( !vlayer )
6725
+ {
6726
+ messageBar()->pushMessage(
6727
+ tr( "No active vector layer" ),
6728
+ tr( "To select all, choose a vector layer in the legend" ),
6729
+ QgsMessageBar::INFO,
6730
+ messageTimeout() );
6731
+ return;
6732
+ }
6733
+
6734
+ // Turn off rendering to improve speed.
6735
+ bool renderFlagState = mMapCanvas->renderFlag();
6736
+ if ( renderFlagState )
6737
+ mMapCanvas->setRenderFlag( false );
6738
+
6739
+ vlayer->selectAll();
6740
+
6741
+ // Turn on rendering (if it was on previously)
6742
+ if ( renderFlagState )
6743
+ mMapCanvas->setRenderFlag( true );
6744
+ }
6745
+
6679
6746
void QgisApp::selectByExpression()
6680
6747
{
6681
6748
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mMapCanvas->currentLayer() );
@@ -9804,6 +9871,8 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
9804
9871
mActionSelectByExpression->setEnabled( false );
9805
9872
mActionLabeling->setEnabled( false );
9806
9873
mActionOpenTable->setEnabled( false );
9874
+ mActionSelectAll->setEnabled( false );
9875
+ mActionInvertSelection->setEnabled( false );
9807
9876
mActionOpenFieldCalc->setEnabled( false );
9808
9877
mActionToggleEditing->setEnabled( false );
9809
9878
mActionToggleEditing->setChecked( false );
@@ -9900,6 +9969,8 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
9900
9969
mActionIdentify->setEnabled( true );
9901
9970
mActionSelectByExpression->setEnabled( true );
9902
9971
mActionOpenTable->setEnabled( true );
9972
+ mActionSelectAll->setEnabled( true );
9973
+ mActionInvertSelection->setEnabled( true );
9903
9974
mActionSaveLayerDefinition->setEnabled( true );
9904
9975
mActionLayerSaveAs->setEnabled( true );
9905
9976
mActionCopyFeatures->setEnabled( layerHasSelection );
@@ -10074,6 +10145,9 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
10074
10145
mActionSelectRadius->setEnabled( false );
10075
10146
mActionZoomActualSize->setEnabled( true );
10076
10147
mActionOpenTable->setEnabled( false );
10148
+ mActionSelectAll->setEnabled( false );
10149
+ mActionInvertSelection->setEnabled( false );
10150
+ mActionSelectByExpression->setEnabled( false );
10077
10151
mActionOpenFieldCalc->setEnabled( false );
10078
10152
mActionToggleEditing->setEnabled( false );
10079
10153
mActionToggleEditing->setChecked( false );
0 commit comments