aboutsummaryrefslogtreecommitdiffstats
path: root/mobile-widgets/statsmanager.cpp
blob: a49259ff9ef356af8882376a53bb903587a72f20 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// SPDX-License-Identifier: GPL-2.0
#include "statsmanager.h"
#include "stats/chartlistmodel.h"

StatsManager::StatsManager() : view(nullptr), charts(nullptr)
{
	updateUi();
}

StatsManager::~StatsManager()
{
}

void StatsManager::init(StatsView *v, ChartListModel *m)
{
	if (!v)
		fprintf(stderr, "StatsManager::init(): no StatsView - statistics will not work.\n");
	if (!m)
		fprintf(stderr, "StatsManager::init(): no ChartListModel - statistics will not work.\n");
	view = v;
	charts = m;
}

void StatsManager::doit()
{
	updateUi();
}

static void setVariableList(const StatsState::VariableList &list, QStringList &stringList, int &idx)
{
	stringList.clear();
	for (const StatsState::Variable &v: list.variables)
		stringList.push_back(v.name);
	idx = list.selected;
}

static void setBinnerList(const StatsState::BinnerList &list, QStringList &stringList, int &idx)
{
	stringList.clear();
	for (const QString &v: list.binners)
		stringList.push_back(v);
	idx = list.selected;
}

void StatsManager::updateUi()
{
	uiState = state.getUIState();
	setVariableList(uiState.var1, var1List, var1Index);
	setBinnerList(uiState.binners1, binner1List, binner1Index);
	setVariableList(uiState.var2, var2List, var2Index);
	setBinnerList(uiState.binners2, binner2List, binner2Index);
	setVariableList(uiState.operations2, operation2List, operation2Index);
	var1ListChanged();
	binner1ListChanged();
	var2ListChanged();
	binner2ListChanged();
	operation2ListChanged();
	var1IndexChanged();
	binner1IndexChanged();
	var2IndexChanged();
	binner2IndexChanged();
	operation2IndexChanged();

	if (charts)
		charts->update(uiState.charts);
	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();
}

void StatsManager::var2OperationChanged(int idx)
{
	if (uiState.operations2.variables.empty())
		return;
	idx = std::clamp(idx, 0, (int)uiState.operations2.variables.size());
	state.var2OperationChanged(uiState.operations2.variables[idx].id);
	updateUi();
}

void StatsManager::setChart(int idx)
{
	state.chartChanged(idx);
	updateUi();
}