@@ -34,7 +34,7 @@ QgsComposerTableWidget::QgsComposerTableWidget( QgsComposerAttributeTable* table
3434 mainLayout->addWidget ( itemPropertiesWidget );
3535
3636 blockAllSignals ( true );
37- mLayerComboBox ->setFilters ( QgsMapLayerProxyModel::HasGeometry );
37+ mLayerComboBox ->setFilters ( QgsMapLayerProxyModel::VectorLayer );
3838 connect ( mLayerComboBox , SIGNAL ( layerChanged ( QgsMapLayer* ) ), this , SLOT ( changeLayer ( QgsMapLayer* ) ) );
3939
4040 refreshMapComboBox ();
@@ -263,7 +263,20 @@ void QgsComposerTableWidget::updateGuiElements()
263263 blockAllSignals ( true );
264264
265265 // 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+ }
267280
268281 // map combo box
269282 const QgsComposerMap* cm = mComposerTable ->composerMap ();
@@ -290,13 +303,17 @@ void QgsComposerTableWidget::updateGuiElements()
290303 mShowGridGroupCheckBox ->setChecked ( false );
291304 }
292305
293- if ( mComposerTable ->displayOnlyVisibleFeatures () )
306+ if ( mComposerTable ->displayOnlyVisibleFeatures () && mShowOnlyVisibleFeaturesCheckBox -> isEnabled () )
294307 {
295308 mShowOnlyVisibleFeaturesCheckBox ->setCheckState ( Qt::Checked );
309+ mComposerMapComboBox ->setEnabled ( true );
310+ mComposerMapLabel ->setEnabled ( true );
296311 }
297312 else
298313 {
299314 mShowOnlyVisibleFeaturesCheckBox ->setCheckState ( Qt::Unchecked );
315+ mComposerMapComboBox ->setEnabled ( false );
316+ mComposerMapLabel ->setEnabled ( false );
300317 }
301318
302319 mFeatureFilterEdit ->setText ( mComposerTable ->featureFilter () );
@@ -339,6 +356,10 @@ void QgsComposerTableWidget::on_mShowOnlyVisibleFeaturesCheckBox_stateChanged( i
339356 mComposerTable ->setDisplayOnlyVisibleFeatures ( showOnlyVisibleFeatures );
340357 mComposerTable ->update ();
341358 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 );
342363}
343364
344365void QgsComposerTableWidget::on_mFeatureFilterCheckBox_stateChanged ( int state )
@@ -408,11 +429,24 @@ void QgsComposerTableWidget::changeLayer( QgsMapLayer *layer )
408429 }
409430
410431 QgsVectorLayer* vl = dynamic_cast <QgsVectorLayer*>( layer );
411- if ( vl )
432+ if ( ! vl )
412433 {
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 );
417451 }
418452}
0 commit comments