Skip to content

Commit a0c9f5f

Browse files
committed
Refactor activateDeactivateLayerRelatedActions
1 parent 1bfa7e9 commit a0c9f5f

File tree

1 file changed

+44
-93
lines changed

1 file changed

+44
-93
lines changed

src/app/qgisapp.cpp

+44-93
Original file line numberDiff line numberDiff line change
@@ -7913,9 +7913,18 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
79137913
{
79147914
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( layer );
79157915
QgsVectorDataProvider* dprovider = vlayer->dataProvider();
7916+
bool isEditable = vlayer->isEditable();
79167917
bool layerHasSelection = vlayer->selectedFeatureCount() != 0;
79177918
bool layerHasActions = vlayer->actions()->size() > 0;
79187919

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+
79197928
mActionLocalHistogramStretch->setEnabled( false );
79207929
mActionFullHistogramStretch->setEnabled( false );
79217930
mActionZoomActualSize->setEnabled( false );
@@ -7932,64 +7941,42 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
79327941
mActionCopyFeatures->setEnabled( layerHasSelection );
79337942
mActionFeatureAction->setEnabled( layerHasActions );
79347943

7935-
if ( !vlayer->isEditable() && mMapCanvas->mapTool()
7944+
if ( !isEditable && mMapCanvas->mapTool()
79367945
&& mMapCanvas->mapTool()->isEditTool() && !mSaveRollbackInProgress )
79377946
{
79387947
mMapCanvas->setMapTool( mNonEditMapTool );
79397948
}
79407949

79417950
if ( dprovider )
79427951
{
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 );
79447960

79457961
//start editing/stop editing
7946-
if ( dprovider->capabilities() & QgsVectorDataProvider::EditingCapabilities )
7962+
if ( canSupportEditing )
79477963
{
7948-
mActionToggleEditing->setEnabled( !vlayer->isReadOnly() );
7949-
mActionToggleEditing->setChecked( vlayer->isEditable() );
7950-
mActionSaveLayerEdits->setEnabled( vlayer->isEditable() && vlayer->isModified() );
7951-
mUndoWidget->dockContents()->setEnabled( vlayer->isEditable() );
79527964
updateUndoActions();
79537965
}
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-
}
79637966

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 );
79747969

79757970
//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 );
79867973

79877974
//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 )
79897976
{
79907977
mActionMergeFeatures->setEnabled( layerHasSelection &&
7991-
dprovider->capabilities() & QgsVectorDataProvider::DeleteFeatures &&
7992-
dprovider->capabilities() & QgsVectorDataProvider::AddFeatures );
7978+
canDeleteFeatures &&
7979+
canAddAttributes );
79937980

79947981
mActionMergeFeatureAttributes->setEnabled( layerHasSelection );
79957982
}
@@ -8000,23 +7987,13 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
80007987
}
80017988

80027989
// 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 );
80207997

80217998
if ( vlayer->geometryType() == QGis::Point )
80227999
{
@@ -8029,7 +8006,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
80298006
mActionDeleteRing->setEnabled( false );
80308007
mActionRotatePointSymbols->setEnabled( false );
80318008

8032-
if ( vlayer->isEditable() && dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues )
8009+
if ( isEditable && canChangeAttributes )
80338010
{
80348011
if ( QgsMapToolRotatePointSymbols::layerIsRotatable( vlayer ) )
80358012
{
@@ -8042,19 +8019,10 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
80428019
{
80438020
mActionAddFeature->setIcon( QgsApplication::getThemeIcon( "/mActionCaptureLine.png" ) );
80448021

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 );
80588026

80598027
mActionAddRing->setEnabled( false );
80608028
mActionDeleteRing->setEnabled( false );
@@ -8063,31 +8031,14 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
80638031
{
80648032
mActionAddFeature->setIcon( QgsApplication::getThemeIcon( "/mActionCapturePolygon.png" ) );
80658033

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 );
80828039
}
80838040

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 );
80918042

80928043
return;
80938044
}

0 commit comments

Comments
 (0)