Skip to content

Commit 5bc3650

Browse files
author
wonder
committedNov 25, 2008
Allow editing when _any_ of the editing capabilities is supported by data provider
(instead of checking only AddFeatures) git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@9708 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

5 files changed

+30
-16
lines changed

5 files changed

+30
-16
lines changed
 

‎python/core/qgsvectordataprovider.sip

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class QgsVectorDataProvider : QgsDataProvider
2828
SequentialSelectGeometryAtId = 2048
2929
};
3030

31+
/** bitmask of all provider's editing capabilities */
32+
static const int EditingCapabilities;
33+
3134
/**
3235
* Constructor of the vector provider
3336
* @param uri uniform resource locator (URI) for a dataset

‎src/app/legend/qgslegendlayerfile.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,7 @@ void QgsLegendLayerFile::addToPopupMenu( QMenu& theMenu, QAction* toggleEditingA
383383

384384
// editing
385385
int cap = vlayer->dataProvider()->capabilities();
386-
if (( cap & QgsVectorDataProvider::AddFeatures )
387-
|| ( cap & QgsVectorDataProvider::DeleteFeatures ) )
386+
if ( cap & QgsVectorDataProvider::EditingCapabilities )
388387
{
389388
if ( toggleEditingAction )
390389
{

‎src/app/qgisapp.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3865,7 +3865,7 @@ void QgisApp::toggleEditing( QgsMapLayer *layer )
38653865
if ( !vlayer->isEditable() )
38663866
{
38673867
vlayer->startEditing();
3868-
if ( !( vlayer->dataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures ) )
3868+
if ( !( vlayer->dataProvider()->capabilities() & QgsVectorDataProvider::EditingCapabilities ) )
38693869
{
38703870
QMessageBox::information( 0, tr( "Start editing failed" ), tr( "Provider cannot be opened for editing" ) );
38713871
}
@@ -4840,15 +4840,22 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
48404840
if ( dprovider )
48414841
{
48424842
//start editing/stop editing
4843-
if ( dprovider->capabilities() & QgsVectorDataProvider::AddFeatures )
4843+
if ( dprovider->capabilities() & QgsVectorDataProvider::EditingCapabilities )
48444844
{
48454845
mActionToggleEditing->setEnabled( true );
48464846
mActionToggleEditing->setChecked( vlayer->isEditable() );
4847-
mActionPasteFeatures->setEnabled( vlayer->isEditable() && !clipboard()->empty() );
48484847
}
48494848
else
48504849
{
48514850
mActionToggleEditing->setEnabled( false );
4851+
}
4852+
4853+
if ( dprovider->capabilities() & QgsVectorDataProvider::AddFeatures )
4854+
{
4855+
mActionPasteFeatures->setEnabled( vlayer->isEditable() && !clipboard()->empty() );
4856+
}
4857+
else
4858+
{
48524859
mActionPasteFeatures->setEnabled( false );
48534860
}
48544861

@@ -4863,19 +4870,26 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
48634870
mActionDeleteSelected->setEnabled( false );
48644871
mActionCutFeatures->setEnabled( false );
48654872
}
4866-
4873+
4874+
// moving enabled if geometry changes are supported
4875+
if ( vlayer->isEditable() && dprovider->capabilities() & QgsVectorDataProvider::ChangeGeometries )
4876+
{
4877+
mActionMoveFeature->setEnabled( true );
4878+
}
4879+
else
4880+
{
4881+
mActionMoveFeature->setEnabled( false );
4882+
}
48674883

48684884
if ( vlayer->geometryType() == QGis::Point )
48694885
{
48704886
if ( vlayer->isEditable() && dprovider->capabilities() & QgsVectorDataProvider::AddFeatures )
48714887
{
48724888
mActionCapturePoint->setEnabled( true );
4873-
mActionMoveFeature->setEnabled( true );
48744889
}
48754890
else
48764891
{
48774892
mActionCapturePoint->setEnabled( false );
4878-
mActionMoveFeature->setEnabled( false );
48794893
}
48804894
mActionCaptureLine->setEnabled( false );
48814895
mActionCapturePolygon->setEnabled( false );
@@ -4892,7 +4906,6 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
48924906
{
48934907
mActionMoveVertex->setEnabled( true );
48944908
}
4895-
mActionMoveFeature->setEnabled( true );
48964909
}
48974910
return;
48984911
}
@@ -4902,13 +4915,11 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
49024915
{
49034916
mActionCaptureLine->setEnabled( true );
49044917
mActionSplitFeatures->setEnabled( true );
4905-
mActionMoveFeature->setEnabled( true );
49064918
}
49074919
else
49084920
{
49094921
mActionCaptureLine->setEnabled( false );
49104922
mActionSplitFeatures->setEnabled( false );
4911-
mActionMoveFeature->setEnabled( false );
49124923
}
49134924
mActionCapturePoint->setEnabled( false );
49144925
mActionCapturePolygon->setEnabled( false );
@@ -4923,15 +4934,13 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
49234934
mActionAddRing->setEnabled( true );
49244935
mActionAddIsland->setEnabled( true );
49254936
mActionSplitFeatures->setEnabled( true );
4926-
mActionMoveFeature->setEnabled( true );
49274937
}
49284938
else
49294939
{
49304940
mActionCapturePolygon->setEnabled( false );
49314941
mActionAddRing->setEnabled( false );
49324942
mActionAddIsland->setEnabled( false );
49334943
mActionSplitFeatures->setEnabled( false );
4934-
mActionMoveFeature->setEnabled( false );
49354944
}
49364945
mActionCapturePoint->setEnabled( false );
49374946
mActionCaptureLine->setEnabled( false );
@@ -4943,7 +4952,6 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
49434952
mActionAddVertex->setEnabled( true );
49444953
mActionMoveVertex->setEnabled( true );
49454954
mActionDeleteVertex->setEnabled( true );
4946-
mActionMoveFeature->setEnabled( true );
49474955
if ( vlayer->geometryType() == QGis::Polygon )
49484956
{
49494957
mActionAddRing->setEnabled( true );
@@ -4957,7 +4965,6 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
49574965
mActionAddVertex->setEnabled( false );
49584966
mActionMoveVertex->setEnabled( false );
49594967
mActionDeleteVertex->setEnabled( false );
4960-
mActionMoveFeature->setEnabled( false );
49614968
}
49624969
return;
49634970
}

‎src/core/qgsvectordataprovider.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider
6464
RandomSelectGeometryAtId = 1 << 10,
6565
SequentialSelectGeometryAtId = 1 << 11
6666
};
67+
68+
/** bitmask of all provider's editing capabilities */
69+
const static int EditingCapabilities = AddFeatures | DeleteFeatures |
70+
ChangeAttributeValues | ChangeGeometries | AddAttributes | DeleteAttributes;
6771

6872
/**
6973
* Constructor of the vector provider

‎src/core/qgsvectorlayer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1977,7 +1977,8 @@ bool QgsVectorLayer::startEditing()
19771977
return false;
19781978
}
19791979

1980-
if ( !( mDataProvider->capabilities() & QgsVectorDataProvider::AddFeatures ) )
1980+
// allow editing if provider supports any of the capabilities
1981+
if ( !( mDataProvider->capabilities() & QgsVectorDataProvider::EditingCapabilities ) )
19811982
{
19821983
return false;
19831984
}

0 commit comments

Comments
 (0)
Please sign in to comment.