subsurface/mobile-widgets/statsmanager.cpp
Dirk Hohndel eb2b0f0a3e mobile/statistics: add a statistics page on mobile
This adds a reasonably flexibile mobile page that tries to do the right
thing for both portrait and landscape mode. In order to get the most out
of a mobile screen, it's implemented in a way that always gives it the
full screen (it does so by emptying out the page stack and being the
only page shown - brutal, but effective).

This commit also contains a bunch of other random cleanups that didn't
really justify being in separate commits.

Parts of this was written by Berthold, hence the double SOB.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2021-01-10 15:16:52 -08:00

89 lines
1.8 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#include "statsmanager.h"
StatsManager::StatsManager() : view(nullptr)
{
// Test: show some random data. Let's see what happens.
state.var1Changed(2);
state.var2Changed(3);
state.binner2Changed(2);
updateUi();
}
StatsManager::~StatsManager()
{
}
void StatsManager::init(StatsView *v, QObject *o)
{
if (!v)
fprintf(stderr, "StatsManager::init(): no StatsView - statistics will not work.\n");
view = v;
}
void StatsManager::doit()
{
if (!view)
return;
view->plot(state);
}
static void setVariableList(const StatsState::VariableList &list, QStringList &stringList)
{
stringList.clear();
for (const StatsState::Variable &v: list.variables)
stringList.push_back(v.name);
}
static void setBinnerList(const StatsState::BinnerList &list, QStringList &stringList)
{
stringList.clear();
for (const QString &v: list.binners)
stringList.push_back(v);
}
void StatsManager::updateUi()
{
uiState = state.getUIState();
setVariableList(uiState.var1, var1List);
setBinnerList(uiState.binners1, binner1List);
setVariableList(uiState.var2, var2List);
setBinnerList(uiState.binners2, binner2List);
var1ListChanged();
binner1ListChanged();
var2ListChanged();
binner2ListChanged();
if (view)
view->plot(state);
}
void StatsManager::var1Changed(int idx)
{
if (uiState.var1.variables.empty())
return;
idx = std::clamp(idx, 0, (int)uiState.var1.variables.size());
state.var1Changed(uiState.var1.variables[idx].id);
updateUi();
}
void StatsManager::var1BinnerChanged(int idx)
{
state.binner1Changed(idx);
updateUi();
}
void StatsManager::var2Changed(int idx)
{
if (uiState.var2.variables.empty())
return;
idx = std::clamp(idx, 0, (int)uiState.var2.variables.size());
state.var2Changed(uiState.var2.variables[idx].id);
updateUi();
}
void StatsManager::var2BinnerChanged(int idx)
{
state.binner2Changed(idx);
updateUi();
}