Added Israleli grid projection
[GPXSee.git] / src / GUI / temperaturegraph.cpp
blobda4fe6c20f14f2831e73efc08aa2fd4c61099adb
1 #include <QLocale>
2 #include "data/data.h"
3 #include "temperaturegraphitem.h"
4 #include "temperaturegraph.h"
7 TemperatureGraph::TemperatureGraph(QWidget *parent) : GraphTab(parent)
9 _showTracks = false;
11 setYUnits(Metric);
12 setYLabel(tr("Temperature"));
14 setSliderPrecision(1);
17 TemperatureGraph::~TemperatureGraph()
19 qDeleteAll(_tracks);
22 void TemperatureGraph::setInfo()
24 if (_showTracks) {
25 QLocale l(QLocale::system());
27 #ifdef Q_OS_ANDROID
28 GraphView::addInfo(tr("Avg"), l.toString(avg() * yScale() + yOffset(),
29 'f', 1) + UNIT_SPACE + yUnits());
30 GraphView::addInfo(tr("Min"), l.toString(min() * yScale() + yOffset(),
31 'f', 1) + UNIT_SPACE + yUnits());
32 GraphView::addInfo(tr("Max"), l.toString(max() * yScale() + yOffset(),
33 'f', 1) + UNIT_SPACE + yUnits());
34 #else // Q_OS_ANDROID
35 GraphView::addInfo(tr("Average"), l.toString(avg() * yScale()
36 + yOffset(), 'f', 1) + UNIT_SPACE + yUnits());
37 GraphView::addInfo(tr("Minimum"), l.toString(min() * yScale()
38 + yOffset(), 'f', 1) + UNIT_SPACE + yUnits());
39 GraphView::addInfo(tr("Maximum"), l.toString(max() * yScale()
40 + yOffset(), 'f', 1) + UNIT_SPACE + yUnits());
41 #endif // Q_OS_ANDROID
42 } else
43 clearInfo();
46 QList<GraphItem*> TemperatureGraph::loadData(const Data &data, Map *map)
48 Q_UNUSED(map);
49 QList<GraphItem*> graphs;
51 for (int i = 0; i < data.tracks().count(); i++) {
52 const Track &track = data.tracks().at(i);
53 const Graph &graph = track.temperature();
55 if (graph.isEmpty()) {
56 _palette.nextColor();
57 graphs.append(0);
58 } else {
59 TemperatureGraphItem *gi = new TemperatureGraphItem(graph,
60 _graphType, _width, _palette.nextColor());
61 gi->setUnits(_units);
63 _tracks.append(gi);
64 if (_showTracks)
65 addGraph(gi);
67 _avg.append(QPointF(track.distance(), gi->avg()));
68 graphs.append(gi);
72 for (int i = 0; i < data.routes().count(); i++) {
73 _palette.nextColor();
74 graphs.append(0);
77 for (int i = 0; i < data.areas().count(); i++)
78 _palette.nextColor();
80 setInfo();
81 redraw();
83 return graphs;
86 qreal TemperatureGraph::avg() const
88 qreal sum = 0, w = 0;
90 for (int i = 0; i < _avg.size(); i++) {
91 const QPointF &p = _avg.at(i);
92 sum += p.y() * p.x();
93 w += p.x();
96 return (sum / w);
99 void TemperatureGraph::clear()
101 qDeleteAll(_tracks);
102 _tracks.clear();
104 _avg.clear();
106 GraphTab::clear();
109 void TemperatureGraph::setYUnits(Units units)
111 if (units == Metric) {
112 GraphView::setYUnits(QChar(0x00B0) + tr("C"));
113 setYScale(1);
114 setYOffset(0);
115 } else {
116 GraphView::setYUnits(QChar(0x00B0) + tr("F"));
117 setYScale(C2FS);
118 setYOffset(C2FO);
122 void TemperatureGraph::setUnits(Units units)
124 setYUnits(units);
125 setInfo();
127 GraphView::setUnits(units);
130 void TemperatureGraph::showTracks(bool show)
132 _showTracks = show;
134 for (int i = 0; i < _tracks.size(); i++) {
135 if (show)
136 addGraph(_tracks.at(i));
137 else
138 removeGraph(_tracks.at(i));
141 setInfo();
143 redraw();