diff --git a/src/RideSummaryWindow.cpp b/src/RideSummaryWindow.cpp index c92578887..abdc01c80 100644 --- a/src/RideSummaryWindow.cpp +++ b/src/RideSummaryWindow.cpp @@ -279,6 +279,72 @@ RideSummaryWindow::htmlSummary() const summary += mainWindow->zones()->summarize(rideItem->zoneRange(), time_in_zone); } + if (ride->intervals().size() > 0) { + bool firstRow = true; + QStringList intervalMetrics; + intervalMetrics << "workout_time"; + intervalMetrics << "total_distance"; + intervalMetrics << "total_work"; + intervalMetrics << "average_power"; + intervalMetrics << "skiba_xpower"; + intervalMetrics << "max_power"; + intervalMetrics << "average_hr"; + intervalMetrics << "ninety_five_percent_hr"; + intervalMetrics << "average_cad"; + intervalMetrics << "average_speed"; + summary += "

Intervals

\n

\n"; + summary += "intervals()) { + RideFile f(ride->startTime(), ride->recIntSecs()); + for (int i = ride->intervalBegin(interval); i < ride->dataPoints().size(); ++i) { + const RideFilePoint *p = ride->dataPoints()[i]; + if (p->secs >= interval.stop) + break; + f.appendPoint(p->secs, p->cad, p->hr, p->km, p->kph, p->nm, + p->watts, p->alt, p->lon, p->lat, 0); + } + QHash metrics = + RideMetric::computeMetrics(&f, mainWindow->zones(), intervalMetrics); + if (firstRow) { + summary += ""; + summary += ""; + foreach (QString symbol, intervalMetrics) { + RideMetricPtr m = metrics.value(symbol); + summary += ""; + } + summary += ""; + firstRow = false; + } + if (even) + summary += ""; + else { + QColor color = QApplication::palette().alternateBase().color(); + color = QColor::fromHsv(color.hue(), color.saturation() * 2, color.value()); + summary += ""; + } + even = !even; + summary += ""; + foreach (QString symbol, intervalMetrics) { + RideMetricPtr m = metrics.value(symbol); + QString s(""); + if (m->units(metricUnits) == "seconds") + summary += s.arg(time_to_string(m->value(metricUnits))); + else + summary += s.arg(m->value(metricUnits), 0, 'f', m->precision()); + } + summary += ""; + } + summary += "
Interval Name" + m->name(); + if (m->units(metricUnits) == "seconds") + ; // don't do anything + else if (m->units(metricUnits).size() > 0) + summary += " (" + m->units(metricUnits) + ")"; + summary += "
" + interval.name + "%1
"; + } + + // TODO: Ergomo uses non-consecutive interval numbers. // Seems to use 0 when not in an interval // and an integer < 30 when in an interval.