Skip to content

Commit e15562b

Browse files
author
jef
committed
fix crash when added features were deleted
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@13257 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 7c9598e commit e15562b

File tree

1 file changed

+27
-35
lines changed

1 file changed

+27
-35
lines changed

src/core/qgsvectorlayer.cpp

+27-35
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
#include "qgsvectordataprovider.h"
7171
#include "qgsvectorlayerundocommand.h"
7272
#include "qgsvectoroverlay.h"
73-
#include "qgslogger.h"
7473
#include "qgsmaplayerregistry.h"
7574
#include "qgsclipper.h"
7675
#include "qgsproject.h"
@@ -365,17 +364,15 @@ void QgsVectorLayer::drawLabels( QgsRenderContext& rendererContext )
365364
catch ( QgsCsException &e )
366365
{
367366
Q_UNUSED( e );
368-
QgsLogger::critical( "Error projecting label locations, caught in " + QString( __FILE__ ) + ", line " + QString( __LINE__ ) );
367+
QgsDebugMsg( "Error projecting label locations" );
369368
}
370369

371370
if ( mRendererV2 )
372371
{
373372
mRendererV2->stopRender( rendererContext );
374373
}
375374

376-
#ifdef QGISDEBUG
377-
QgsLogger::debug( "Total features processed", featureCount, 1, __FILE__, __FUNCTION__, __LINE__ );
378-
#endif
375+
QgsDebugMsg( QString( "Total features processed %1" ).arg( featureCount ) );
379376

380377
// XXX Something in our draw event is triggering an additional draw event when resizing [TE 01/26/06]
381378
// XXX Calling this will begin processing the next draw event causing image havoc and recursion crashes.
@@ -768,10 +765,8 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
768765
}
769766
catch ( const QgsCsException &cse )
770767
{
771-
QString msg( "Failed to transform a point while drawing a feature of type '"
772-
+ fet.typeName() + "'. Ignoring this feature." );
773-
msg += cse.what();
774-
QgsLogger::warning( msg );
768+
QgsDebugMsg( QString( "Failed to transform a point while drawing a feature of type '%1'. Ignoring this feature. %2" )
769+
.arg( fet.typeName() ).arg( cse.what() ) );
775770
}
776771
#ifndef Q_WS_MAC
777772
++featureCount;
@@ -898,10 +893,8 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
898893
}
899894
catch ( const QgsCsException &cse )
900895
{
901-
QString msg( "Failed to transform a point while drawing a feature of type '"
902-
+ fet.typeName() + "'. Ignoring this feature." );
903-
msg += cse.what();
904-
QgsLogger::warning( msg );
896+
QgsDebugMsg( QString( "Failed to transform a point while drawing a feature of type '%1'. Ignoring this feature. %2" )
897+
.arg( fet.typeName() ).arg( cse.what() ) );
905898
}
906899
#ifndef Q_WS_MAC
907900
++featureCount;
@@ -1090,16 +1083,14 @@ bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
10901083
}
10911084
catch ( QgsCsException &cse )
10921085
{
1093-
QString msg( "Failed to transform a point while drawing a feature of type '"
1094-
+ fet.typeName() + "'. Rendering stopped." );
1095-
msg += cse.what();
1096-
QgsLogger::warning( msg );
1086+
QgsDebugMsg( QString( "Failed to transform a point while drawing a feature of type '%1'. Rendering stopped. %2" )
1087+
.arg( fet.typeName() ).arg( cse.what() ) );
10971088
return false;
10981089
}
10991090
}
11001091
else
11011092
{
1102-
QgsLogger::warning( "QgsRenderer is null in QgsVectorLayer::draw()" );
1093+
QgsDebugMsg( "QgsRenderer is null" );
11031094
}
11041095

11051096
if ( mEditable )
@@ -1392,18 +1383,18 @@ long QgsVectorLayer::featureCount() const
13921383
{
13931384
if ( !mDataProvider )
13941385
{
1395-
QgsLogger::warning( " QgsVectorLayer::featureCount() invoked with null mDataProvider" );
1386+
QgsDebugMsg( "invoked with null mDataProvider" );
13961387
return 0;
13971388
}
13981389

13991390
return mDataProvider->featureCount();
1400-
} // QgsVectorLayer::featureCount
1391+
}
14011392

14021393
long QgsVectorLayer::updateFeatureCount() const
14031394
{
14041395
if ( !mDataProvider )
14051396
{
1406-
QgsLogger::warning( " QgsVectorLayer::updateFeatureCount() invoked with null mDataProvider" );
1397+
QgsDebugMsg( "invoked with null mDataProvider" );
14071398
return 0;
14081399
}
14091400
return mDataProvider->updateFeatureCount();
@@ -1414,7 +1405,7 @@ void QgsVectorLayer::updateExtents()
14141405
mLayerExtent.setMinimal();
14151406

14161407
if ( !mDataProvider )
1417-
QgsLogger::warning( " QgsVectorLayer::updateExtents() invoked with null mDataProvider" );
1408+
QgsDebugMsg( "invoked with null mDataProvider" );
14181409

14191410
if ( mDeletedFeatureIds.isEmpty() && mChangedGeometries.isEmpty() )
14201411
{
@@ -1461,7 +1452,7 @@ QString QgsVectorLayer::subsetString()
14611452
{
14621453
if ( ! mDataProvider )
14631454
{
1464-
QgsLogger::warning( " QgsVectorLayer::subsetString() invoked with null mDataProvider" );
1455+
QgsDebugMsg( "invoked with null mDataProvider" );
14651456
return 0;
14661457
}
14671458
return mDataProvider->subsetString();
@@ -1471,7 +1462,7 @@ bool QgsVectorLayer::setSubsetString( QString subset )
14711462
{
14721463
if ( ! mDataProvider )
14731464
{
1474-
QgsLogger::warning( " QgsVectorLayer::setSubsetString() invoked with null mDataProvider" );
1465+
QgsDebugMsg( "invoked with null mDataProvider" );
14751466
return false;
14761467
}
14771468

@@ -1611,7 +1602,7 @@ bool QgsVectorLayer::nextFeature( QgsFeature &f )
16111602
}
16121603

16131604
if ( !found )
1614-
QgsLogger::warning( QString( "No attributes for the added feature %1 found" ).arg( f.id() ) );
1605+
QgsDebugMsg( QString( "No attributes for the added feature %1 found" ).arg( f.id() ) );
16151606
}
16161607
else
16171608
{
@@ -1712,7 +1703,7 @@ bool QgsVectorLayer::featureAtId( int featureId, QgsFeature& f, bool fetchGeomet
17121703
}
17131704

17141705
if ( !found )
1715-
QgsLogger::warning( QString( "No attributes for the added feature %1 found" ).arg( f.id() ) );
1706+
QgsDebugMsg( QString( "No attributes for the added feature %1 found" ).arg( f.id() ) );
17161707
}
17171708
else
17181709
{
@@ -3379,23 +3370,24 @@ bool QgsVectorLayer::commitChanges()
33793370
//
33803371
if ( mAddedFeatures.size() > 0 )
33813372
{
3382-
for ( QgsFeatureList::iterator iter = mAddedFeatures.begin(); iter != mAddedFeatures.end(); ++iter )
3373+
for ( int i = 0; i < mAddedFeatures.size(); i++ )
33833374
{
3384-
if ( mDeletedFeatureIds.contains( iter->id() ) )
3385-
{
3386-
mDeletedFeatureIds.remove( iter->id() );
3375+
QgsFeature &f = mAddedFeatures[i];
33873376

3388-
if ( mChangedGeometries.contains( iter->id() ) )
3389-
mChangedGeometries.remove( iter->id() );
3377+
if ( mDeletedFeatureIds.contains( f.id() ) )
3378+
{
3379+
mDeletedFeatureIds.remove( f.id() );
33903380

3391-
mAddedFeatures.erase( iter );
3381+
if ( mChangedGeometries.contains( f.id() ) )
3382+
mChangedGeometries.remove( f.id() );
33923383

3384+
mAddedFeatures.removeAt( i-- );
33933385
continue;
33943386
}
33953387

3396-
if ( mChangedGeometries.contains( iter->id() ) )
3388+
if ( mChangedGeometries.contains( f.id() ) )
33973389
{
3398-
iter->setGeometry( mChangedGeometries.take( iter->id() ) );
3390+
f.setGeometry( mChangedGeometries.take( f.id() ) );
33993391
}
34003392
}
34013393

0 commit comments

Comments
 (0)