[QGIS Commit] r12673 - trunk/qgis/src/app

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Jan 5 11:06:20 EST 2010


Author: mhugent
Date: 2010-01-05 11:06:18 -0500 (Tue, 05 Jan 2010)
New Revision: 12673

Modified:
   trunk/qgis/src/app/qgisapp.cpp
   trunk/qgis/src/app/qgisapp.h
Log:
Show a message box if there was an error during the merge operation (instead of crashing). Fixes ticket #2342

Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp	2010-01-05 14:09:31 UTC (rev 12672)
+++ trunk/qgis/src/app/qgisapp.cpp	2010-01-05 16:06:18 UTC (rev 12673)
@@ -3635,8 +3635,9 @@
   mMapCanvas->setMapTool( mMapTools.mDeletePart );
 }
 
-QgsGeometry* QgisApp::unionGeometries( const QgsVectorLayer* vl, QgsFeatureList& featureList )
+QgsGeometry* QgisApp::unionGeometries( const QgsVectorLayer* vl, QgsFeatureList& featureList, bool& canceled )
 {
+  canceled = false;
   if ( !vl || featureList.size() < 2 )
   {
     return 0;
@@ -3660,6 +3661,7 @@
     {
       delete unionGeom;
       QApplication::restoreOverrideCursor();
+      canceled = true;
       return 0;
     }
     progress.setValue( i );
@@ -3668,6 +3670,12 @@
     {
       backupPtr = unionGeom;
       unionGeom = unionGeom->combine( currentGeom );
+      if ( !unionGeom )
+      {
+        delete backupPtr;
+        QApplication::restoreOverrideCursor();
+        return 0;
+      }
       if ( i > 1 ) //delete previous intermediate results
       {
         delete backupPtr;
@@ -3798,9 +3806,14 @@
 
   //get initial selection (may be altered by attribute merge dialog later)
   QgsFeatureList featureList = vl->selectedFeatures();  //get QList<QgsFeature>
-  QgsGeometry* unionGeom = unionGeometries( vl, featureList );
+  bool canceled;
+  QgsGeometry* unionGeom = unionGeometries( vl, featureList, canceled );
   if ( !unionGeom )
   {
+    if ( !canceled )
+    {
+      QMessageBox::critical( 0, tr( "Merge failed" ), tr( "An error occured during the merge operation" ) );
+    }
     return;
   }
 
@@ -3835,9 +3848,14 @@
   if ( featureList.size() != featureListAfter.size() )
   {
     delete unionGeom;
-    unionGeom = unionGeometries( vl, featureListAfter );
+    bool canceled;
+    unionGeom = unionGeometries( vl, featureListAfter, canceled );
     if ( !unionGeom )
     {
+      if ( !canceled )
+      {
+        QMessageBox::critical( 0, tr( "Merge failed" ), tr( "An error occured during the merge operation" ) );
+      }
       return;
     }
 

Modified: trunk/qgis/src/app/qgisapp.h
===================================================================
--- trunk/qgis/src/app/qgisapp.h	2010-01-05 14:09:31 UTC (rev 12672)
+++ trunk/qgis/src/app/qgisapp.h	2010-01-05 16:06:18 UTC (rev 12673)
@@ -710,8 +710,8 @@
     //! check to see if file is dirty and if so, prompt the user th save it
     bool saveDirty();
     /** Helper function to union several geometries together (used in function mergeSelectedFeatures)
-      @return 0 in case of error*/
-    QgsGeometry* unionGeometries( const QgsVectorLayer* vl, QgsFeatureList& featureList );
+      @return 0 in case of error or if canceled*/
+    QgsGeometry* unionGeometries( const QgsVectorLayer* vl, QgsFeatureList& featureList, bool& canceled );
 
     /**Deletes all the composer objects and clears mPrintComposers*/
     void deletePrintComposers();



More information about the QGIS-commit mailing list