ValueButton {
id: startDate
- function openDateDialog() {
- var dialog = pageStack.push("Sailfish.Silica.DatePickerDialog", {
- date: value
- })
-
+ property date date: new Date()
+ label: "Date"
+ value: Qt.formatDate(date, 'd MMM yyyy')
+ width: parent.width
+ onClicked: {
+ var dialog = pageStack.push("Sailfish.Silica.DatePickerDialog", { date: value })
dialog.accepted.connect(function() {
- value = dialog.dateText
- selectedDate = dialog.date
+ date = dialog.date
})
}
-
- label: "Date"
- value: Qt.formatDate(new Date(), 'd MMM yyyy')
- width: parent.width
- onClicked: openDateDialog()
+ onDateChanged: {
+ value = Qt.formatDate(date, 'd MMM yyyy')
+ }
}
ValueButton {
}
}
}
+
+ onAccepted: {
+ var start = new Date(startDate.date.getFullYear(), startDate.date.getMonth(), startDate.date.getDate(), startTime.time.getHours(), startTime.time.getMinutes())
+ var duration = (durationTime.duration.getHours() * 24 * 60) + (durationTime.duration.getMinutes() * 60) + (durationTime.duration.getSeconds())
+ var overtook = parseInt(faster.text)
+ var overtakenby = parseInt(slower.text)
+ journeymodel.addJourney(start, duration, overtook, overtakenby)
+ }
}
SilicaListView {
id: listView
- model: 20
+ model: journeymodel
anchors.fill: parent
header: PageHeader {
title: qsTr("Journey list")
Label {
width: columnwidth / 3.0
- text: qsTr("Item") + " " + index
+ text: Qt.formatDate(journeymodel.epochToDate(start), "d MMM yyyy")
color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor
}
Label {
width: columnwidth / 3.0
- text: qsTr("1 May 2018")
+ text: Qt.formatTime(journeymodel.epochToTime(start), "hh:mm")
color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor
}
Label {
width: columnwidth / 3.0
- text: qsTr("20 mins")
+ text: parseInt(duration / (60 * 60)) + ":" + (parseInt(duration / 60) % 60)
color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor
}
}
#ifdef QT_QML_DEBUG
#include <QtQuick>
+#include <QDebug>
#endif
#include <sailfishapp.h>
+#include "journey.h"
+#include "journeymodel.h"
+
int main(int argc, char *argv[])
{
// SailfishApp::main() will display "qml/harbour-pedalo.qml", if you need more
//
// To display the view, call "show()" (will show fullscreen on device).
- return SailfishApp::main(argc, argv);
+ QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
+
+ JourneyModel journeys;
+
+ QFile file;
+ file.setFileName(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/journeys.csv");
+ journeys.importFromFile(file);
+
+ QScopedPointer<QQuickView> view(SailfishApp::createView());
+ view->setSource(SailfishApp::pathTo("qml/harbour-pedalo.qml"));
+
+ QQmlContext *ctxt = view->rootContext();
+ ctxt->setContextProperty("journeymodel", &journeys);
+
+ view->show();
+ int result = app->exec();
+
+ // Write out the journey data
+ QDir dir;
+ dir.mkpath(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation));
+ file.setFileName(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/journeys.csv");
+ qDebug() << "File saved as: " << file.fileName();
+ journeys.exportToFile(file);
+
+ return result;
}
return start;
}
+QDate Journey::getStartDate() const {
+ QDateTime date;
+
+ date.setMSecsSinceEpoch(start);
+ return date.date();
+}
+
+QTime Journey::getStartTime() const {
+ QDateTime time;
+
+ time.setMSecsSinceEpoch(start);
+ return time.time();
+}
+
+QTime Journey::getEndTime() const {
+ QDateTime time;
+
+ time.setMSecsSinceEpoch(start);
+ time.addSecs(duration);
+
+ return time.time();
+}
+
qint32 Journey::getDuration () const {
return duration;
}
start = value;
}
+void Journey::setStartDate (const QDate &value) {
+ QDateTime time;
+
+ time.setMSecsSinceEpoch(start);
+ time.setDate(value);
+}
+
+void Journey::setStartTime (const QTime &value) {
+ QDateTime time;
+
+ time.setMSecsSinceEpoch(start);
+ time.setTime(value);
+}
+
+void Journey::setEndTime(const QTime &value) {
+ qint64 difference;
+ QDateTime starttime;
+ QDateTime endtime;
+
+ starttime.setMSecsSinceEpoch(start);
+ endtime = QDateTime(starttime);
+ endtime.setTime(value);
+ difference = starttime.secsTo(endtime);
+ if (difference < 0) {
+ difference %= 24 * 60 * 60;
+ }
+ duration = difference;
+}
+
void Journey::setDuration (qint32 value) {
duration = value;
}
#include <QObject>
#include <QTime>
+#include <QDate>
class Journey
{
Journey(quint64 start, quint32 duration, quint32 overtook, quint32 overtakenby);
quint64 getStart () const;
+ QDate getStartDate() const;
+ QTime getStartTime() const;
+ QTime getEndTime() const;
qint32 getDuration () const;
qint32 getOvertook () const;
qint32 getOvertakenBy () const;
void setStart (const quint64 value);
+ void setStartDate (const QDate &value);
+ void setStartTime (const QTime &value);
+ void setEndTime(const QTime &value);
void setDuration (qint32 value);
void setOvertook (qint32 value);
void setOvertakenBy (qint32 value);
quint32 overtakenby;
};
-
#endif // JOURNEY_H
endInsertRows();
}
+void JourneyModel::addJourney(QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby) {
+ addJourney(Journey(start.currentMSecsSinceEpoch(), duration, overtook, overtakenby));
+}
+
int JourneyModel::rowCount(const QModelIndex & parent) const {
Q_UNUSED(parent)
return journeys.count();
}
file.close();
}
+ else {
+ qDebug() << "File failed to export";
+ }
}
void JourneyModel::importFromFile(QFile & file) {
}
+QDate JourneyModel::epochToDate(quint64 epoch) {
+ QDateTime date;
+
+ date.setMSecsSinceEpoch(epoch);
+ return date.date();
+}
+
+QTime JourneyModel::epochToTime(quint64 epoch) {
+ QDateTime date;
+
+ date.setMSecsSinceEpoch(epoch);
+ return date.time();
+}
JourneyModel(QObject *parent = 0);
void addJourney(const Journey &journey);
+ Q_INVOKABLE void addJourney(QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby);
int rowCount(const QModelIndex & parent = QModelIndex()) const;
void exportToFile(QFile & file);
void importFromFile(QFile & file);
+ Q_INVOKABLE static QDate epochToDate(quint64 epoch);
+ Q_INVOKABLE static QTime epochToTime(quint64 epoch);
signals:
// General signals
void journeysChanged();
</context>
<context>
<name>AddJourney</name>
- <message>
- <source>Add journey</source>
- <translation type="unfinished"></translation>
- </message>
<message>
<source>Start time</source>
<translation type="unfinished"></translation>
</context>
<context>
<name>JourneyList</name>
- <message>
- <source>Item</source>
- <translation type="unfinished">Element</translation>
- </message>
<message>
<source>Journey list</source>
<translation type="unfinished"></translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Time spent cycling</source>
+ <source>Journeys:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Average journey duration</source>
+ <source>Time spent cycling:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Speed percentile</source>
+ <source>Average journey duration:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Journeys:</source>
+ <source>Speed percentile:</source>
<translation type="unfinished"></translation>
</message>
</context>
</context>
<context>
<name>AddJourney</name>
- <message>
- <source>Add journey</source>
- <translation type="unfinished"></translation>
- </message>
<message>
<source>Start time</source>
<translation type="unfinished"></translation>
</context>
<context>
<name>JourneyList</name>
- <message>
- <source>Item</source>
- <translation type="unfinished"></translation>
- </message>
<message>
<source>Journey list</source>
<translation type="unfinished"></translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Time spent cycling</source>
+ <source>Journeys:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Average journey duration</source>
+ <source>Time spent cycling:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Speed percentile</source>
+ <source>Average journey duration:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Journeys:</source>
+ <source>Speed percentile:</source>
<translation type="unfinished"></translation>
</message>
</context>