[QGIS Commit] r9708 - in trunk/qgis: python/core src/app
src/app/legend src/core
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Tue Nov 25 18:37:13 EST 2008
Author: wonder
Date: 2008-11-25 18:37:13 -0500 (Tue, 25 Nov 2008)
New Revision: 9708
Modified:
trunk/qgis/python/core/qgsvectordataprovider.sip
trunk/qgis/src/app/legend/qgslegendlayerfile.cpp
trunk/qgis/src/app/qgisapp.cpp
trunk/qgis/src/core/qgsvectordataprovider.h
trunk/qgis/src/core/qgsvectorlayer.cpp
Log:
Allow editing when _any_ of the editing capabilities is supported by data provider
(instead of checking only AddFeatures)
Modified: trunk/qgis/python/core/qgsvectordataprovider.sip
===================================================================
--- trunk/qgis/python/core/qgsvectordataprovider.sip 2008-11-25 22:48:20 UTC (rev 9707)
+++ trunk/qgis/python/core/qgsvectordataprovider.sip 2008-11-25 23:37:13 UTC (rev 9708)
@@ -28,6 +28,9 @@
SequentialSelectGeometryAtId = 2048
};
+ /** bitmask of all provider's editing capabilities */
+ static const int EditingCapabilities;
+
/**
* Constructor of the vector provider
* @param uri uniform resource locator (URI) for a dataset
Modified: trunk/qgis/src/app/legend/qgslegendlayerfile.cpp
===================================================================
--- trunk/qgis/src/app/legend/qgslegendlayerfile.cpp 2008-11-25 22:48:20 UTC (rev 9707)
+++ trunk/qgis/src/app/legend/qgslegendlayerfile.cpp 2008-11-25 23:37:13 UTC (rev 9708)
@@ -383,8 +383,7 @@
// editing
int cap = vlayer->dataProvider()->capabilities();
- if (( cap & QgsVectorDataProvider::AddFeatures )
- || ( cap & QgsVectorDataProvider::DeleteFeatures ) )
+ if ( cap & QgsVectorDataProvider::EditingCapabilities )
{
if ( toggleEditingAction )
{
Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp 2008-11-25 22:48:20 UTC (rev 9707)
+++ trunk/qgis/src/app/qgisapp.cpp 2008-11-25 23:37:13 UTC (rev 9708)
@@ -3865,7 +3865,7 @@
if ( !vlayer->isEditable() )
{
vlayer->startEditing();
- if ( !( vlayer->dataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures ) )
+ if ( !( vlayer->dataProvider()->capabilities() & QgsVectorDataProvider::EditingCapabilities ) )
{
QMessageBox::information( 0, tr( "Start editing failed" ), tr( "Provider cannot be opened for editing" ) );
}
@@ -4840,15 +4840,22 @@
if ( dprovider )
{
//start editing/stop editing
- if ( dprovider->capabilities() & QgsVectorDataProvider::AddFeatures )
+ if ( dprovider->capabilities() & QgsVectorDataProvider::EditingCapabilities )
{
mActionToggleEditing->setEnabled( true );
mActionToggleEditing->setChecked( vlayer->isEditable() );
+ }
+ else
+ {
+ mActionToggleEditing->setEnabled( false );
+ }
+
+ if ( dprovider->capabilities() & QgsVectorDataProvider::AddFeatures )
+ {
mActionPasteFeatures->setEnabled( vlayer->isEditable() && !clipboard()->empty() );
}
else
{
- mActionToggleEditing->setEnabled( false );
mActionPasteFeatures->setEnabled( false );
}
@@ -4863,19 +4870,26 @@
mActionDeleteSelected->setEnabled( false );
mActionCutFeatures->setEnabled( false );
}
+
+ // moving enabled if geometry changes are supported
+ if ( vlayer->isEditable() && dprovider->capabilities() & QgsVectorDataProvider::ChangeGeometries )
+ {
+ mActionMoveFeature->setEnabled( true );
+ }
+ else
+ {
+ mActionMoveFeature->setEnabled( false );
+ }
-
if ( vlayer->geometryType() == QGis::Point )
{
if ( vlayer->isEditable() && dprovider->capabilities() & QgsVectorDataProvider::AddFeatures )
{
mActionCapturePoint->setEnabled( true );
- mActionMoveFeature->setEnabled( true );
}
else
{
mActionCapturePoint->setEnabled( false );
- mActionMoveFeature->setEnabled( false );
}
mActionCaptureLine->setEnabled( false );
mActionCapturePolygon->setEnabled( false );
@@ -4892,7 +4906,6 @@
{
mActionMoveVertex->setEnabled( true );
}
- mActionMoveFeature->setEnabled( true );
}
return;
}
@@ -4902,13 +4915,11 @@
{
mActionCaptureLine->setEnabled( true );
mActionSplitFeatures->setEnabled( true );
- mActionMoveFeature->setEnabled( true );
}
else
{
mActionCaptureLine->setEnabled( false );
mActionSplitFeatures->setEnabled( false );
- mActionMoveFeature->setEnabled( false );
}
mActionCapturePoint->setEnabled( false );
mActionCapturePolygon->setEnabled( false );
@@ -4923,7 +4934,6 @@
mActionAddRing->setEnabled( true );
mActionAddIsland->setEnabled( true );
mActionSplitFeatures->setEnabled( true );
- mActionMoveFeature->setEnabled( true );
}
else
{
@@ -4931,7 +4941,6 @@
mActionAddRing->setEnabled( false );
mActionAddIsland->setEnabled( false );
mActionSplitFeatures->setEnabled( false );
- mActionMoveFeature->setEnabled( false );
}
mActionCapturePoint->setEnabled( false );
mActionCaptureLine->setEnabled( false );
@@ -4943,7 +4952,6 @@
mActionAddVertex->setEnabled( true );
mActionMoveVertex->setEnabled( true );
mActionDeleteVertex->setEnabled( true );
- mActionMoveFeature->setEnabled( true );
if ( vlayer->geometryType() == QGis::Polygon )
{
mActionAddRing->setEnabled( true );
@@ -4957,7 +4965,6 @@
mActionAddVertex->setEnabled( false );
mActionMoveVertex->setEnabled( false );
mActionDeleteVertex->setEnabled( false );
- mActionMoveFeature->setEnabled( false );
}
return;
}
Modified: trunk/qgis/src/core/qgsvectordataprovider.h
===================================================================
--- trunk/qgis/src/core/qgsvectordataprovider.h 2008-11-25 22:48:20 UTC (rev 9707)
+++ trunk/qgis/src/core/qgsvectordataprovider.h 2008-11-25 23:37:13 UTC (rev 9708)
@@ -64,6 +64,10 @@
RandomSelectGeometryAtId = 1 << 10,
SequentialSelectGeometryAtId = 1 << 11
};
+
+ /** bitmask of all provider's editing capabilities */
+ const static int EditingCapabilities = AddFeatures | DeleteFeatures |
+ ChangeAttributeValues | ChangeGeometries | AddAttributes | DeleteAttributes;
/**
* Constructor of the vector provider
Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp 2008-11-25 22:48:20 UTC (rev 9707)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp 2008-11-25 23:37:13 UTC (rev 9708)
@@ -1977,7 +1977,8 @@
return false;
}
- if ( !( mDataProvider->capabilities() & QgsVectorDataProvider::AddFeatures ) )
+ // allow editing if provider supports any of the capabilities
+ if ( !( mDataProvider->capabilities() & QgsVectorDataProvider::EditingCapabilities ) )
{
return false;
}
More information about the QGIS-commit
mailing list