Skip to content

Commit 31c3b0d

Browse files
committedApr 14, 2014
[composer] Allow choice of non-geometry vector layers for attribute table, but disable controls which have no meaning for geometryless tables (fix #9944)
1 parent 85b6b0b commit 31c3b0d

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed
 

‎src/app/composer/qgscomposertablewidget.cpp

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

344365
void 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

Comments
 (0)
Please sign in to comment.