diff --git a/src/app/qgsstatisticalsummarydockwidget.cpp b/src/app/qgsstatisticalsummarydockwidget.cpp index 2cf85a4c9af..6e56967e64c 100644 --- a/src/app/qgsstatisticalsummarydockwidget.cpp +++ b/src/app/qgsstatisticalsummarydockwidget.cpp @@ -14,6 +14,7 @@ ***************************************************************************/ #include "qgsstatisticalsummarydockwidget.h" #include "qgsstatisticalsummary.h" +#include "qgsmaplayerregistry.h" #include #include #include @@ -45,15 +46,15 @@ QgsStatisticalSummaryDockWidget::QgsStatisticalSummaryDockWidget( QWidget *paren mLayerComboBox->setFilters( QgsMapLayerProxyModel::VectorLayer ); mFieldExpressionWidget->setFilters( QgsFieldProxyModel::Numeric ); + + mLayerComboBox->setLayer( mLayerComboBox->layer( 0 ) ); + mFieldExpressionWidget->setLayer( mLayerComboBox->layer( 0 ) ); + connect( mLayerComboBox, SIGNAL( layerChanged( QgsMapLayer* ) ), this, SLOT( layerChanged( QgsMapLayer* ) ) ); connect( mFieldExpressionWidget, SIGNAL( fieldChanged( QString ) ), this, SLOT( refreshStatistics() ) ); connect( mSelectedOnlyCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( refreshStatistics() ) ); connect( mButtonRefresh, SIGNAL( clicked( bool ) ), this, SLOT( refreshStatistics() ) ); - - if ( mLayerComboBox->currentLayer() ) - { - mFieldExpressionWidget->setLayer( mLayerComboBox->currentLayer() ); - } + connect( QgsMapLayerRegistry::instance(), SIGNAL( layersWillBeRemoved( QStringList ) ), this, SLOT( layersRemoved( QStringList ) ) ); QSettings settings; foreach ( QgsStatisticalSummary::Statistic stat, mDisplayStats ) @@ -166,14 +167,14 @@ void QgsStatisticalSummaryDockWidget::layerChanged( QgsMapLayer *layer ) QgsVectorLayer* newLayer = dynamic_cast< QgsVectorLayer* >( layer ); if ( mLayer && mLayer != newLayer ) { - disconnect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( refreshStatistics() ) ); + disconnect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( layerSelectionChanged() ) ); } mLayer = newLayer; if ( mLayer ) { - connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( refreshStatistics() ) ); + connect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( layerSelectionChanged() ) ); } mFieldExpressionWidget->setLayer( mLayer ); @@ -204,3 +205,18 @@ void QgsStatisticalSummaryDockWidget::statActionTriggered( bool checked ) settings.setValue( QString( "/StatisticalSummaryDock/checked_missing_values" ).arg( stat ), checked ); } } + +void QgsStatisticalSummaryDockWidget::layersRemoved( QStringList layers ) +{ + if ( mLayer && layers.contains( mLayer->id() ) ) + { + disconnect( mLayer, SIGNAL( selectionChanged() ), this, SLOT( layerSelectionChanged() ) ); + mLayer = 0; + } +} + +void QgsStatisticalSummaryDockWidget::layerSelectionChanged() +{ + if ( mSelectedOnlyCheckBox->isChecked() ) + refreshStatistics(); +} diff --git a/src/app/qgsstatisticalsummarydockwidget.h b/src/app/qgsstatisticalsummarydockwidget.h index 4772b9b0dbd..41dd62b9be2 100644 --- a/src/app/qgsstatisticalsummarydockwidget.h +++ b/src/app/qgsstatisticalsummarydockwidget.h @@ -48,6 +48,8 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QDockWidget, private U void layerChanged( QgsMapLayer* layer ); void statActionTriggered( bool checked ); + void layersRemoved( QStringList layers ); + void layerSelectionChanged(); private: