Add journey model and list
[harbour-pedalo.git] / src / journeymodel.cpp
1 #include "journeymodel.h"
2 #include <QDebug>
3
4 JourneyModel::JourneyModel(QObject *parent) : QAbstractListModel(parent) {
5 roles[StartRole] = "start";
6 roles[DurationRole] = "duration";
7 roles[OvertookRole] = "overtook";
8 roles[OvertakenByRole] = "overtakenby";
9 }
10
11 QHash<int, QByteArray> JourneyModel::roleNames() const {
12 return roles;
13 }
14
15 void JourneyModel::addJourney(const Journey &journey)
16 {
17 beginInsertRows(QModelIndex(), rowCount(), rowCount());
18 journeys << journey;
19 endInsertRows();
20 }
21
22 void JourneyModel::addJourney(QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby) {
23 addJourney(Journey(start.currentMSecsSinceEpoch(), duration, overtook, overtakenby));
24 }
25
26 int JourneyModel::rowCount(const QModelIndex & parent) const {
27 Q_UNUSED(parent)
28 return journeys.count();
29 }
30
31 QVariant JourneyModel::data(const QModelIndex & index, int role) const {
32 if (index.row() < 0 || index.row() > journeys.count())
33 return QVariant();
34
35 const Journey &journey = journeys[index.row()];
36 if (role == StartRole)
37 return journey.getStart();
38 else if (role == DurationRole)
39 return journey.getDuration();
40 else if (role == OvertookRole)
41 return journey.getOvertook();
42 else if (role == OvertakenByRole)
43 return journey.getOvertakenBy();
44 return QVariant();
45 }
46
47 void JourneyModel::clear() {
48 journeys.clear();
49 }
50
51 void JourneyModel::exportToFile(QFile & file) {
52 if (file.open(QIODevice::WriteOnly)) {
53 QTextStream out(&file);
54 for (QList<Journey>::iterator journeyIter = journeys.begin(); journeyIter != journeys.end(); journeyIter++) {
55 out << journeyIter->getStart() << ",";
56 out << journeyIter->getDuration() << ",";
57 out << journeyIter->getOvertook() << ",";
58 out << journeyIter->getOvertakenBy() << endl;
59 }
60 file.close();
61 }
62 else {
63 qDebug() << "File failed to export";
64 }
65 }
66
67 void JourneyModel::importFromFile(QFile & file) {
68 if (file.open(QIODevice::ReadOnly)) {
69 QTextStream in(&file);
70 while (!in.atEnd()) {
71 QStringList data;
72 quint64 start;
73 qint32 duration = 0;
74 qint32 overtook = 0;
75 qint32 overtakenby = 0;
76
77 data = in.readLine().split(",");
78 if (data.length() == 4) {
79 start = data[0].toLongLong();
80 duration = data[1].toLongLong();
81 overtook = data[2].toLongLong();
82 overtakenby = data[3].toLongLong();
83
84 addJourney(Journey(start, duration, overtook, overtakenby));
85 }
86 }
87 file.close();
88 }
89 }
90
91
92 QDate JourneyModel::epochToDate(quint64 epoch) {
93 QDateTime date;
94
95 date.setMSecsSinceEpoch(epoch);
96 return date.date();
97 }
98
99 QTime JourneyModel::epochToTime(quint64 epoch) {
100 QDateTime date;
101
102 date.setMSecsSinceEpoch(epoch);
103 return date.time();
104 }