QString PaceZones::summarize(int rnum, QVector<double> &time_in_zone, QColor color) const { assert(rnum < ranges.size()); const PaceZoneRange &range = ranges[rnum]; if (time_in_zone.size() != range.zones.size()) time_in_zone.resize(range.zones.size()); // are we in metric or imperial ? bool metric = appsettings->value(this, GC_PACE, true).toBool(); QString cvunit = metric ? "kph" : "mph"; QString paceunit = metric ? "min/km" : "min/mile"; double cvfactor = metric ? 1.0f : KM_PER_MILE; QString summary; if(range.cv > 0) { summary += "<table align=\"center\" width=\"70%\" border=\"0\">"; summary += "<tr><td align=\"center\">"; summary += tr("Critical Velocity: %3%4 (%2%1)").arg(cvunit).arg(range.cv / cvfactor, 0, 'f', 2) .arg(kphToPace(range.cv, metric)) .arg(paceunit); summary += "</td></tr></table>"; } summary += "<table align=\"center\" width=\"70%\" "; summary += "border=\"0\">"; summary += "<tr>"; summary += tr("<td align=\"center\">Zone</td>"); summary += tr("<td align=\"center\">Description</td>"); summary += tr("<td align=\"center\">Low (%1)</td>").arg(paceunit); summary += tr("<td align=\"center\">High (%1)</td>").arg(paceunit); summary += tr("<td align=\"center\">Time</td>"); summary += tr("<td align=\"center\">%</td>"); summary += "</tr>"; double duration = 0; foreach(double v, time_in_zone) { duration += v; } for (int zone = 0; zone < time_in_zone.size(); ++zone) { if (time_in_zone[zone] > 0.0) { QString name, desc; double lo, hi; zoneInfo(rnum, zone, name, desc, lo, hi); if (zone % 2 == 0) summary += "<tr bgcolor='" + color.name() + "'>"; else summary += "<tr>"; summary += QString("<td align=\"center\">%1</td>").arg(name); summary += QString("<td align=\"center\">%1</td>").arg(desc); summary += QString("<td align=\"center\">%1</td>").arg(kphToPace(lo, metric)); if (hi == INT_MAX) summary += "<td align=\"center\">MAX</td>"; else summary += QString("<td align=\"center\">%1</td>").arg(kphToPace(hi, metric)); summary += QString("<td align=\"center\">%1</td>").arg(time_to_string((unsigned) round(time_in_zone[zone]))); summary += QString("<td align=\"center\">%1</td>") .arg((double)time_in_zone[zone]/duration * 100, 0, 'f', 0); summary += "</tr>"; } } summary += "</table>"; return summary; }
QString PaceZones::kphToPaceString(double kph, bool metric) const { return kphToPace(kph, metric, swim); }