@@ -285,42 +285,44 @@ void QgsAttributeTableModel::loadLayer()
285
285
}
286
286
else
287
287
{
288
+ bool filter = false ;
288
289
QgsRectangle rect;
290
+ QgsAttributeList attributeList;
291
+ QgsRenderContext renderContext;
292
+ QgsFeatureRendererV2* renderer = mLayer ->rendererV2 ();
289
293
if ( behaviour == 2 )
290
294
{
291
295
// current canvas only
292
296
rect = mCurrentExtent ;
293
- }
294
297
295
- QgsFeatureRendererV2* renderer = mLayer ->rendererV2 ();
296
- if ( !renderer )
297
- {
298
- QgsDebugMsg ( " Cannot get renderer" );
299
- }
300
- else if ( mLayer ->hasScaleBasedVisibility () &&
301
- ( mLayer ->minimumScale () > mCanvas ->mapRenderer ()->scale () ||
302
- mLayer ->maximumScale () <= mCanvas ->mapRenderer ()->scale () ) )
303
- {
304
- QgsDebugMsg ( " Out of scale limits" );
305
- }
306
- else
307
- {
308
- QgsRenderContext renderContext;
309
- if ( renderer->capabilities () & QgsFeatureRendererV2::ScaleDependent )
298
+ if ( !renderer )
310
299
{
311
- // setup scale
312
- // mapRenderer()->renderContext()->scale is not automaticaly updated when
313
- // render extent changes (because it's scale is used to identify if changed
314
- // since last render) -> use local context
315
- renderContext.setExtent ( mCanvas ->mapRenderer ()->rendererContext ()->extent () );
316
- renderContext.setMapToPixel ( mCanvas ->mapRenderer ()->rendererContext ()->mapToPixel () );
317
- renderContext.setRendererScale ( mCanvas ->mapRenderer ()->scale () );
318
- renderer->startRender ( renderContext, mLayer );
300
+ QgsDebugMsg ( " Cannot get renderer" );
319
301
}
320
302
321
- bool filter = renderer->capabilities () & QgsFeatureRendererV2::Filter;
303
+ if ( mLayer ->hasScaleBasedVisibility () &&
304
+ ( mLayer ->minimumScale () > mCanvas ->mapRenderer ()->scale () ||
305
+ mLayer ->maximumScale () <= mCanvas ->mapRenderer ()->scale () ) )
306
+ {
307
+ QgsDebugMsg ( " Out of scale limits" );
308
+ }
309
+ else
310
+ {
311
+ if ( renderer && renderer->capabilities () & QgsFeatureRendererV2::ScaleDependent )
312
+ {
313
+ // setup scale
314
+ // mapRenderer()->renderContext()->scale is not automaticaly updated when
315
+ // render extent changes (because it's scale is used to identify if changed
316
+ // since last render) -> use local context
317
+ renderContext.setExtent ( mCanvas ->mapRenderer ()->rendererContext ()->extent () );
318
+ renderContext.setMapToPixel ( mCanvas ->mapRenderer ()->rendererContext ()->mapToPixel () );
319
+ renderContext.setRendererScale ( mCanvas ->mapRenderer ()->scale () );
320
+ renderer->startRender ( renderContext, mLayer );
321
+ }
322
+
323
+ filter = renderer && renderer->capabilities () & QgsFeatureRendererV2::Filter;
324
+ }
322
325
323
- QgsAttributeList attributeList = QgsAttributeList ();
324
326
if ( filter )
325
327
{
326
328
QList<QString> attributeNameList = renderer->usedAttributes ();
@@ -329,31 +331,34 @@ void QgsAttributeTableModel::loadLayer()
329
331
attributeList.append ( mLayer ->fieldNameIndex ( attributeName ) );
330
332
}
331
333
}
332
- mLayer ->select ( attributeList, rect, false );
333
-
334
- QgsFeature f;
335
- for ( i = 0 ; mLayer ->nextFeature ( f ); ++i )
336
- {
337
- if ( !filter || renderer->willRenderFeature ( f ) )
338
- {
339
- featureAdded ( f.id () );
340
- }
334
+ }
341
335
342
- if ( t.elapsed () > 5000 )
343
- {
344
- bool cancel = false ;
345
- emit progress ( i, cancel );
346
- if ( cancel )
347
- break ;
336
+ mLayer ->select ( attributeList, rect, false );
348
337
349
- t.restart ();
350
- }
338
+ QgsFeature f;
339
+ for ( i = 0 ; mLayer ->nextFeature ( f ); ++i )
340
+ {
341
+ if ( !filter || renderer->willRenderFeature ( f ) )
342
+ {
343
+ featureAdded ( f.id () );
351
344
}
352
- if ( renderer->capabilities () & QgsFeatureRendererV2::ScaleDependent )
345
+
346
+ if ( t.elapsed () > 5000 )
353
347
{
354
- renderer->stopRender ( renderContext );
348
+ bool cancel = false ;
349
+ emit progress ( i, cancel );
350
+ if ( cancel )
351
+ break ;
352
+
353
+ t.restart ();
355
354
}
356
355
}
356
+
357
+ if ( renderer && renderer->capabilities () & QgsFeatureRendererV2::ScaleDependent )
358
+ {
359
+ renderer->stopRender ( renderContext );
360
+ }
361
+
357
362
emit finished ();
358
363
}
359
364
0 commit comments