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;