@@ -34,7 +34,7 @@ QgsComposerTableWidget::QgsComposerTableWidget( QgsComposerAttributeTable* table
34
34
mainLayout->addWidget ( itemPropertiesWidget );
35
35
36
36
blockAllSignals ( true );
37
- mLayerComboBox ->setFilters ( QgsMapLayerProxyModel::HasGeometry );
37
+ mLayerComboBox ->setFilters ( QgsMapLayerProxyModel::VectorLayer );
38
38
connect ( mLayerComboBox , SIGNAL ( layerChanged ( QgsMapLayer* ) ), this , SLOT ( changeLayer ( QgsMapLayer* ) ) );
39
39
40
40
refreshMapComboBox ();
@@ -263,7 +263,20 @@ void QgsComposerTableWidget::updateGuiElements()
263
263
blockAllSignals ( true );
264
264
265
265
// layer combo box
266
- mLayerComboBox ->setLayer ( mComposerTable ->vectorLayer () );
266
+ if ( mComposerTable ->vectorLayer () )
267
+ {
268
+ mLayerComboBox ->setLayer ( mComposerTable ->vectorLayer () );
269
+ if ( mComposerTable ->vectorLayer ()->geometryType () == QGis::NoGeometry )
270
+ {
271
+ // layer has no geometry, so uncheck & disable controls which require geometry
272
+ mShowOnlyVisibleFeaturesCheckBox ->setChecked ( false );
273
+ mShowOnlyVisibleFeaturesCheckBox ->setEnabled ( false );
274
+ }
275
+ else
276
+ {
277
+ mShowOnlyVisibleFeaturesCheckBox ->setEnabled ( true );
278
+ }
279
+ }
267
280
268
281
// map combo box
269
282
const QgsComposerMap* cm = mComposerTable ->composerMap ();
@@ -290,13 +303,17 @@ void QgsComposerTableWidget::updateGuiElements()
290
303
mShowGridGroupCheckBox ->setChecked ( false );
291
304
}
292
305
293
- if ( mComposerTable ->displayOnlyVisibleFeatures () )
306
+ if ( mComposerTable ->displayOnlyVisibleFeatures () && mShowOnlyVisibleFeaturesCheckBox -> isEnabled () )
294
307
{
295
308
mShowOnlyVisibleFeaturesCheckBox ->setCheckState ( Qt::Checked );
309
+ mComposerMapComboBox ->setEnabled ( true );
310
+ mComposerMapLabel ->setEnabled ( true );
296
311
}
297
312
else
298
313
{
299
314
mShowOnlyVisibleFeaturesCheckBox ->setCheckState ( Qt::Unchecked );
315
+ mComposerMapComboBox ->setEnabled ( false );
316
+ mComposerMapLabel ->setEnabled ( false );
300
317
}
301
318
302
319
mFeatureFilterEdit ->setText ( mComposerTable ->featureFilter () );
@@ -339,6 +356,10 @@ void QgsComposerTableWidget::on_mShowOnlyVisibleFeaturesCheckBox_stateChanged( i
339
356
mComposerTable ->setDisplayOnlyVisibleFeatures ( showOnlyVisibleFeatures );
340
357
mComposerTable ->update ();
341
358
mComposerTable ->endCommand ();
359
+
360
+ // enable/disable map combobox based on state of checkbox
361
+ mComposerMapComboBox ->setEnabled ( state == Qt::Checked );
362
+ mComposerMapLabel ->setEnabled ( state == Qt::Checked );
342
363
}
343
364
344
365
void QgsComposerTableWidget::on_mFeatureFilterCheckBox_stateChanged ( int state )
@@ -408,11 +429,24 @@ void QgsComposerTableWidget::changeLayer( QgsMapLayer *layer )
408
429
}
409
430
410
431
QgsVectorLayer* vl = dynamic_cast <QgsVectorLayer*>( layer );
411
- if ( vl )
432
+ if ( ! vl )
412
433
{
413
- mComposerTable ->beginCommand ( tr ( " Table layer changed" ) );
414
- mComposerTable ->setVectorLayer ( vl );
415
- mComposerTable ->update ();
416
- mComposerTable ->endCommand ();
434
+ return ;
435
+ }
436
+
437
+ mComposerTable ->beginCommand ( tr ( " Table layer changed" ) );
438
+ mComposerTable ->setVectorLayer ( vl );
439
+ mComposerTable ->update ();
440
+ mComposerTable ->endCommand ();
441
+
442
+ if ( vl->geometryType () == QGis::NoGeometry )
443
+ {
444
+ // layer has no geometry, so uncheck & disable controls which require geometry
445
+ mShowOnlyVisibleFeaturesCheckBox ->setChecked ( false );
446
+ mShowOnlyVisibleFeaturesCheckBox ->setEnabled ( false );
447
+ }
448
+ else
449
+ {
450
+ mShowOnlyVisibleFeaturesCheckBox ->setEnabled ( true );
417
451
}
418
452
}
0 commit comments