1 #include <QLocale>
2 #include "data/data.h"
3 #include "heartrategraphitem.h"
4 #include "heartrategraph.h"
5
6
HeartRateGraph(QWidget * parent)7 HeartRateGraph::HeartRateGraph(QWidget *parent) : GraphTab(parent)
8 {
9 _showTracks = true;
10
11 GraphView::setYUnits(tr("bpm"));
12 setYLabel(tr("Heart rate"));
13
14 setSliderPrecision(0);
15 }
16
~HeartRateGraph()17 HeartRateGraph::~HeartRateGraph()
18 {
19 qDeleteAll(_tracks);
20 }
21
setInfo()22 void HeartRateGraph::setInfo()
23 {
24 if (_showTracks) {
25 QLocale l(QLocale::system());
26
27 GraphView::addInfo(tr("Average"), l.toString(avg() * yScale(), 'f',
28 0) + UNIT_SPACE + yUnits());
29 GraphView::addInfo(tr("Maximum"), l.toString(max() * yScale(), 'f',
30 0) + UNIT_SPACE + yUnits());
31 } else
32 clearInfo();
33 }
34
loadData(const Data & data)35 QList<GraphItem*> HeartRateGraph::loadData(const Data &data)
36 {
37 QList<GraphItem*> graphs;
38
39 for (int i = 0; i < data.tracks().count(); i++) {
40 const Track &track = data.tracks().at(i);
41 const Graph &graph = track.heartRate();
42
43 if (!graph.isValid()) {
44 _palette.nextColor();
45 graphs.append(0);
46 } else {
47 HeartRateGraphItem *gi = new HeartRateGraphItem(graph, _graphType,
48 _width, _palette.nextColor());
49
50 _tracks.append(gi);
51 if (_showTracks)
52 addGraph(gi);
53
54 _avg.append(QPointF(track.distance(), gi->avg()));
55 graphs.append(gi);
56 }
57 }
58
59 for (int i = 0; i < data.routes().count(); i++) {
60 _palette.nextColor();
61 graphs.append(0);
62 }
63
64 for (int i = 0; i < data.areas().count(); i++)
65 _palette.nextColor();
66
67 setInfo();
68 redraw();
69
70 return graphs;
71 }
72
avg() const73 qreal HeartRateGraph::avg() const
74 {
75 qreal sum = 0, w = 0;
76
77 for (int i = 0; i < _avg.size(); i++) {
78 const QPointF &p = _avg.at(i);
79 sum += p.y() * p.x();
80 w += p.x();
81 }
82
83 return (sum / w);
84 }
85
clear()86 void HeartRateGraph::clear()
87 {
88 qDeleteAll(_tracks);
89 _tracks.clear();
90
91 _avg.clear();
92
93 GraphTab::clear();
94 }
95
showTracks(bool show)96 void HeartRateGraph::showTracks(bool show)
97 {
98 _showTracks = show;
99
100 for (int i = 0; i < _tracks.size(); i++) {
101 if (show)
102 addGraph(_tracks.at(i));
103 else
104 removeGraph(_tracks.at(i));
105 }
106
107 setInfo();
108
109 redraw();
110 }
111