270d43679ac19dc2f9d60017b98690bbd7182130
[harbour-pedalo.git] / src / statshourjourneys.cpp
1 #include <QDebug>
2
3 #include "statshourjourneys.h"
4
5 #define LOWESTHOUR (7)
6 #define HIGHESTHOUR (21)
7
8 StatsHourJourneys::StatsHourJourneys(JourneyModel * journeys) :
9 journeys(journeys)
10 {
11 title = "Journey proportions per hour (%)";
12 units = "%";
13
14 labels.clear();
15 for (int hour = LOWESTHOUR; hour <= HIGHESTHOUR; hour++) {
16 labels << QString::number(hour);
17 }
18 }
19
20 void StatsHourJourneys::update() {
21 unsigned int minsperhour[24];
22 quint64 totalmins;
23 int pos;
24
25 qDebug() << "Calculating values";
26 barvalues.clear();
27
28 for (pos = 0; pos < 24; pos++) {
29 minsperhour[pos] = 0u;
30 }
31
32 totalmins = 0u;
33 foreach (Journey const &journey, journeys->getData()) {
34 QTime time = journey.getStartTime();
35 int hour = time.hour();
36 int startmin = time.minute();
37 int remaining = (journey.getDuration() / 60);
38 totalmins += remaining;
39
40 while (remaining > 0) {
41 // toadd is always greater than 0, so the loop is guaranteed to exit
42 unsigned int toadd = (startmin + remaining) < 60 ? remaining : 60 - startmin;
43 minsperhour[hour] += toadd;
44 remaining -= toadd;
45 startmin = 0;
46
47 hour = (hour + 1) % 24;
48 }
49 }
50
51 for (pos = LOWESTHOUR; pos <= HIGHESTHOUR; pos++) {
52 float result = 0.0f;
53 if (totalmins > 0) {
54 result = ((double)minsperhour[pos] / (double)totalmins);
55 }
56 barvalues << result;
57 }
58
59 qDebug() << "Calculated values";
60 }