List journeys in descending order of time
[harbour-pedalo.git] / src / journeymodel.cpp
index 7286c6d..2919d83 100644 (file)
@@ -14,13 +14,35 @@ QHash<int, QByteArray> JourneyModel::roleNames() const {
 
 void JourneyModel::addJourney(const Journey &journey)
 {
-    beginInsertRows(QModelIndex(), rowCount(), rowCount());
-    journeys << journey;
+    // Find position to add it
+    QList<Journey>::const_iterator it = journeys.constBegin();
+
+    unsigned int position = 0;
+    while ((it != journeys.constEnd()) && (journey.getStart() < (*it).getStart())) {
+        position++;
+        it++;
+    }
+
+    beginInsertRows(QModelIndex(), position, position);
+    journeys.insert(position, journey);
     endInsertRows();
 }
 
 void JourneyModel::addJourney(QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby) {
-    addJourney(Journey(start.currentMSecsSinceEpoch(), duration, overtook, overtakenby));
+    quint64 startepoch = start.toMSecsSinceEpoch();
+    addJourney(Journey(startepoch, duration, overtook, overtakenby));
+}
+
+void JourneyModel::editJourney(quint32 index, QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby) {
+    quint64 startepoch = start.toMSecsSinceEpoch();
+    journeys.replace(index, Journey(startepoch, duration, overtook, overtakenby));
+    emit dataChanged(createIndex(index, 0), createIndex(index, 0));
+}
+
+void JourneyModel::deleteJourney(quint32 index) {
+    beginRemoveRows(QModelIndex(), index, index);
+    journeys.removeAt(index);
+    endRemoveRows();
 }
 
 int JourneyModel::rowCount(const QModelIndex & parent) const {
@@ -102,3 +124,36 @@ QTime JourneyModel::epochToTime(quint64 epoch) {
     date.setMSecsSinceEpoch(epoch);
     return date.time();
 }
+
+QDateTime JourneyModel::epochToDateTime(quint64 epoch) {
+    QDateTime date;
+
+    date.setMSecsSinceEpoch(epoch);
+    return date;
+}
+
+QList<Journey> const & JourneyModel::getData() const {
+    return journeys;
+}
+
+void JourneyModel::sort(int column, Qt::SortOrder order) {
+    switch (column) {
+    case JourneyRoles::StartRole:
+        switch (order) {
+        case Qt::SortOrder::AscendingOrder:
+            std::sort(journeys.begin(), journeys.end(), JourneyTimeAscending());
+            break;
+        case Qt::SortOrder::DescendingOrder:
+            std::sort(journeys.begin(), journeys.end(), JourneyTimeDescending());
+            break;
+        default:
+            // Do nothing
+            break;
+        }
+        break;
+    default:
+        // Do nothing
+        break;
+    }
+}
+