[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