@@ -7913,9 +7913,18 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
7913
7913
{
7914
7914
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( layer );
7915
7915
QgsVectorDataProvider* dprovider = vlayer->dataProvider ();
7916
+ bool isEditable = vlayer->isEditable ();
7916
7917
bool layerHasSelection = vlayer->selectedFeatureCount () != 0 ;
7917
7918
bool layerHasActions = vlayer->actions ()->size () > 0 ;
7918
7919
7920
+ bool canChangeAttributes = dprovider->capabilities () & QgsVectorDataProvider::ChangeAttributeValues;
7921
+ bool canDeleteFeatures = dprovider->capabilities () & QgsVectorDataProvider::DeleteFeatures;
7922
+ bool canAddAttributes = dprovider->capabilities () & QgsVectorDataProvider::AddAttributes;
7923
+ bool canDeleteAttributes = dprovider->capabilities () & QgsVectorDataProvider::DeleteAttributes;
7924
+ bool canAddFeatures = dprovider->capabilities () & QgsVectorDataProvider::AddFeatures;
7925
+ bool canSupportEditing = dprovider->capabilities () & QgsVectorDataProvider::EditingCapabilities;
7926
+ bool canChangeGeometry = dprovider->capabilities () & QgsVectorDataProvider::ChangeGeometries;
7927
+
7919
7928
mActionLocalHistogramStretch ->setEnabled ( false );
7920
7929
mActionFullHistogramStretch ->setEnabled ( false );
7921
7930
mActionZoomActualSize ->setEnabled ( false );
@@ -7932,64 +7941,42 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
7932
7941
mActionCopyFeatures ->setEnabled ( layerHasSelection );
7933
7942
mActionFeatureAction ->setEnabled ( layerHasActions );
7934
7943
7935
- if ( !vlayer-> isEditable () && mMapCanvas ->mapTool ()
7944
+ if ( !isEditable && mMapCanvas ->mapTool ()
7936
7945
&& mMapCanvas ->mapTool ()->isEditTool () && !mSaveRollbackInProgress )
7937
7946
{
7938
7947
mMapCanvas ->setMapTool ( mNonEditMapTool );
7939
7948
}
7940
7949
7941
7950
if ( dprovider )
7942
7951
{
7943
- mActionLayerSubsetString ->setEnabled ( dprovider->supportsSubsetString () && !vlayer->isEditable () );
7952
+ mActionLayerSubsetString ->setEnabled ( dprovider->supportsSubsetString () && !isEditable );
7953
+
7954
+ mActionToggleEditing ->setEnabled ( canSupportEditing && !vlayer->isReadOnly () );
7955
+ mActionToggleEditing ->setChecked ( canSupportEditing && isEditable );
7956
+ mActionSaveLayerEdits ->setEnabled ( canSupportEditing && isEditable && vlayer->isModified () );
7957
+ mUndoWidget ->dockContents ()->setEnabled ( canSupportEditing && isEditable );
7958
+ mActionUndo ->setEnabled ( canSupportEditing );
7959
+ mActionRedo ->setEnabled ( canSupportEditing );
7944
7960
7945
7961
// start editing/stop editing
7946
- if ( dprovider-> capabilities () & QgsVectorDataProvider::EditingCapabilities )
7962
+ if ( canSupportEditing )
7947
7963
{
7948
- mActionToggleEditing ->setEnabled ( !vlayer->isReadOnly () );
7949
- mActionToggleEditing ->setChecked ( vlayer->isEditable () );
7950
- mActionSaveLayerEdits ->setEnabled ( vlayer->isEditable () && vlayer->isModified () );
7951
- mUndoWidget ->dockContents ()->setEnabled ( vlayer->isEditable () );
7952
7964
updateUndoActions ();
7953
7965
}
7954
- else
7955
- {
7956
- mActionToggleEditing ->setEnabled ( false );
7957
- mActionToggleEditing ->setChecked ( false );
7958
- mActionSaveLayerEdits ->setEnabled ( false );
7959
- mUndoWidget ->dockContents ()->setEnabled ( false );
7960
- mActionUndo ->setEnabled ( false );
7961
- mActionRedo ->setEnabled ( false );
7962
- }
7963
7966
7964
- if ( dprovider->capabilities () & QgsVectorDataProvider::AddFeatures )
7965
- {
7966
- mActionPasteFeatures ->setEnabled ( vlayer->isEditable () && !clipboard ()->empty () );
7967
- mActionAddFeature ->setEnabled ( vlayer->isEditable () );
7968
- }
7969
- else
7970
- {
7971
- mActionPasteFeatures ->setEnabled ( false );
7972
- mActionAddFeature ->setEnabled ( false );
7973
- }
7967
+ mActionPasteFeatures ->setEnabled ( canAddAttributes && isEditable && !clipboard ()->empty () );
7968
+ mActionAddFeature ->setEnabled ( canAddAttributes && isEditable );
7974
7969
7975
7970
// does provider allow deleting of features?
7976
- if ( vlayer->isEditable () && dprovider->capabilities () & QgsVectorDataProvider::DeleteFeatures )
7977
- {
7978
- mActionDeleteSelected ->setEnabled ( layerHasSelection );
7979
- mActionCutFeatures ->setEnabled ( layerHasSelection );
7980
- }
7981
- else
7982
- {
7983
- mActionDeleteSelected ->setEnabled ( false );
7984
- mActionCutFeatures ->setEnabled ( false );
7985
- }
7971
+ mActionDeleteSelected ->setEnabled ( isEditable && canDeleteFeatures && layerHasSelection );
7972
+ mActionCutFeatures ->setEnabled ( isEditable && canDeleteFeatures && layerHasSelection );
7986
7973
7987
7974
// merge tool needs editable layer and provider with the capability of adding and deleting features
7988
- if ( vlayer-> isEditable () && dprovider-> capabilities () & QgsVectorDataProvider::ChangeAttributeValues )
7975
+ if ( isEditable && canChangeAttributes )
7989
7976
{
7990
7977
mActionMergeFeatures ->setEnabled ( layerHasSelection &&
7991
- dprovider-> capabilities () & QgsVectorDataProvider::DeleteFeatures &&
7992
- dprovider-> capabilities () & QgsVectorDataProvider::AddFeatures );
7978
+ canDeleteFeatures &&
7979
+ canAddAttributes );
7993
7980
7994
7981
mActionMergeFeatureAttributes ->setEnabled ( layerHasSelection );
7995
7982
}
@@ -8000,23 +7987,13 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
8000
7987
}
8001
7988
8002
7989
// moving enabled if geometry changes are supported
8003
- if ( vlayer->isEditable () && dprovider->capabilities () & QgsVectorDataProvider::ChangeGeometries )
8004
- {
8005
- mActionAddPart ->setEnabled ( true );
8006
- mActionDeletePart ->setEnabled ( true );
8007
- mActionMoveFeature ->setEnabled ( true );
8008
- mActionRotateFeature ->setEnabled ( true );
8009
- mActionNodeTool ->setEnabled ( true );
8010
- }
8011
- else
8012
- {
8013
- mActionAddPart ->setEnabled ( false );
8014
- mActionDeletePart ->setEnabled ( false );
8015
- mActionMoveFeature ->setEnabled ( false );
8016
- mActionRotateFeature ->setEnabled ( false );
8017
- mActionOffsetCurve ->setEnabled ( false );
8018
- mActionNodeTool ->setEnabled ( false );
8019
- }
7990
+ mActionAddPart ->setEnabled ( isEditable && canChangeGeometry );
7991
+ mActionDeletePart ->setEnabled ( isEditable && canChangeGeometry );
7992
+ mActionMoveFeature ->setEnabled ( isEditable && canChangeGeometry );
7993
+ mActionRotateFeature ->setEnabled ( isEditable && canChangeGeometry );
7994
+ mActionNodeTool ->setEnabled ( isEditable && canChangeGeometry );
7995
+
7996
+ mActionOffsetCurve ->setEnabled ( false );
8020
7997
8021
7998
if ( vlayer->geometryType () == QGis::Point )
8022
7999
{
@@ -8029,7 +8006,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
8029
8006
mActionDeleteRing ->setEnabled ( false );
8030
8007
mActionRotatePointSymbols ->setEnabled ( false );
8031
8008
8032
- if ( vlayer-> isEditable () && dprovider-> capabilities () & QgsVectorDataProvider::ChangeAttributeValues )
8009
+ if ( isEditable && canChangeAttributes )
8033
8010
{
8034
8011
if ( QgsMapToolRotatePointSymbols::layerIsRotatable ( vlayer ) )
8035
8012
{
@@ -8042,19 +8019,10 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
8042
8019
{
8043
8020
mActionAddFeature ->setIcon ( QgsApplication::getThemeIcon ( " /mActionCaptureLine.png" ) );
8044
8021
8045
- if ( vlayer->isEditable () && dprovider->capabilities () & QgsVectorDataProvider::AddFeatures )
8046
- {
8047
- mActionReshapeFeatures ->setEnabled ( true );
8048
- mActionSplitFeatures ->setEnabled ( true );
8049
- mActionSimplifyFeature ->setEnabled ( true );
8050
- mActionOffsetCurve ->setEnabled ( dprovider->capabilities () & QgsVectorDataProvider::ChangeAttributeValues );
8051
- }
8052
- else
8053
- {
8054
- mActionReshapeFeatures ->setEnabled ( false );
8055
- mActionSplitFeatures ->setEnabled ( false );
8056
- mActionSimplifyFeature ->setEnabled ( false );
8057
- }
8022
+ mActionReshapeFeatures ->setEnabled ( isEditable && canAddFeatures );
8023
+ mActionSplitFeatures ->setEnabled ( isEditable && canAddFeatures );
8024
+ mActionSimplifyFeature ->setEnabled ( isEditable && canAddFeatures );
8025
+ mActionOffsetCurve ->setEnabled ( isEditable && canAddFeatures && canChangeAttributes );
8058
8026
8059
8027
mActionAddRing ->setEnabled ( false );
8060
8028
mActionDeleteRing ->setEnabled ( false );
@@ -8063,31 +8031,14 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
8063
8031
{
8064
8032
mActionAddFeature ->setIcon ( QgsApplication::getThemeIcon ( " /mActionCapturePolygon.png" ) );
8065
8033
8066
- if ( vlayer->isEditable () && dprovider->capabilities () & QgsVectorDataProvider::AddFeatures )
8067
- {
8068
- mActionAddRing ->setEnabled ( true );
8069
- mActionReshapeFeatures ->setEnabled ( true );
8070
- mActionSplitFeatures ->setEnabled ( true );
8071
- mActionSimplifyFeature ->setEnabled ( true );
8072
- mActionDeleteRing ->setEnabled ( true );
8073
- }
8074
- else
8075
- {
8076
- mActionAddRing ->setEnabled ( false );
8077
- mActionReshapeFeatures ->setEnabled ( false );
8078
- mActionSplitFeatures ->setEnabled ( false );
8079
- mActionSimplifyFeature ->setEnabled ( false );
8080
- mActionDeleteRing ->setEnabled ( false );
8081
- }
8034
+ mActionAddRing ->setEnabled ( isEditable && canAddFeatures );
8035
+ mActionReshapeFeatures ->setEnabled ( isEditable && canAddFeatures );
8036
+ mActionSplitFeatures ->setEnabled ( isEditable && canAddFeatures );
8037
+ mActionSimplifyFeature ->setEnabled ( isEditable && canAddFeatures );
8038
+ mActionDeleteRing ->setEnabled ( isEditable && canAddFeatures );
8082
8039
}
8083
8040
8084
- bool canChangeAttributes = dprovider->capabilities () & QgsVectorDataProvider::ChangeAttributeValues;
8085
- bool canDeleteFeatures = dprovider->capabilities () & QgsVectorDataProvider::DeleteFeatures;
8086
- bool canAddAttributes = dprovider->capabilities () & QgsVectorDataProvider::AddAttributes;
8087
- bool canDeleteAttributes = dprovider->capabilities () & QgsVectorDataProvider::DeleteAttributes;
8088
- bool canAddFeatures = dprovider->capabilities () & QgsVectorDataProvider::AddFeatures;
8089
-
8090
- mActionOpenFieldCalc ->setEnabled (( canChangeAttributes || canAddAttributes ) && vlayer->isEditable () );
8041
+ mActionOpenFieldCalc ->setEnabled (( canChangeAttributes || canAddAttributes ) && isEditable );
8091
8042
8092
8043
return ;
8093
8044
}
0 commit comments