aboutsummaryrefslogtreecommitdiffstats
path: root/desktop-widgets/statswidget.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2021-01-03 00:31:55 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2021-01-03 13:41:15 -0800
commit7b0455b4d8af2d8a917810cc467376a6d7653a23 (patch)
treeedb3e764d5e7fcddcd2217111325aa7366d8d3aa /desktop-widgets/statswidget.cpp
parent106f7a8e0ed43a775bec5fa96f6e072c47653850 (diff)
downloadsubsurface-7b0455b4d8af2d8a917810cc467376a6d7653a23.tar.gz
statistics: reverse chart selection logic
The old ways was to select the chart first, then depending on the chart choose the binning. Willem says that it should work the other way round: select the binning (or operation) and make the charts depend on that. I'm not arguing one way or the other, just note that the new way is much more tricky, because it is easy to get unsupported combinations. For example, there is no chart where the first variable is unbinned, but the second axis is binned or has an operation. This makes things distinctly more tricky and this code still needs a thorough audit. Since this is all more tricky, implement a "invalid" chart state. Ideally that should be never shown to the user, but let's try to be defensive. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/statswidget.cpp')
-rw-r--r--desktop-widgets/statswidget.cpp34
1 files changed, 6 insertions, 28 deletions
diff --git a/desktop-widgets/statswidget.cpp b/desktop-widgets/statswidget.cpp
index 874a6db15..01fd16eb1 100644
--- a/desktop-widgets/statswidget.cpp
+++ b/desktop-widgets/statswidget.cpp
@@ -89,45 +89,23 @@ StatsWidget::StatsWidget(QWidget *parent) : QWidget(parent)
static void setVariableList(QComboBox *combo, const StatsState::VariableList &list)
{
combo->clear();
+ combo->setEnabled(!list.variables.empty());
for (const StatsState::Variable &v: list.variables)
combo->addItem(v.name, QVariant(v.id));
combo->setCurrentIndex(list.selected);
}
// Initialize QComboBox and QLabel of binners. Hide if there are no binners.
-static void setBinList(QLabel *label, QComboBox *combo, const QString &varName, const StatsState::BinnerList &list)
+static void setBinList(QLabel *label, QComboBox *combo, const StatsState::BinnerList &list)
{
combo->clear();
- if (list.binners.empty()) {
- label->hide();
- combo->hide();
- return;
- }
-
- label->show();
- combo->show();
+ combo->setEnabled(!list.binners.empty());
for (const QString &s: list.binners)
combo->addItem(s);
combo->setCurrentIndex(list.selected);
}
-// Initialize QComboBox and QLabel of operations. Hide if there are no operations.
-static void setOperationList(QLabel *label, QComboBox *combo, const QString &varName, const StatsState::VariableList &list)
-{
- combo->clear();
- if (list.variables.empty()) {
- label->hide();
- combo->hide();
- return;
- }
-
- label->show();
- combo->show();
-
- setVariableList(combo, list);
-}
-
void StatsWidget::updateUi()
{
StatsState::UIState uiState = state.getUIState();
@@ -136,9 +114,9 @@ void StatsWidget::updateUi()
int pos = charts.update(uiState.charts);
ui.chartType->setCurrentIndex(pos);
ui.chartType->setItemDelegate(new ChartItemDelegate);
- setBinList(ui.var1BinnerLabel, ui.var1Binner, uiState.var1Name, uiState.binners1);
- setBinList(ui.var2BinnerLabel, ui.var2Binner, uiState.var2Name, uiState.binners2);
- setOperationList(ui.var2OperationLabel, ui.var2Operation, uiState.var2Name, uiState.operations2);
+ setBinList(ui.var1BinnerLabel, ui.var1Binner, uiState.binners1);
+ setBinList(ui.var2BinnerLabel, ui.var2Binner, uiState.binners2);
+ setVariableList(ui.var2Operation, uiState.operations2);
// Add checkboxes for additional features
features.clear();