diff --git a/src/AllPlot.cpp b/src/AllPlot.cpp index a80b45470..4b6a0d2b7 100644 --- a/src/AllPlot.cpp +++ b/src/AllPlot.cpp @@ -105,7 +105,7 @@ class AllPlotBackground: public QwtPlotItem if (parent->context->isCompareIntervals) { - zones = parent->context->athlete->zones(); + zones = parent->context->athlete->zones(rideItem ? rideItem->isRun : false); if (!zones) return; // use first compare interval date @@ -116,10 +116,10 @@ class AllPlotBackground: public QwtPlotItem if (zone_range == -1) zone_range = zones->whichRange(QDate::currentDate()); - } else if (rideItem && parent->context->athlete->zones()) { + } else if (rideItem && parent->context->athlete->zones(rideItem->isRun)) { - zones = parent->context->athlete->zones(); - zone_range = parent->context->athlete->zones()->whichRange(rideItem->dateTime.date()); + zones = parent->context->athlete->zones(rideItem->isRun); + zone_range = parent->context->athlete->zones(rideItem->isRun)->whichRange(rideItem->dateTime.date()); } else { @@ -176,7 +176,7 @@ class AllPlotZoneLabel: public QwtPlotItem if (parent->context->isCompareIntervals) { - zones = parent->context->athlete->zones(); + zones = parent->context->athlete->zones(rideItem ? rideItem->isRun : false); if (!zones) return; // use first compare interval date @@ -187,10 +187,10 @@ class AllPlotZoneLabel: public QwtPlotItem if (zone_range == -1) zone_range = zones->whichRange(QDate::currentDate()); - } else if (rideItem && parent->context->athlete->zones()) { + } else if (rideItem && parent->context->athlete->zones(rideItem->isRun)) { - zones = parent->context->athlete->zones(); - zone_range = parent->context->athlete->zones()->whichRange(rideItem->dateTime.date()); + zones = parent->context->athlete->zones(rideItem->isRun); + zone_range = parent->context->athlete->zones(rideItem->isRun)->whichRange(rideItem->dateTime.date()); } else { @@ -1641,13 +1641,13 @@ void AllPlot::refreshZoneLabels() } zoneLabels.clear(); - if (rideItem && context->athlete->zones()) { + if (rideItem && context->athlete->zones(rideItem->isRun)) { - int zone_range = context->athlete->zones()->whichRange(rideItem->dateTime.date()); + int zone_range = context->athlete->zones(rideItem->isRun)->whichRange(rideItem->dateTime.date()); // generate labels for existing zones if (zone_range >= 0) { - int num_zones = context->athlete->zones()->numZones(zone_range); + int num_zones = context->athlete->zones(rideItem->isRun)->numZones(zone_range); for (int z = 0; z < num_zones; z ++) { AllPlotZoneLabel *label = new AllPlotZoneLabel(this, z); label->attach(this); diff --git a/src/Athlete.h b/src/Athlete.h index fc4a9b4f3..938636945 100644 --- a/src/Athlete.h +++ b/src/Athlete.h @@ -84,9 +84,9 @@ class Athlete : public QObject ColorEngine *colorEngine; // zones - const Zones *zones(bool isRun=false) const { return zones_[isRun]; } + const Zones *zones(bool isRun) const { return zones_[isRun]; } const HrZones *hrZones() const { return hrzones_; } - const PaceZones *paceZones(bool isSwim=false) const { return pacezones_[isSwim]; } + const PaceZones *paceZones(bool isSwim) const { return pacezones_[isSwim]; } Zones *zones_[2]; HrZones *hrzones_; PaceZones *pacezones_[2]; diff --git a/src/BasicRideMetrics.cpp b/src/BasicRideMetrics.cpp index f2cf649fd..e70e2c3ac 100644 --- a/src/BasicRideMetrics.cpp +++ b/src/BasicRideMetrics.cpp @@ -1576,10 +1576,10 @@ class APPercent : public RideMetric { double percent = 0.0f; AvgPower *pw = dynamic_cast(deps.value("average_power")); - if (pw->value(true) > 0.0f && item->context->athlete->zones() && item->zoneRange >= 0) { + if (pw->value(true) > 0.0f && item->context->athlete->zones(item->isRun) && item->zoneRange >= 0) { // get Pmax - double pmax = item->context->athlete->zones()->getPmax(item->zoneRange); + double pmax = item->context->athlete->zones(item->isRun)->getPmax(item->zoneRange); percent = pw->value(true)/pmax * 100; } setValue(percent); diff --git a/src/BikeScore.cpp b/src/BikeScore.cpp index b73e0b83d..b7e60d947 100644 --- a/src/BikeScore.cpp +++ b/src/BikeScore.cpp @@ -168,12 +168,12 @@ class RelativeIntensity : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { - if (item->context->athlete->zones() && item->zoneRange >= 0) { + if (item->context->athlete->zones(item->isRun) && item->zoneRange >= 0) { assert(deps.contains("skiba_xpower")); XPower *xp = dynamic_cast(deps.value("skiba_xpower")); assert(xp); int cp = item->getText("CP","0").toInt(); - reli = xp->value(true) / (cp ? cp : item->context->athlete->zones()->getCP(item->zoneRange)); + reli = xp->value(true) / (cp ? cp : item->context->athlete->zones(item->isRun)->getCP(item->zoneRange)); secs = xp->count(); } setValue(reli); @@ -210,8 +210,8 @@ class CriticalPower : public RideMetric { // not overriden so use the set value // if it has been set at all - if (!cp && item->context->athlete->zones() && item->zoneRange >= 0) - cp = item->context->athlete->zones()->getCP(item->zoneRange); + if (!cp && item->context->athlete->zones(item->isRun) && item->zoneRange >= 0) + cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); setValue(cp); } @@ -239,7 +239,7 @@ class aTISS : public RideMetric { void compute(RideItem *item, Specification spec, const QHash &) { - if (!item->context->athlete->zones() || item->zoneRange < 0) return; + if (!item->context->athlete->zones(item->isRun) || item->zoneRange < 0) return; // no ride or no samples if (spec.isEmpty(item->ride())) { @@ -255,7 +255,7 @@ class aTISS : public RideMetric { double aTISS = 0.0f; int cp = item->getText("CP","0").toInt(); - if (!cp) cp = item->context->athlete->zones()->getCP(item->zoneRange); + if (!cp) cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); if (cp && item->ride()->areDataPresent()->watts) { @@ -300,7 +300,7 @@ class anTISS : public RideMetric { return; } - if (!item->context->athlete->zones() || item->zoneRange < 0) return; + if (!item->context->athlete->zones(item->isRun) || item->zoneRange < 0) return; // anTISS - Aerobic Training Impact Scoring System static const double a = 0.238923886004611f; @@ -310,7 +310,7 @@ class anTISS : public RideMetric { double anTISS = 0.0f; int cp = item->getText("CP","0").toInt(); - if (!cp) cp = item->context->athlete->zones()->getCP(item->zoneRange); + if (!cp) cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); if (cp && item->ride()->areDataPresent()->watts) { RideFileIterator it(item->ride(), spec); @@ -349,7 +349,7 @@ class dTISS : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { - if (!item->context->athlete->zones() || item->zoneRange < 0) return; + if (!item->context->athlete->zones(item->isRun) || item->zoneRange < 0) return; assert(deps.contains("atiss_score")); assert(deps.contains("antiss_score")); @@ -386,7 +386,7 @@ class BikeScore : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { // no zones - if (item->context->athlete->zones()==NULL || item->zoneRange < 0) { + if (item->context->athlete->zones(item->isRun)==NULL || item->zoneRange < 0) { setValue(RideFile::NIL); setCount(0); return; @@ -400,7 +400,7 @@ class BikeScore : public RideMetric { double normWork = xp->value(true) * xp->count(); double rawBikeScore = normWork * ri->value(true); int cp = item->getText("CP","0").toInt(); - double workInAnHourAtCP = (cp ? cp : item->context->athlete->zones()->getCP(item->zoneRange)) * 3600; + double workInAnHourAtCP = (cp ? cp : item->context->athlete->zones(item->isRun)->getCP(item->zoneRange)) * 3600; score = rawBikeScore / workInAnHourAtCP * 100.0; setValue(score); diff --git a/src/BingMap.cpp b/src/BingMap.cpp index 5c1c594ce..14a2a1d60 100644 --- a/src/BingMap.cpp +++ b/src/BingMap.cpp @@ -89,11 +89,11 @@ BingMap::rideSelected() range=-1; rideCP=300; - if (context->athlete->zones()) { + if (context->athlete->zones(ride->isRun)) { // get the right range and CP - range = context->athlete->zones()->whichRange(ride->dateTime.date()); - if (range >= 0) rideCP = context->athlete->zones()->getCP(range); + range = context->athlete->zones(ride->isRun)->whichRange(ride->dateTime.date()); + if (range >= 0) rideCP = context->athlete->zones(ride->isRun)->getCP(range); } loadRide(); @@ -292,7 +292,7 @@ void BingMap::createHtml() QColor BingMap::GetColor(int watts) { if (range < 0) return Qt::red; - else return zoneColor(context->athlete->zones()->whichZone(range, watts), 7); + else return zoneColor(context->athlete->zones(myRideItem ? myRideItem->isRun : false)->whichZone(range, watts), 7); } // create the ride line diff --git a/src/CPPlot.cpp b/src/CPPlot.cpp index b15ddbf82..34192966f 100644 --- a/src/CPPlot.cpp +++ b/src/CPPlot.cpp @@ -1037,7 +1037,7 @@ CPPlot::plotBests(RideItem *rideItem) // set zones from shading CP QList power_zone; - int n_zones = context->athlete->zones()->lowsFromCP(&power_zone, (int) int(shadingCP)); + int n_zones = context->athlete->zones(isRun)->lowsFromCP(&power_zone, (int) int(shadingCP)); // now run through each zone and create a curve int high = maxNonZero - 1; @@ -1092,7 +1092,7 @@ CPPlot::plotBests(RideItem *rideItem) // now the labels if (shadeMode && (criticalSeries != CriticalPowerWindow::work || work[high] > 100.0)) { - QwtText text(context->athlete->zones()->getDefaultZoneName(zone)); + QwtText text(context->athlete->zones(isRun)->getDefaultZoneName(zone)); text.setFont(QFont("Helvetica", 20, QFont::Bold)); color.setAlpha(255); text.setColor(color); diff --git a/src/CriticalPowerWindow.cpp b/src/CriticalPowerWindow.cpp index 23019c6f7..6b1a1d626 100644 --- a/src/CriticalPowerWindow.cpp +++ b/src/CriticalPowerWindow.cpp @@ -1201,9 +1201,9 @@ CriticalPowerWindow::rideSelected() if (currentRide) { - if (context->athlete->zones()) { - int zoneRange = context->athlete->zones()->whichRange(currentRide->dateTime.date()); - int CP = zoneRange >= 0 ? context->athlete->zones()->getCP(zoneRange) : 0; + if (context->athlete->zones(currentRide->isRun)) { + int zoneRange = context->athlete->zones(currentRide->isRun)->whichRange(currentRide->dateTime.date()); + int CP = zoneRange >= 0 ? context->athlete->zones(currentRide->isRun)->getCP(zoneRange) : 0; CPEdit->setText(QString("%1").arg(CP)); cpPlot->setDateCP(CP); } else { @@ -1601,13 +1601,22 @@ CriticalPowerWindow::dateRangeChanged(DateRange dateRange) cfrom = dateRange.from; cto = dateRange.to; - // lets work out the average CP configure value - if (series() != veloclinicplot && context->athlete->zones()) { - int fromZoneRange = context->athlete->zones()->whichRange(cfrom); - int toZoneRange = context->athlete->zones()->whichRange(cto); + FilterSet fs; + fs.addFilter(searchBox->isFiltered(), SearchFilterBox::matches(context, filter())); + fs.addFilter(context->isfiltered, context->filters); + fs.addFilter(context->ishomefiltered, context->homeFilters); + int nActivities, nRides, nRuns, nSwims; + context->athlete->rideCache->getRideTypeCounts( + Specification(dateRange, fs), + nActivities, nRides, nRuns, nSwims); - int CPfrom = fromZoneRange >= 0 ? context->athlete->zones()->getCP(fromZoneRange) : 0; - int CPto = toZoneRange >= 0 ? context->athlete->zones()->getCP(toZoneRange) : CPfrom; + // lets work out the average CP configure value + if (series() != veloclinicplot && context->athlete->zones(nActivities == nRuns)) { + int fromZoneRange = context->athlete->zones(nActivities == nRuns)->whichRange(cfrom); + int toZoneRange = context->athlete->zones(nActivities == nRuns)->whichRange(cto); + + int CPfrom = fromZoneRange >= 0 ? context->athlete->zones(nActivities == nRuns)->getCP(fromZoneRange) : 0; + int CPto = toZoneRange >= 0 ? context->athlete->zones(nActivities == nRuns)->getCP(toZoneRange) : CPfrom; if (CPfrom == 0) CPfrom = CPto; int dateCP = (CPfrom + CPto) / 2; @@ -1617,14 +1626,6 @@ CriticalPowerWindow::dateRangeChanged(DateRange dateRange) } // lets work out the average CV configure value - FilterSet fs; - fs.addFilter(searchBox->isFiltered(), SearchFilterBox::matches(context, filter())); - fs.addFilter(context->isfiltered, context->filters); - fs.addFilter(context->ishomefiltered, context->homeFilters); - int nActivities, nRides, nRuns, nSwims; - context->athlete->rideCache->getRideTypeCounts( - Specification(dateRange, fs), - nActivities, nRides, nRuns, nSwims); if (((nActivities == nRuns) || (nActivities == nSwims)) && context->athlete->paceZones(nActivities == nSwims)) { int fromZoneRange = context->athlete->paceZones(nActivities == nSwims)->whichRange(cfrom); diff --git a/src/DanielsPoints.cpp b/src/DanielsPoints.cpp index f90ded56a..a1c4df8f3 100644 --- a/src/DanielsPoints.cpp +++ b/src/DanielsPoints.cpp @@ -63,7 +63,7 @@ class DanielsPoints : public RideMetric { // no ride or no samples if (spec.isEmpty(item->ride()) || - item->context->athlete->zones() == NULL || item->zoneRange < 0) { + item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0) { setValue(RideFile::NIL); setCount(0); return; @@ -81,7 +81,7 @@ class DanielsPoints : public RideMetric { double weighted = 0.0; score = 0.0; - double cp = item->context->athlete->zones()->getCP(item->zoneRange); + double cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); RideFileIterator it(item->ride(), spec); while (it.hasNext()) { @@ -132,13 +132,13 @@ class DanielsEquivalentPower : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { // no zones - if (item->context->athlete->zones() == NULL || item->zoneRange < 0) { + if (item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0) { setValue(RideFile::NIL); setCount(0); return; } - double cp = item->context->athlete->zones()->getCP(item->zoneRange); + double cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); assert(deps.contains("daniels_points")); assert(deps.contains("time_riding")); diff --git a/src/DataFilter.cpp b/src/DataFilter.cpp index ae407bd95..415ae9423 100644 --- a/src/DataFilter.cpp +++ b/src/DataFilter.cpp @@ -1543,13 +1543,13 @@ Result Leaf::eval(DataFilterRuntime *df, Leaf *leaf, float x, RideItem *m, RideF double PMAX = 0; int zoneRange; - if (m->context->athlete->zones()) { + if (m->context->athlete->zones(m->isRun)) { // if range is -1 we need to fall back to a default value - zoneRange = m->context->athlete->zones()->whichRange(m->dateTime.date()); - CP = zoneRange >= 0 ? m->context->athlete->zones()->getCP(zoneRange) : 0; - WPRIME = zoneRange >= 0 ? m->context->athlete->zones()->getWprime(zoneRange) : 0; - PMAX = zoneRange >= 0 ? m->context->athlete->zones()->getPmax(zoneRange) : 0; + zoneRange = m->context->athlete->zones(m->isRun)->whichRange(m->dateTime.date()); + CP = zoneRange >= 0 ? m->context->athlete->zones(m->isRun)->getCP(zoneRange) : 0; + WPRIME = zoneRange >= 0 ? m->context->athlete->zones(m->isRun)->getWprime(zoneRange) : 0; + PMAX = zoneRange >= 0 ? m->context->athlete->zones(m->isRun)->getPmax(zoneRange) : 0; // did we override CP in metadata ? int oCP = m->getText("CP","0").toInt(); diff --git a/src/DialWindow.cpp b/src/DialWindow.cpp index 6c4752623..cac460efd 100644 --- a/src/DialWindow.cpp +++ b/src/DialWindow.cpp @@ -293,11 +293,11 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) double rif, cp; // carry on and calculate IF - if (context->athlete->zones()) { + if (context->athlete->zones(false)) { // get cp for today - int zonerange = context->athlete->zones()->whichRange(QDateTime::currentDateTime().date()); - if (zonerange >= 0) cp = context->athlete->zones()->getCP(zonerange); + int zonerange = context->athlete->zones(false)->whichRange(QDateTime::currentDateTime().date()); + if (zonerange >= 0) cp = context->athlete->zones(false)->getCP(zonerange); else cp = 0; } else { @@ -379,11 +379,11 @@ DialWindow::telemetryUpdate(const RealtimeData &rtData) double rif, cp; // carry on and calculate IF - if (context->athlete->zones()) { + if (context->athlete->zones(false)) { // get cp for today - int zonerange = context->athlete->zones()->whichRange(QDateTime::currentDateTime().date()); - if (zonerange >= 0) cp = context->athlete->zones()->getCP(zonerange); + int zonerange = context->athlete->zones(false)->whichRange(QDateTime::currentDateTime().date()); + if (zonerange >= 0) cp = context->athlete->zones(false)->getCP(zonerange); else cp = 0; } else { diff --git a/src/ErgFile.cpp b/src/ErgFile.cpp index be7ae5028..1cec9894a 100644 --- a/src/ErgFile.cpp +++ b/src/ErgFile.cpp @@ -44,18 +44,18 @@ bool ErgFile::isWorkout(QString name) ErgFile::ErgFile(QString filename, int &mode, Context *context) : filename(filename), context(context), mode(mode) { - if (context->athlete->zones()) { - int zonerange = context->athlete->zones()->whichRange(QDateTime::currentDateTime().date()); - if (zonerange >= 0) CP = context->athlete->zones()->getCP(zonerange); + if (context->athlete->zones(false)) { + int zonerange = context->athlete->zones(false)->whichRange(QDateTime::currentDateTime().date()); + if (zonerange >= 0) CP = context->athlete->zones(false)->getCP(zonerange); } reload(); } ErgFile::ErgFile(Context *context) : context(context), mode(nomode) { - if (context->athlete->zones()) { - int zonerange = context->athlete->zones()->whichRange(QDateTime::currentDateTime().date()); - if (zonerange >= 0) CP = context->athlete->zones()->getCP(zonerange); + if (context->athlete->zones(false)) { + int zonerange = context->athlete->zones(false)->whichRange(QDateTime::currentDateTime().date()); + if (zonerange >= 0) CP = context->athlete->zones(false)->getCP(zonerange); } else { CP = 300; } @@ -720,9 +720,9 @@ ErgFile::calculateMetrics() AP = apsum / count; // CP - if (context->athlete->zones()) { - int zonerange = context->athlete->zones()->whichRange(QDateTime::currentDateTime().date()); - if (zonerange >= 0) CP = context->athlete->zones()->getCP(zonerange); + if (context->athlete->zones(false)) { + int zonerange = context->athlete->zones(false)->whichRange(QDateTime::currentDateTime().date()); + if (zonerange >= 0) CP = context->athlete->zones(false)->getCP(zonerange); } // IF diff --git a/src/ErgFilePlot.cpp b/src/ErgFilePlot.cpp index f488da5f7..be245d66a 100644 --- a/src/ErgFilePlot.cpp +++ b/src/ErgFilePlot.cpp @@ -276,9 +276,9 @@ ErgFilePlot::configChanged(qint32) // set CP Marker double CP = 0; // default - if (context->athlete->zones()) { - int zoneRange = context->athlete->zones()->whichRange(QDate::currentDate()); - if (zoneRange >= 0) CP = context->athlete->zones()->getCP(zoneRange); + if (context->athlete->zones(false)) { + int zoneRange = context->athlete->zones(false)->whichRange(QDate::currentDate()); + if (zoneRange >= 0) CP = context->athlete->zones(false)->getCP(zoneRange); } if (CP) { CPMarker->setYValue(CP); diff --git a/src/GOVSS.cpp b/src/GOVSS.cpp index 519bff7d6..319af6431 100644 --- a/src/GOVSS.cpp +++ b/src/GOVSS.cpp @@ -274,7 +274,7 @@ class RTP : public RideMetric { double weight = item->ride()->getWeight(); double height = item->ride()->getHeight(); - const PaceZones *zones = item->context->athlete->paceZones(); + const PaceZones *zones = item->context->athlete->paceZones(false); int zoneRange = item->paceZoneRange; // did user override for this ride? diff --git a/src/GoogleMapControl.cpp b/src/GoogleMapControl.cpp index c47d320e8..d0cd6d91b 100644 --- a/src/GoogleMapControl.cpp +++ b/src/GoogleMapControl.cpp @@ -130,9 +130,9 @@ GoogleMapControl::rideSelected() rideCP = 300; stale = false; - if (context->athlete->zones()) { - range = context->athlete->zones()->whichRange(ride->dateTime.date()); - if (range >= 0) rideCP = context->athlete->zones()->getCP(range); + if (context->athlete->zones(ride->isRun)) { + range = context->athlete->zones(ride->isRun)->whichRange(ride->dateTime.date()); + if (range >= 0) rideCP = context->athlete->zones(ride->isRun)->getCP(range); } loadRide(); @@ -352,7 +352,7 @@ void GoogleMapControl::createHtml() QColor GoogleMapControl::GetColor(int watts) { if (range < 0) return Qt::red; - else return zoneColor(context->athlete->zones()->whichZone(range, watts), 7); + else return zoneColor(context->athlete->zones(myRideItem ? myRideItem->isRun : false)->whichZone(range, watts), 7); } // create the ride line diff --git a/src/HistogramWindow.cpp b/src/HistogramWindow.cpp index 10b7173a0..5a07a4799 100644 --- a/src/HistogramWindow.cpp +++ b/src/HistogramWindow.cpp @@ -746,7 +746,7 @@ HistogramWindow::rideSelected() if (rangemode) { // get range that applies to this ride - powerRange = context->athlete->zones()->whichRange(ride->dateTime.date()); + powerRange = context->athlete->zones(ride->isRun)->whichRange(ride->dateTime.date()); hrRange = context->athlete->hrZones()->whichRange(ride->dateTime.date()); } diff --git a/src/HrPwPlot.cpp b/src/HrPwPlot.cpp index a305d3bc5..96b9ed471 100644 --- a/src/HrPwPlot.cpp +++ b/src/HrPwPlot.cpp @@ -592,7 +592,7 @@ class HrPwPlotBackground: public QwtPlotItem return; int zone_range = -1; - const Zones *zones = parent->context->athlete->zones(); + const Zones *zones = parent->context->athlete->zones(rideItem->isRun); if (zones) zone_range = zones->whichRange(rideItem->dateTime.date()); if (parent->isShadeZones() && zones && (zone_range >= 0)) { @@ -641,7 +641,7 @@ class HrPwPlotZoneLabel: public QwtPlotItem return; int zone_range = -1; - const Zones *zones = parent->context->athlete->zones(); + const Zones *zones = parent->context->athlete->zones(rideItem->isRun); if (zones) zone_range = zones->whichRange(rideItem->dateTime.date()); // create new zone labels if we're shading @@ -717,10 +717,10 @@ HrPwPlot::refreshZoneLabels() { bg = NULL; } - if (rideItem && context->athlete->zones()) { + if (rideItem && context->athlete->zones(rideItem->isRun)) { int zone_range = -1; - const Zones *zones = context->athlete->zones(); + const Zones *zones = context->athlete->zones(rideItem->isRun); if (zones) zone_range = zones->whichRange(rideItem->dateTime.date()); // generate labels for existing zones diff --git a/src/LTMPlot.cpp b/src/LTMPlot.cpp index a47957321..b228b038d 100644 --- a/src/LTMPlot.cpp +++ b/src/LTMPlot.cpp @@ -3620,8 +3620,8 @@ class LTMPlotBackground: public QwtPlotItem const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &rect) const { - const Zones *zones = parent->parent->context->athlete->zones(); - int zone_range_size = parent->parent->context->athlete->zones()->getRangeSize(); + const Zones *zones = parent->parent->context->athlete->zones(false); + int zone_range_size = parent->parent->context->athlete->zones(false)->getRangeSize(); if (zone_range_size >= 0) { //parent->shadeZones() && for (int i = 0; i < zone_range_size; i ++) { @@ -3677,7 +3677,7 @@ class LTMPlotZoneLabel: public QwtPlotItem parent = _parent; zone_number = _zone_number; - const Zones *zones = parent->parent->context->athlete->zones(); + const Zones *zones = parent->parent->context->athlete->zones(false); int zone_range = zones->whichRange(settings->start.addDays((settings->end.date().toJulianDay()-settings->start.date().toJulianDay())/2).date()); // which axis has watts? @@ -3804,7 +3804,7 @@ void LTMPlot::refreshZoneLabels(QwtAxisId axisid) } if (axisid == QwtAxisId(-1,-1)) return; // our job is done - no zones to plot - const Zones *zones = context->athlete->zones(); + const Zones *zones = context->athlete->zones(false); if (zones == NULL || zones->getRangeSize()==0) return; // no zones to plot diff --git a/src/ModelPlot.cpp b/src/ModelPlot.cpp index 792b290b7..4518c4b29 100644 --- a/src/ModelPlot.cpp +++ b/src/ModelPlot.cpp @@ -515,7 +515,7 @@ ModelDataProvider::ModelDataProvider (ModelPlot &plot, ModelSettings *settings) // COLOR // if needed convert average power to the related power zone // but only if ranges are defined i.e. user has set CP - const Zones *zones = plot.context->athlete->zones(); + const Zones *zones = plot.context->athlete->zones(settings->ride->isRun); int zone_range = -1; if (zones) zone_range = zones->whichRange(settings->ride->dateTime.date()); if (settings->color == MODEL_POWERZONE && zone_range >= 0) { diff --git a/src/PaceTimeInZone.cpp b/src/PaceTimeInZone.cpp index 0e0307d48..fef3f25e9 100644 --- a/src/PaceTimeInZone.cpp +++ b/src/PaceTimeInZone.cpp @@ -53,9 +53,9 @@ class PaceZoneTime : public RideMetric { void compute(RideItem *item, Specification spec, const QHash &) { // no ride or no samples - if (spec.isEmpty(item->ride()) || + if (spec.isEmpty(item->ride()) && // pace only makes sense for running or swimming - !item->isRun || !item->isSwim) { + !item->isRun && !item->isSwim) { setValue(RideFile::NIL); setCount(0); return; diff --git a/src/PeakPower.cpp b/src/PeakPower.cpp index 71ddffef5..1bc706d1b 100644 --- a/src/PeakPower.cpp +++ b/src/PeakPower.cpp @@ -66,11 +66,11 @@ class PeakPercent : public RideMetric { double CP = 250; double WPRIME = 22000; - if (item->context->athlete->zones()) { + if (item->context->athlete->zones(item->isRun)) { // if range is -1 we need to fall back to a default value - CP = item->zoneRange >= 0 ? item->context->athlete->zones()->getCP(item->zoneRange) : 250; - WPRIME = item->zoneRange >= 0 ? item->context->athlete->zones()->getWprime(item->zoneRange) : 22000; + CP = item->zoneRange >= 0 ? item->context->athlete->zones(item->isRun)->getCP(item->zoneRange) : 250; + WPRIME = item->zoneRange >= 0 ? item->context->athlete->zones(item->isRun)->getWprime(item->zoneRange) : 22000; // did we override CP in metadata ? int oCP = item->getText("CP","0").toInt(); @@ -120,7 +120,7 @@ class PowerZone : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { // no zones - if (!item->context->athlete->zones() || !item->ride()->areDataPresent()->watts) { + if (!item->context->athlete->zones(item->isRun) || !item->ride()->areDataPresent()->watts) { setValue(RideFile::NIL); setCount(0); return; @@ -130,7 +130,7 @@ class PowerZone : public RideMetric { double percent=0; // if range is -1 we need to fall back to a default value - int zone = item->zoneRange >= 0 ? item->context->athlete->zones()->whichZone(item->zoneRange, ap) + 1 : 0; + int zone = item->zoneRange >= 0 ? item->context->athlete->zones(item->isRun)->whichZone(item->zoneRange, ap) + 1 : 0; // ok, how far up the zone was this? if (item->zoneRange >= 0 && zone) { @@ -138,12 +138,12 @@ class PowerZone : public RideMetric { // get zone info QString name, description; int low, high; - item->context->athlete->zones()->zoneInfo(item->zoneRange, zone-1, name, description, low, high); + item->context->athlete->zones(item->isRun)->zoneInfo(item->zoneRange, zone-1, name, description, low, high); // use Pmax as upper bound, this is used // for the limit of upper zone ALWAYS - if (high > item->context->athlete->zones()->getPmax(item->zoneRange)) - high = item->context->athlete->zones()->getPmax(item->zoneRange); + if (high > item->context->athlete->zones(item->isRun)->getPmax(item->zoneRange)) + high = item->context->athlete->zones(item->isRun)->getPmax(item->zoneRange); // how far in? percent = double(ap-low) / double(high-low); diff --git a/src/PfPvPlot.cpp b/src/PfPvPlot.cpp index 60d278d24..f9fcee931 100644 --- a/src/PfPvPlot.cpp +++ b/src/PfPvPlot.cpp @@ -67,7 +67,7 @@ public: if (parent->context->isCompareIntervals) { - zones = parent->context->athlete->zones(); + zones = parent->context->athlete->zones(rideItem ? rideItem->isRun : false); if (!zones) return; // use first compare interval date @@ -78,9 +78,9 @@ public: if (zone_range == -1) zone_range = zones->whichRange(QDate::currentDate()); - } else if (rideItem && parent->context->athlete->zones()) { + } else if (rideItem && parent->context->athlete->zones(rideItem->isRun)) { - zones = parent->context->athlete->zones(); + zones = parent->context->athlete->zones(rideItem->isRun); zone_range = zones->whichRange(rideItem->dateTime.date()); } else { @@ -299,7 +299,7 @@ PfPvPlot::refreshZoneItems() // set zones from ride or athlete and date of // first item in the compare set - const Zones *zones = context->athlete->zones(); + const Zones *zones = context->athlete->zones(rideItem ? rideItem->isRun : false); int zone_range = -1; // comparing does zones for items selected not current ride diff --git a/src/PowerHist.cpp b/src/PowerHist.cpp index 7ba9acf14..6c161c626 100644 --- a/src/PowerHist.cpp +++ b/src/PowerHist.cpp @@ -298,7 +298,7 @@ PowerHist::refreshZoneLabels() if (series == RideFile::watts || series == RideFile::wattsKg) { - const Zones *zones = context->athlete->zones(); + const Zones *zones = context->athlete->zones(rideItem->isRun); int zone_range = zones->whichRange(rideItem->dateTime.date()); // generate labels for existing zones @@ -684,7 +684,7 @@ PowerHist::recalcCompare() } else { - const Zones *zones = context->athlete->zones(); + const Zones *zones = context->athlete->zones(rideItem ? rideItem->isRun : false); int zone_range = -1; if (zones) { @@ -730,7 +730,7 @@ PowerHist::recalcCompare() // if (!cpzoned) { - const PaceZones *pacezones = context->athlete->paceZones(); + const PaceZones *pacezones = context->athlete->paceZones(false); int pacezone_range = -1; if (pacezones) { @@ -911,16 +911,16 @@ PowerHist::recalc(bool force) curveSelected->setSamples(sx, sy); // zone scale draw - if ((series == RideFile::watts || series == RideFile::wattsKg) && zoned && rideItem && context->athlete->zones()) { + if ((series == RideFile::watts || series == RideFile::wattsKg) && zoned && rideItem && context->athlete->zones(rideItem->isRun)) { if (cpzoned) { setAxisScaleDraw(QwtPlot::xBottom, new PolarisedZoneScaleDraw()); setAxisScale(QwtPlot::xBottom, -0.99, 3, 1); } else { - int zone_range = context->athlete->zones()->whichRange(rideItem->dateTime.date()); - setAxisScaleDraw(QwtPlot::xBottom, new ZoneScaleDraw(context->athlete->zones(), zone_range)); + int zone_range = context->athlete->zones(rideItem->isRun)->whichRange(rideItem->dateTime.date()); + setAxisScaleDraw(QwtPlot::xBottom, new ZoneScaleDraw(context->athlete->zones(rideItem->isRun), zone_range)); if (zone_range >= 0) - setAxisScale(QwtPlot::xBottom, -0.99, context->athlete->zones()->numZones(zone_range), 1); + setAxisScale(QwtPlot::xBottom, -0.99, context->athlete->zones(rideItem->isRun)->numZones(zone_range), 1); else setAxisScale(QwtPlot::xBottom, -0.99, 0, 1); } @@ -963,14 +963,14 @@ PowerHist::recalc(bool force) } // watts zoned for a time range - if (source == Cache && zoned && (series == RideFile::watts || series == RideFile::wattsKg) && context->athlete->zones()) { + if (source == Cache && zoned && (series == RideFile::watts || series == RideFile::wattsKg) && context->athlete->zones(rideItem ? rideItem->isRun : false)) { if (cpzoned) { setAxisScaleDraw(QwtPlot::xBottom, new PolarisedZoneScaleDraw()); setAxisScale(QwtPlot::xBottom, -0.99, 3, 1); } else { - setAxisScaleDraw(QwtPlot::xBottom, new ZoneScaleDraw(context->athlete->zones(), 0)); - if (context->athlete->zones()->getRangeSize()) - setAxisScale(QwtPlot::xBottom, -0.99, context->athlete->zones()->numZones(0), 1); // use zones from first defined range + setAxisScaleDraw(QwtPlot::xBottom, new ZoneScaleDraw(context->athlete->zones(rideItem ? rideItem->isRun : false), 0)); + if (context->athlete->zones(rideItem ? rideItem->isRun : false)->getRangeSize()) + setAxisScale(QwtPlot::xBottom, -0.99, context->athlete->zones(rideItem ? rideItem->isRun : false)->numZones(0), 1); // use zones from first defined range } } @@ -987,14 +987,14 @@ PowerHist::recalc(bool force) } // pace zoned for a time range using run zones for scale - if (source == Cache && zoned && series == RideFile::kph && context->athlete->paceZones()) { + if (source == Cache && zoned && series == RideFile::kph && context->athlete->paceZones(false)) { if (cpzoned) { setAxisScaleDraw(QwtPlot::xBottom, new PolarisedZoneScaleDraw()); setAxisScale(QwtPlot::xBottom, -0.99, 3, 1); } else { - setAxisScaleDraw(QwtPlot::xBottom, new PaceZoneScaleDraw(context->athlete->paceZones(), 0)); - if (context->athlete->paceZones()->getRangeSize()) - setAxisScale(QwtPlot::xBottom, -0.99, context->athlete->paceZones()->numZones(0), 1); // use zones from first defined range + setAxisScaleDraw(QwtPlot::xBottom, new PaceZoneScaleDraw(context->athlete->paceZones(false), 0)); + if (context->athlete->paceZones(false)->getRangeSize()) + setAxisScale(QwtPlot::xBottom, -0.99, context->athlete->paceZones(false)->numZones(0), 1); // use zones from first defined range } } @@ -1409,7 +1409,7 @@ PowerHist::intervalHover(IntervalItem *x) // set data HistData hoverData; - setArraysFromRide(rideItem->ride(), hoverData, context->athlete->zones(), x); + setArraysFromRide(rideItem->ride(), hoverData, context->athlete->zones(rideItem->isRun), x); // set curve QVectorx,y,sx,sy; @@ -1844,7 +1844,7 @@ PowerHist::setData(RideItem *_rideItem, bool force) if (ride && hasData) { //setTitle(ride->startTime().toString(GC_DATETIME_FORMAT)); - setArraysFromRide(ride, standard, context->athlete->zones(), NULL); + setArraysFromRide(ride, standard, context->athlete->zones(rideItem->isRun), NULL); } else { diff --git a/src/PowerHist.h b/src/PowerHist.h index 71fddf7cf..cbfdd89d1 100644 --- a/src/PowerHist.h +++ b/src/PowerHist.h @@ -313,7 +313,7 @@ public: if (! rideItem) return; - const Zones *zones = parent->context->athlete->zones(); + const Zones *zones = parent->context->athlete->zones(rideItem->isRun); int zone_range = -1; if (zones) zone_range = zones->whichRange(rideItem->dateTime.date()); @@ -376,7 +376,7 @@ public: if (! rideItem) return; - const Zones *zones = parent->context->athlete->zones(); + const Zones *zones = parent->context->athlete->zones(rideItem->isRun); int zone_range = -1; if (zones) zone_range = zones->whichRange(rideItem->dateTime.date()); diff --git a/src/RideFile.cpp b/src/RideFile.cpp index 6b58adce2..654f4ae89 100644 --- a/src/RideFile.cpp +++ b/src/RideFile.cpp @@ -1728,10 +1728,10 @@ RideFile::recalculateDerivedSeries(bool force) double anTISS = 0.0f; // set WPrime and CP - if (context->athlete->zones()) { - int zoneRange = context->athlete->zones()->whichRange(startTime().date()); - CP = zoneRange >= 0 ? context->athlete->zones()->getCP(zoneRange) : 0; - //WPRIME = zoneRange >= 0 ? context->athlete->zones()->getWprime(zoneRange) : 0; + if (context->athlete->zones(isRun())) { + int zoneRange = context->athlete->zones(isRun())->whichRange(startTime().date()); + CP = zoneRange >= 0 ? context->athlete->zones(isRun())->getCP(zoneRange) : 0; + //WPRIME = zoneRange >= 0 ? context->athlete->zones(isRun())->getWprime(zoneRange) : 0; // did we override CP in metadata / metrics ? int oCP = getTag("CP","0").toInt(); diff --git a/src/RideFileCache.cpp b/src/RideFileCache.cpp index ac2aac694..4ffd6e189 100644 --- a/src/RideFileCache.cpp +++ b/src/RideFileCache.cpp @@ -1428,14 +1428,14 @@ RideFileCache::computeDistribution(QVector &array, RideFile::SeriesType s if (ride->isDataPresent(needSeries) == false) return; // get zones that apply, if any - int zoneRange = context->athlete->zones() ? context->athlete->zones()->whichRange(ride->startTime().date()) : -1; + int zoneRange = context->athlete->zones(ride->isRun()) ? context->athlete->zones(ride->isRun())->whichRange(ride->startTime().date()) : -1; int hrZoneRange = context->athlete->hrZones() ? context->athlete->hrZones()->whichRange(ride->startTime().date()) : -1; int paceZoneRange = context->athlete->paceZones(ride->isSwim()) ? context->athlete->paceZones(ride->isSwim())->whichRange(ride->startTime().date()) : -1; - if (zoneRange != -1) CP=context->athlete->zones()->getCP(zoneRange); + if (zoneRange != -1) CP=context->athlete->zones(ride->isRun())->getCP(zoneRange); else CP=0; - if (zoneRange != -1) WPRIME=context->athlete->zones()->getWprime(zoneRange); + if (zoneRange != -1) WPRIME=context->athlete->zones(ride->isRun())->getWprime(zoneRange); else WPRIME=0; if (hrZoneRange != -1) LTHR=context->athlete->hrZones()->getLT(hrZoneRange); @@ -1494,7 +1494,7 @@ RideFileCache::computeDistribution(QVector &array, RideFile::SeriesType s // watts time in zone if (series == RideFile::watts && zoneRange != -1) { - int index = context->athlete->zones()->whichZone(zoneRange, dp->value(series)); + int index = context->athlete->zones(ride->isRun())->whichZone(zoneRange, dp->value(series)); if (index >=0) wattsTimeInZone[index] += ride->recIntSecs(); } diff --git a/src/RideSummaryWindow.cpp b/src/RideSummaryWindow.cpp index 21feb4999..60abdc116 100644 --- a/src/RideSummaryWindow.cpp +++ b/src/RideSummaryWindow.cpp @@ -868,19 +868,19 @@ RideSummaryWindow::htmlSummary() } // - // Time In Zones for Running and Swimming + // Time In Pace Zones for Running and Swimming // int numzones = 0; int range = -1; - if (ridesummary && rideItem && rideItem->ride() && (rideItem->ride()->isRun() || rideItem->ride()->isSwim())) { + if (ridesummary && rideItem && (rideItem->isRun || rideItem->isSwim)) { - if (context->athlete->paceZones(rideItem->ride()->isSwim())) { + if (context->athlete->paceZones(rideItem->isSwim)) { - range = context->athlete->paceZones(rideItem->ride()->isSwim())->whichRange(rideItem->dateTime.date()); + range = context->athlete->paceZones(rideItem->isSwim)->whichRange(rideItem->dateTime.date()); if (range > -1) { - numzones = context->athlete->paceZones(rideItem->ride()->isSwim())->numZones(range); + numzones = context->athlete->paceZones(rideItem->isSwim)->numZones(range); if (numzones > 0) { @@ -896,25 +896,30 @@ RideSummaryWindow::htmlSummary() } summary += tr("

Pace Zones

"); - summary += context->athlete->paceZones(rideItem->ride()->isSwim())->summarize(range, time_in_zone, altColor); //aggregating + summary += context->athlete->paceZones(rideItem->isSwim)->summarize(range, time_in_zone, altColor); //aggregating } } } - } else { + } - if (ridesummary && rideItem && context->athlete->zones()) { + // + // Time In Power Zones, when there is power data + // + if (!ridesummary || !rideItem || rideItem->present.contains("P")) { + + if (ridesummary && rideItem && context->athlete->zones(rideItem->isRun)) { // get zones to use via ride for ridesummary - range = context->athlete->zones()->whichRange(rideItem->dateTime.date()); - if (range > -1) numzones = context->athlete->zones()->numZones(range); + range = context->athlete->zones(rideItem->isRun)->whichRange(rideItem->dateTime.date()); + if (range > -1) numzones = context->athlete->zones(rideItem->isRun)->numZones(range); // or for end of daterange plotted for daterange summary - } else if (context->athlete->zones()) { + } else if (context->athlete->zones(false)) { // get from end if period - range = context->athlete->zones()->whichRange(myDateRange.to); - if (range > -1) numzones = context->athlete->zones()->numZones(range); + range = context->athlete->zones(false)->whichRange(myDateRange.to); + if (range > -1) numzones = context->athlete->zones(false)->numZones(range); } @@ -930,10 +935,10 @@ RideSummaryWindow::htmlSummary() else time_in_zone[i] = context->athlete->rideCache->getAggregate(timeInZones[i], specification, useMetricUnits, true).toDouble(); } summary += tr("

Power Zones

"); - summary += context->athlete->zones()->summarize(range, time_in_zone, altColor); //aggregating + summary += context->athlete->zones(rideItem ? rideItem->isRun : false)->summarize(range, time_in_zone, altColor); //aggregating // W'bal Zones - int WPRIME = context->athlete->zones()->getWprime(range); + int WPRIME = context->athlete->zones(rideItem ? rideItem->isRun : false)->getWprime(range); QVector wtime_in_zone(4); QVector wwork_in_zone(4); QVector wcptime_in_zone(4); @@ -1755,14 +1760,14 @@ RideSummaryWindow::htmlCompareSummary() const // // TIME IN POWER ZONES (we can't do w'bal compare at present) // - if (context->athlete->zones()) { // use my zones + if (context->athlete->zones(false)) { // use my zones // get from end if period - int rangeidx = context->athlete->zones()->whichRange(QDate::currentDate()); // use current zone names et al + int rangeidx = context->athlete->zones(false)->whichRange(QDate::currentDate()); // use current zone names et al if (rangeidx > -1) { // get the list of zones - ZoneRange range = const_cast(context->athlete->zones())->getZoneRange(rangeidx); + ZoneRange range = const_cast(context->athlete->zones(false))->getZoneRange(rangeidx); QList zones = range.zones; // we've got a range and a count of zones so all is well @@ -2024,14 +2029,14 @@ RideSummaryWindow::htmlCompareSummary() const // // TIME IN POWER ZONES AND W'BAL ZONES // - if (context->athlete->zones()) { // use my zones + if (context->athlete->zones(false)) { // use my zones // get from end if period - int rangeidx = context->athlete->zones()->whichRange(QDate::currentDate()); // use current zone names et al + int rangeidx = context->athlete->zones(false)->whichRange(QDate::currentDate()); // use current zone names et al if (rangeidx > -1) { // get the list of zones - ZoneRange range = const_cast(context->athlete->zones())->getZoneRange(rangeidx); + ZoneRange range = const_cast(context->athlete->zones(false))->getZoneRange(rangeidx); QList zones = range.zones; // we've got a range and a count of zones so all is well diff --git a/src/TimeInZone.cpp b/src/TimeInZone.cpp index 359fe0bfa..4e81184d5 100644 --- a/src/TimeInZone.cpp +++ b/src/TimeInZone.cpp @@ -53,7 +53,7 @@ class ZoneTime : public RideMetric { // no ride or no samples if (spec.isEmpty(item->ride()) || - item->context->athlete->zones() == NULL || item->zoneRange < 0 || + item->context->athlete->zones(item->isRun) == NULL || item->zoneRange < 0 || !item->ride()->areDataPresent()->watts) { setValue(RideFile::NIL); setCount(0); @@ -66,7 +66,7 @@ class ZoneTime : public RideMetric { RideFileIterator it(item->ride(), spec); while (it.hasNext()) { struct RideFilePoint *point = it.next(); - if (item->context->athlete->zones()->whichZone(item->zoneRange, point->watts) == level) + if (item->context->athlete->zones(item->isRun)->whichZone(item->zoneRange, point->watts) == level) seconds += item->ride()->recIntSecs(); } setValue(seconds); diff --git a/src/TrainSidebar.cpp b/src/TrainSidebar.cpp index 8d8fdc8fa..6363f6f70 100644 --- a/src/TrainSidebar.cpp +++ b/src/TrainSidebar.cpp @@ -694,10 +694,10 @@ TrainSidebar::configChanged(qint32) FTP=285; // default to 285 if zones are not set WPRIME = 20000; - int range = context->athlete->zones()->whichRange(QDate::currentDate()); + int range = context->athlete->zones(false)->whichRange(QDate::currentDate()); if (range != -1) { - FTP = context->athlete->zones()->getCP(range); - WPRIME = context->athlete->zones()->getWprime(range); + FTP = context->athlete->zones(false)->getCP(range); + WPRIME = context->athlete->zones(false)->getWprime(range); } } diff --git a/src/WPrime.cpp b/src/WPrime.cpp index 599b9d2cc..279f81807 100644 --- a/src/WPrime.cpp +++ b/src/WPrime.cpp @@ -171,10 +171,10 @@ WPrime::setRide(RideFile *input) // Get CP CP = 250; // default WPRIME = 20000; - if (input->context->athlete->zones()) { - int zoneRange = input->context->athlete->zones()->whichRange(input->startTime().date()); - CP = zoneRange >= 0 ? input->context->athlete->zones()->getCP(zoneRange) : 0; - WPRIME = zoneRange >= 0 ? input->context->athlete->zones()->getWprime(zoneRange) : 0; + if (input->context->athlete->zones(input->isRun())) { + int zoneRange = input->context->athlete->zones(input->isRun())->whichRange(input->startTime().date()); + CP = zoneRange >= 0 ? input->context->athlete->zones(input->isRun())->getCP(zoneRange) : 0; + WPRIME = zoneRange >= 0 ? input->context->athlete->zones(input->isRun())->getWprime(zoneRange) : 0; // did we override CP in metadata / metrics ? int oCP = input->getTag("CP","0").toInt(); @@ -376,10 +376,10 @@ WPrime::setErg(ErgFile *input) CP = 250; // defaults WPRIME = 20000; - if (input->context->athlete->zones()) { - int zoneRange = input->context->athlete->zones()->whichRange(QDate::currentDate()); - CP = zoneRange >= 0 ? input->context->athlete->zones()->getCP(zoneRange) : 250; - WPRIME = zoneRange >= 0 ? input->context->athlete->zones()->getWprime(zoneRange) : 20000; + if (input->context->athlete->zones(false)) { + int zoneRange = input->context->athlete->zones(false)->whichRange(QDate::currentDate()); + CP = zoneRange >= 0 ? input->context->athlete->zones(false)->getCP(zoneRange) : 250; + WPRIME = zoneRange >= 0 ? input->context->athlete->zones(false)->getWprime(zoneRange) : 20000; } // no data or no power data then forget it. @@ -796,8 +796,8 @@ class WPrimeExp : public RideMetric { void compute(RideItem *item, Specification spec, const QHash &) { int cp = item->getText("CP","0").toInt(); - if (!cp && item->context->athlete->zones() && item->zoneRange >=0) - cp = item->context->athlete->zones()->getCP(item->zoneRange); + if (!cp && item->context->athlete->zones(item->isRun) && item->zoneRange >=0) + cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); double total = 0; double secs = 0; @@ -839,8 +839,8 @@ class WPrimeWatts : public RideMetric { void compute(RideItem *item, Specification spec, const QHash &) { int cp = item->getText("CP","0").toInt(); - if (!cp && item->context->athlete->zones() && item->zoneRange >=0) - cp = item->context->athlete->zones()->getCP(item->zoneRange); + if (!cp && item->context->athlete->zones(item->isRun) && item->zoneRange >=0) + cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); double total = 0; double secs = 0; @@ -889,8 +889,8 @@ class CPExp : public RideMetric { } int cp = item->getText("CP","0").toInt(); - if (!cp && item->context->athlete->zones() && item->zoneRange >=0) - cp = item->context->athlete->zones()->getCP(item->zoneRange); + if (!cp && item->context->athlete->zones(item->isRun) && item->zoneRange >=0) + cp = item->context->athlete->zones(item->isRun)->getCP(item->zoneRange); double total = 0; double secs = 0; @@ -934,7 +934,7 @@ class WZoneTime : public RideMetric { void compute(RideItem *item, Specification, const QHash &) { - double WPRIME = item->zoneRange >= 0 ? item->context->athlete->zones()->getWprime(item->zoneRange) : 20000; + double WPRIME = item->zoneRange >= 0 ? item->context->athlete->zones(item->isRun)->getWprime(item->zoneRange) : 20000; // 4 zones QVector tiz(4); @@ -1059,8 +1059,8 @@ class WCPZoneTime : public RideMetric { void compute(RideItem *item, Specification, const QHash &) { double WPRIME = 20000; - if (item->context->athlete->zones() && item->zoneRange > 0) { - WPRIME = item->context->athlete->zones()->getWprime(item->zoneRange); + if (item->context->athlete->zones(item->isRun) && item->zoneRange > 0) { + WPRIME = item->context->athlete->zones(item->isRun)->getWprime(item->zoneRange); } // did we override CP in metadata / metrics ? @@ -1194,7 +1194,7 @@ class WZoneWork : public RideMetric { void compute(RideItem *item, Specification, const QHash &) { - double WPRIME = item->zoneRange >= 0 ? item->context->athlete->zones()->getWprime(item->zoneRange) : 20000; + double WPRIME = item->zoneRange >= 0 ? item->context->athlete->zones(item->isRun)->getWprime(item->zoneRange) : 20000; // 4 zones QVector tiz(4); diff --git a/src/WorkoutWizard.cpp b/src/WorkoutWizard.cpp index 00f0adf4c..a1e5c95b3 100644 --- a/src/WorkoutWizard.cpp +++ b/src/WorkoutWizard.cpp @@ -354,7 +354,7 @@ void AbsWattagePage::updateMetrics() metrics.append("skiba_xpower"); #if 0 //XXX REFACTOR METRICS - QHash results = rm->computeMetrics(NULL,&*workout,hackContext->athlete->zones(),hackContext->athlete->hrZones(),metrics); + QHash results = rm->computeMetrics(NULL,&*workout,hackContext->athlete->zones(false),hackContext->athlete->hrZones(),metrics); metricsSummary->updateMetrics(metrics,results); #endif } @@ -408,8 +408,8 @@ RelWattagePage::RelWattagePage(QWidget *parent) : WorkoutPage(parent) {} void RelWattagePage::initializePage() { - int zoneRange = hackContext->athlete->zones()->whichRange(QDate::currentDate()); - ftp = hackContext->athlete->zones()->getCP(zoneRange); + int zoneRange = hackContext->athlete->zones(false)->whichRange(QDate::currentDate()); + ftp = hackContext->athlete->zones(false)->getCP(zoneRange); setTitle(tr("Workout Wizard")); QString subTitle = tr("Relative Wattage Workout Wizard, current CP60 = ") + QString::number(ftp); @@ -490,7 +490,7 @@ void RelWattagePage::updateMetrics() metrics.append("skiba_bike_score"); metrics.append("skiba_xpower"); #if 0 //XXX REFACTOR METRICS - QHash results = rm->computeMetrics(NULL,&*workout,hackContext->athlete->zones(),hackContext->athlete->hrZones(),metrics); + QHash results = rm->computeMetrics(NULL,&*workout,hackContext->athlete->zones(false),hackContext->athlete->hrZones(),metrics); metricsSummary->updateMetrics(metrics,results); #endif } @@ -543,8 +543,8 @@ GradientPage::GradientPage(QWidget *parent) : WorkoutPage(parent) {} void GradientPage::initializePage() { - int zoneRange = hackContext->athlete->zones()->whichRange(QDate::currentDate()); - ftp = hackContext->athlete->zones()->getCP(zoneRange); + int zoneRange = hackContext->athlete->zones(false)->whichRange(QDate::currentDate()); + ftp = hackContext->athlete->zones(false)->getCP(zoneRange); metricUnits = hackContext->athlete->useMetricUnits; setTitle(tr("Workout Wizard")); diff --git a/src/aBikeScore.cpp b/src/aBikeScore.cpp index 0e78be187..27918eebb 100644 --- a/src/aBikeScore.cpp +++ b/src/aBikeScore.cpp @@ -166,12 +166,12 @@ class aRelativeIntensity : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { - if (item->context->athlete->zones() && item->zoneRange >= 0) { + if (item->context->athlete->zones(item->isRun) && item->zoneRange >= 0) { assert(deps.contains("a_skiba_xpower")); aXPower *xp = dynamic_cast(deps.value("a_skiba_xpower")); assert(xp); int cp = item->getText("CP","0").toInt(); - reli = xp->value(true) / (cp ? cp : item->context->athlete->zones()->getCP(item->zoneRange)); + reli = xp->value(true) / (cp ? cp : item->context->athlete->zones(item->isRun)->getCP(item->zoneRange)); secs = xp->count(); } setValue(reli); @@ -201,7 +201,7 @@ class aBikeScore : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { - if (!item->context->athlete->zones() || item->zoneRange < 0) { + if (!item->context->athlete->zones(item->isRun) || item->zoneRange < 0) { setValue(RideFile::NIL); setCount(0); return; @@ -215,7 +215,7 @@ class aBikeScore : public RideMetric { double normWork = xp->value(true) * xp->count(); double rawBikeScore = normWork * ri->value(true); int cp = item->getText("CP","0").toInt(); - double workInAnHourAtCP = (cp ? cp : item->context->athlete->zones()->getCP(item->zoneRange)) * 3600; + double workInAnHourAtCP = (cp ? cp : item->context->athlete->zones(item->isRun)->getCP(item->zoneRange)) * 3600; score = rawBikeScore / workInAnHourAtCP * 100.0; setValue(score); diff --git a/src/aCoggan.cpp b/src/aCoggan.cpp index 220ccea0a..4b6b85753 100644 --- a/src/aCoggan.cpp +++ b/src/aCoggan.cpp @@ -164,7 +164,7 @@ class aIntensityFactor : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { // no ride or no samples - if (item->zoneRange < 0 || item->context->athlete->zones() == NULL) { + if (item->zoneRange < 0 || item->context->athlete->zones(item->isRun) == NULL) { setValue(RideFile::NIL); setCount(0); return; @@ -174,7 +174,7 @@ class aIntensityFactor : public RideMetric { aNP *np = dynamic_cast(deps.value("a_coggan_np")); assert(np); int cp = item->getText("CP","0").toInt(); - rif = np->value(true) / (cp ? cp : item->context->athlete->zones()->getCP(item->zoneRange)); + rif = np->value(true) / (cp ? cp : item->context->athlete->zones(item->isRun)->getCP(item->zoneRange)); secs = np->count(); setValue(rif); @@ -207,7 +207,7 @@ class aTSS : public RideMetric { void compute(RideItem *item, Specification, const QHash &deps) { // no ride or no samples - if (item->zoneRange < 0 || item->context->athlete->zones() == NULL) { + if (item->zoneRange < 0 || item->context->athlete->zones(item->isRun) == NULL) { setValue(RideFile::NIL); setCount(0); return; @@ -221,7 +221,7 @@ class aTSS : public RideMetric { double normWork = np->value(true) * np->count(); double rawTSS = normWork * rif->value(true); int cp = item->getText("CP","0").toInt(); - double workInAnHourAtCP = (cp ? cp : item->context->athlete->zones()->getCP(item->zoneRange)) * 3600; + double workInAnHourAtCP = (cp ? cp : item->context->athlete->zones(item->isRun)->getCP(item->zoneRange)) * 3600; score = rawTSS / workInAnHourAtCP * 100.0; setValue(score);