mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
Merge pull request #46650 from Djedouas/sync-stats-panel
Option to synchronize statistics panel with layers panel
This commit is contained in:
commit
e338d8d0e4
@ -79,6 +79,9 @@ QgsStatisticalSummaryDockWidget::QgsStatisticalSummaryDockWidget( QWidget *paren
|
||||
|
||||
mStatisticsMenu = new QMenu( mOptionsToolButton );
|
||||
mOptionsToolButton->setMenu( mStatisticsMenu );
|
||||
mSyncAction = new QAction( tr( "Keep synchronized with TOC" ) );
|
||||
mSyncAction->setCheckable( true );
|
||||
connect( mSyncAction, &QAction::toggled, this, &QgsStatisticalSummaryDockWidget::manageSyncLayer );
|
||||
|
||||
mFieldType = DataType::Numeric;
|
||||
mPreviousFieldType = DataType::Numeric;
|
||||
@ -104,6 +107,7 @@ void QgsStatisticalSummaryDockWidget::fieldChanged()
|
||||
if ( mFieldExpressionWidget->expression() != mExpression )
|
||||
{
|
||||
mExpression = mFieldExpressionWidget->expression();
|
||||
mLastExpression.insert( mLayerComboBox->currentLayer()->id(), mFieldExpressionWidget->currentText() );
|
||||
refreshStatistics();
|
||||
}
|
||||
}
|
||||
@ -136,6 +140,20 @@ void QgsStatisticalSummaryDockWidget::copyStatistics()
|
||||
}
|
||||
}
|
||||
|
||||
void QgsStatisticalSummaryDockWidget::manageSyncLayer( bool checked )
|
||||
{
|
||||
mLayerComboBox->setEnabled( !checked );
|
||||
if ( checked )
|
||||
{
|
||||
connect( QgisApp::instance(), &QgisApp::activeLayerChanged, mLayerComboBox, &QgsMapLayerComboBox::setLayer );
|
||||
mLayerComboBox->setLayer( QgisApp::instance()->activeLayer() );
|
||||
}
|
||||
else
|
||||
{
|
||||
disconnect( QgisApp::instance(), &QgisApp::activeLayerChanged, mLayerComboBox, &QgsMapLayerComboBox::setLayer );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsStatisticalSummaryDockWidget::refreshStatistics()
|
||||
{
|
||||
if ( !mLayer || mFieldExpressionWidget->currentField().isEmpty() || ( mFieldExpressionWidget->isExpression() && !mFieldExpressionWidget->isValidExpression() ) )
|
||||
@ -376,12 +394,12 @@ void QgsStatisticalSummaryDockWidget::layerChanged( QgsMapLayer *layer )
|
||||
|
||||
mLayer = newLayer;
|
||||
|
||||
// clear expression, so that we don't force an unwanted recalculation
|
||||
mFieldExpressionWidget->setExpression( QString() );
|
||||
mFieldExpressionWidget->setLayer( mLayer );
|
||||
|
||||
if ( mLayer )
|
||||
{
|
||||
// Get last expression
|
||||
mFieldExpressionWidget->setExpression( mLastExpression.value( mLayer->id(), QString() ) );
|
||||
connect( mLayer, &QgsVectorLayer::selectionChanged, this, &QgsStatisticalSummaryDockWidget::layerSelectionChanged );
|
||||
}
|
||||
|
||||
@ -439,6 +457,10 @@ void QgsStatisticalSummaryDockWidget::layersRemoved( const QStringList &layers )
|
||||
disconnect( mLayer, &QgsVectorLayer::selectionChanged, this, &QgsStatisticalSummaryDockWidget::layerSelectionChanged );
|
||||
mLayer = nullptr;
|
||||
}
|
||||
for ( QString layerId : layers )
|
||||
{
|
||||
mLastExpression.remove( layerId );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsStatisticalSummaryDockWidget::layerSelectionChanged()
|
||||
@ -582,6 +604,9 @@ void QgsStatisticalSummaryDockWidget::refreshStatisticsMenu()
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mStatisticsMenu->addSeparator();
|
||||
mStatisticsMenu->addAction( mSyncAction );
|
||||
}
|
||||
|
||||
QgsStatisticalSummaryDockWidget::DataType QgsStatisticalSummaryDockWidget::fieldType( const QString &fieldName )
|
||||
|
@ -114,6 +114,8 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QgsDockWidget, private
|
||||
QgsVectorLayer *mLayer = nullptr;
|
||||
|
||||
QMap< int, QAction * > mStatsActions;
|
||||
QMap< QString, QString > mLastExpression;
|
||||
QAction *mSyncAction;
|
||||
|
||||
void updateNumericStatistics();
|
||||
void updateStringStatistics();
|
||||
@ -123,6 +125,7 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QgsDockWidget, private
|
||||
QgsExpressionContext createExpressionContext() const override;
|
||||
|
||||
void refreshStatisticsMenu();
|
||||
void manageSyncLayer( bool checked );
|
||||
DataType fieldType( const QString &fieldName );
|
||||
|
||||
QMenu *mStatisticsMenu = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user