From a8192d863daebdedd825a8820a2c09b53e182f4b Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Wed, 24 Dec 2014 19:05:52 +0000 Subject: [PATCH] RideCacheModel Part 2 of 3 .. add/remove ride now works .. fixed metric value in data() .. need to test (especially with the diary window and new athlete with zero rides and then import, add, delete, change, sort merge, split etc and push update to fix such bugs in Part 3 --- src/RideCacheModel.cpp | 25 +++++++++++++++++++++++-- src/RideCacheModel.h | 1 + src/RideItem.h | 2 ++ src/RideMetadata.cpp | 6 ++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/RideCacheModel.cpp b/src/RideCacheModel.cpp index 75849944a..86a7986b3 100644 --- a/src/RideCacheModel.cpp +++ b/src/RideCacheModel.cpp @@ -32,6 +32,8 @@ RideCacheModel::RideCacheModel(Context *context, RideCache *cache) : QAbstractTa connect(context, SIGNAL(refreshStart()), this, SLOT(refreshStart())); connect(context, SIGNAL(refreshEnd()), this, SLOT(refreshEnd())); connect(context, SIGNAL(refreshUpdate(QDate)), this, SLOT(refreshUpdate(QDate))); + connect(context, SIGNAL(rideAdded(RideItem*)), this, SLOT(itemAddedOrRemoved())); + connect(context, SIGNAL(rideDeleted(RideItem*)), this, SLOT(itemAddedOrRemoved())); connect(rideCache, SIGNAL(itemChanged(RideItem*)), this, SLOT(itemChanged(RideItem*))); } @@ -80,7 +82,12 @@ RideCacheModel::data(const QModelIndex &index, int role) const // is a metric int i=index.column()-5; - return 0; + + // unpack metric value into ridemetric and use it to get a stringified + // version using the right metric/imperial conversion + RideMetric *m = const_cast(factory->rideMetric(factory->metricName(i))); + m->setValue(rideCache->rides().at(index.row())->metrics_[m->index()]); + return m->toString(context->athlete->useMetricUnits); } else { @@ -95,7 +102,6 @@ RideCacheModel::data(const QModelIndex &index, int role) const void RideCacheModel::itemChanged(RideItem *item) { -qDebug()<<"ooh"<fileName<<"changed"; // ok so lets signal that int row = rideCache->rides().indexOf(item); if (row >= 0 && row <= rideCache->count()) { @@ -103,6 +109,14 @@ qDebug()<<"ooh"<fileName<<"changed"; } } +void +RideCacheModel::itemAddedOrRemoved() +{ + // reset the model + beginResetModel(); + endResetModel(); +} + bool RideCacheModel::setHeaderData (int section, Qt::Orientation orientation, const QVariant &value, int role) { @@ -129,6 +143,9 @@ RideCacheModel::headerData(int section, Qt::Orientation orientation, int role) c void RideCacheModel::configChanged() { + // we are resetting + beginResetModel(); + // get field config metadata = context->athlete->rideMetadata()->getFields(); @@ -172,6 +189,10 @@ RideCacheModel::configChanged() break; } } + + // all good + endResetModel(); + headerDataChanged (Qt::Horizontal, 0, columns_-1); } diff --git a/src/RideCacheModel.h b/src/RideCacheModel.h index 438d51030..cc4f5f356 100644 --- a/src/RideCacheModel.h +++ b/src/RideCacheModel.h @@ -60,6 +60,7 @@ class RideCacheModel : public QAbstractTableModel // and updates to ride items void itemChanged(RideItem *item); + void itemAddedOrRemoved(); private: Context *context; diff --git a/src/RideItem.h b/src/RideItem.h index 358a4b313..d71868581 100644 --- a/src/RideItem.h +++ b/src/RideItem.h @@ -30,6 +30,7 @@ class RideFile; class RideFileCache; class RideCache; +class RideCacheModel; class Context; Q_DECLARE_METATYPE(RideItem*) @@ -44,6 +45,7 @@ class RideItem : public QObject protected: friend class ::RideCache; + friend class ::RideCacheModel; // ridefile RideFile *ride_; diff --git a/src/RideMetadata.cpp b/src/RideMetadata.cpp index 7b2d0ee3f..9d77b44cb 100644 --- a/src/RideMetadata.cpp +++ b/src/RideMetadata.cpp @@ -584,6 +584,8 @@ FormField::FormField(FieldDefinition field, RideMetadata *meta) : definition(fie // if save is being called flush all the values out ready to save as they are connect(meta->context, SIGNAL(metadataFlush()), this, SLOT(editFinished())); + + active = false; } FormField::~FormField() @@ -663,6 +665,7 @@ FormField::editFinished() case FIELD_TIME : text = ((QTimeEdit*)widget)->time().toString("hh:mm:ss.zzz"); break; } + active = true; // Update special field if (definition.name == "Device") { @@ -732,6 +735,7 @@ FormField::editFinished() ourRideItem->notifyRideMetadataChanged(); } } + active = false; // default values setLinkedDefault(text); @@ -820,6 +824,8 @@ FormField::stateChanged(int state) void FormField::metadataChanged() { + if (active == true) return; + active = true; edited = false; QString value;