Skip to content

Commit 7ff644e

Browse files
committed
update staistics list depending on the field type (fix #16119, #16118)
1 parent 02e96a2 commit 7ff644e

File tree

2 files changed

+85
-23
lines changed

2 files changed

+85
-23
lines changed

src/app/qgsstatisticalsummarydockwidget.cpp

+80-23
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
#include <QTableWidget>
2424
#include <QAction>
25+
#include <QMenu>
26+
#include <QDebug>
2527

2628
QList< QgsStatisticalSummary::Statistic > QgsStatisticalSummaryDockWidget::sDisplayStats =
2729
QList< QgsStatisticalSummary::Statistic > () << QgsStatisticalSummary::Count
@@ -92,28 +94,9 @@ QgsStatisticalSummaryDockWidget::QgsStatisticalSummaryDockWidget( QWidget *paren
9294
connect( mButtonRefresh, &QAbstractButton::clicked, this, &QgsStatisticalSummaryDockWidget::refreshStatistics );
9395
connect( QgsProject::instance(), static_cast<void ( QgsProject::* )( const QStringList & )>( &QgsProject::layersWillBeRemoved ), this, &QgsStatisticalSummaryDockWidget::layersRemoved );
9496

95-
QgsSettings settings;
96-
Q_FOREACH ( QgsStatisticalSummary::Statistic stat, sDisplayStats )
97-
{
98-
QAction *action = new QAction( QgsStatisticalSummary::displayName( stat ), mOptionsToolButton );
99-
action->setCheckable( true );
100-
bool checked = settings.value( QStringLiteral( "StatisticalSummaryDock/checked_%1" ).arg( stat ), true ).toBool();
101-
action->setChecked( checked );
102-
action->setData( stat );
103-
mStatsActions.insert( stat, action );
104-
connect( action, &QAction::triggered, this, &QgsStatisticalSummaryDockWidget::statActionTriggered );
105-
mOptionsToolButton->addAction( action );
106-
}
107-
108-
//count of null values statistic:
109-
QAction *nullCountAction = new QAction( tr( "Missing (null) values" ), mOptionsToolButton );
110-
nullCountAction->setCheckable( true );
111-
bool checked = settings.value( QStringLiteral( "StatisticalSummaryDock/checked_missing_values" ), true ).toBool();
112-
nullCountAction->setChecked( checked );
113-
nullCountAction->setData( MISSING_VALUES );
114-
mStatsActions.insert( MISSING_VALUES, nullCountAction );
115-
connect( nullCountAction, &QAction::triggered, this, &QgsStatisticalSummaryDockWidget::statActionTriggered );
116-
mOptionsToolButton->addAction( nullCountAction );
97+
mStatisticsMenu = new QMenu( mOptionsToolButton );
98+
mOptionsToolButton->setMenu( mStatisticsMenu );
99+
refreshStatisticsMenu( QVariant::Int );
117100
}
118101

119102
QgsStatisticalSummaryDockWidget::~QgsStatisticalSummaryDockWidget()
@@ -123,6 +106,7 @@ QgsStatisticalSummaryDockWidget::~QgsStatisticalSummaryDockWidget()
123106

124107
void QgsStatisticalSummaryDockWidget::refreshStatistics()
125108
{
109+
qDebug() << "refreshStatistics called...";
126110
if ( !mLayer || ( mFieldExpressionWidget->isExpression() && !mFieldExpressionWidget->isValidExpression() ) )
127111
{
128112
mStatisticsTable->setRowCount( 0 );
@@ -146,10 +130,12 @@ void QgsStatisticalSummaryDockWidget::refreshStatistics()
146130

147131
if ( isNumeric )
148132
{
133+
refreshStatisticsMenu( QVariant::Int );
149134
updateNumericStatistics( selectedOnly );
150135
}
151136
else
152137
{
138+
refreshStatisticsMenu( fieldType );
153139
switch ( fieldType )
154140
{
155141
case QVariant::String:
@@ -277,7 +263,7 @@ void QgsStatisticalSummaryDockWidget::layerChanged( QgsMapLayer *layer )
277263

278264
void QgsStatisticalSummaryDockWidget::statActionTriggered( bool checked )
279265
{
280-
refreshStatistics();
266+
qDebug() << "statActionTriggered called...";
281267
QAction *action = dynamic_cast<QAction *>( sender() );
282268
int stat = action->data().toInt();
283269

@@ -290,6 +276,8 @@ void QgsStatisticalSummaryDockWidget::statActionTriggered( bool checked )
290276
{
291277
settings.setValue( QStringLiteral( "StatisticalSummaryDock/checked_missing_values" ).arg( stat ), checked );
292278
}
279+
280+
refreshStatistics();
293281
}
294282

295283
void QgsStatisticalSummaryDockWidget::layersRemoved( const QStringList &layers )
@@ -358,3 +346,72 @@ void QgsStatisticalSummaryDockWidget::addRow( int row, const QString &name, cons
358346
mStatisticsTable->setItem( row, 1, valueItem );
359347
}
360348

349+
void QgsStatisticalSummaryDockWidget::refreshStatisticsMenu( QVariant::Type fieldType )
350+
{
351+
mStatisticsMenu->clear();
352+
mStatsActions.clear();
353+
354+
QgsSettings settings;
355+
switch ( fieldType )
356+
{
357+
case QVariant::Int:
358+
{
359+
Q_FOREACH ( QgsStatisticalSummary::Statistic stat, sDisplayStats )
360+
{
361+
QAction *action = new QAction( QgsStatisticalSummary::displayName( stat ), mStatisticsMenu );
362+
action->setCheckable( true );
363+
bool checked = settings.value( QStringLiteral( "StatisticalSummaryDock/checked_%1" ).arg( stat ), true ).toBool();
364+
action->setChecked( checked );
365+
action->setData( stat );
366+
mStatsActions.insert( stat, action );
367+
connect( action, &QAction::toggled, this, &QgsStatisticalSummaryDockWidget::statActionTriggered );
368+
mStatisticsMenu->addAction( action );
369+
}
370+
371+
//count of null values statistic
372+
QAction *nullCountAction = new QAction( tr( "Missing (null) values" ), mStatisticsMenu );
373+
nullCountAction->setCheckable( true );
374+
bool checked = settings.value( QStringLiteral( "StatisticalSummaryDock/checked_missing_values" ), true ).toBool();
375+
nullCountAction->setChecked( checked );
376+
nullCountAction->setData( MISSING_VALUES );
377+
mStatsActions.insert( MISSING_VALUES, nullCountAction );
378+
connect( nullCountAction, &QAction::toggled, this, &QgsStatisticalSummaryDockWidget::statActionTriggered );
379+
mStatisticsMenu->addAction( nullCountAction );
380+
381+
break;
382+
}
383+
case QVariant::String:
384+
{
385+
Q_FOREACH ( QgsStringStatisticalSummary::Statistic stat, sDisplayStringStats )
386+
{
387+
QAction *action = new QAction( QgsStringStatisticalSummary::displayName( stat ), mStatisticsMenu );
388+
action->setCheckable( true );
389+
bool checked = settings.value( QStringLiteral( "StatisticalSummaryDock/checked_%1" ).arg( stat ), true ).toBool();
390+
action->setChecked( checked );
391+
action->setData( stat );
392+
mStatsActions.insert( stat, action );
393+
connect( action, &QAction::toggled, this, &QgsStatisticalSummaryDockWidget::statActionTriggered );
394+
mStatisticsMenu->addAction( action );
395+
}
396+
break;
397+
}
398+
case QVariant::Date:
399+
case QVariant::DateTime:
400+
{
401+
Q_FOREACH ( QgsDateTimeStatisticalSummary::Statistic stat, sDisplayDateTimeStats )
402+
{
403+
QAction *action = new QAction( QgsDateTimeStatisticalSummary::displayName( stat ), mStatisticsMenu );
404+
action->setCheckable( true );
405+
bool checked = settings.value( QStringLiteral( "StatisticalSummaryDock/checked_%1" ).arg( stat ), true ).toBool();
406+
action->setChecked( checked );
407+
action->setData( stat );
408+
mStatsActions.insert( stat, action );
409+
connect( action, &QAction::toggled, this, &QgsStatisticalSummaryDockWidget::statActionTriggered );
410+
mStatisticsMenu->addAction( action );
411+
}
412+
break;
413+
}
414+
default:
415+
break;
416+
}
417+
}

src/app/qgsstatisticalsummarydockwidget.h

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "qgsdockwidget.h"
2525
#include "qgis_app.h"
2626

27+
class QMenu;
2728
class QgsBrowserModel;
2829
class QModelIndex;
2930
class QgsDockBrowserTreeView;
@@ -74,6 +75,10 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QgsDockWidget, private
7475
void addRow( int row, const QString &name, const QString &value, bool showValue );
7576

7677
QgsExpressionContext createExpressionContext() const override;
78+
79+
void refreshStatisticsMenu( QVariant::Type fieldType );
80+
81+
QMenu *mStatisticsMenu = nullptr;
7782
};
7883

7984
#endif // QGSSTATISTICALSUMMARYDOCKWIDGET_H

0 commit comments

Comments
 (0)