void WorkoutMetricsSummary::updateMetrics(QStringList &order, QHash<QString,RideMetricPtr> &metrics) { int row = 0; foreach(QString name, order) { RideMetricPtr rmp = metrics[name]; if(!metricMap.contains(name)) { QLabel *label = new QLabel((rmp->name()) + ":"); label->setTextFormat(Qt::RichText); QLabel *lcd = new QLabel(); metricMap[name] = QPair<QLabel*,QLabel*>(label,lcd); layout->addWidget(label,metricMap.size(),0); layout->addWidget(lcd,metricMap.size(),1); } QLabel *lcd = metricMap[name].second; if(name == "time_riding") { QTime start (0,0,0); QTime time = start.addSecs(rmp->value(true)); QString s = time.toString("HH:mm:ss"); //qDebug() << s << " " << time.second(); lcd->setText(s); } else { lcd->setText(QString::number(rmp->value(true),'f',rmp->precision()) + " " + (rmp->units(true)) ); } //qDebug() << name << ":" << (int)rmp->value(true); row++; }
void IntervalSummaryWindow::calcInterval(IntervalItem* interval, QString& html) { const RideFile* ride = context->currentRide(); bool metricUnits = context->athlete->useMetricUnits; RideFile f(ride->startTime(), ride->recIntSecs()); f.context = context; int start = ride->timeIndex(interval->start); int end = ride->timeIndex(interval->stop); for (int i = start; i <= end; ++i) { const RideFilePoint *p = ride->dataPoints()[i]; f.appendPoint(p->secs, p->cad, p->hr, p->km, p->kph, p->nm, p->watts, p->alt, p->lon, p->lat, p->headwind, p->slope, p->temp, p->lrbalance, p->lte, p->rte, p->lps, p->rps, p->smo2, p->thb, 0); // derived data RideFilePoint *l = f.dataPoints().last(); l->np = p->np; l->xp = p->xp; l->apower = p->apower; } if (f.dataPoints().size() == 0) { // Interval empty, do not compute any metrics html += "<i>" + tr("empty interval") + "</tr>"; } QString s; if (appsettings->contains(GC_SETTINGS_INTERVAL_METRICS)) s = appsettings->value(this, GC_SETTINGS_INTERVAL_METRICS).toString(); else s = GC_SETTINGS_INTERVAL_METRICS_DEFAULT; QStringList intervalMetrics = s.split(","); QHash<QString,RideMetricPtr> metrics = RideMetric::computeMetrics(context, &f, context->athlete->zones(), context->athlete->hrZones(), intervalMetrics); html += "<b>" + interval->text(0) + "</b>"; html += "<table align=\"center\" width=\"90%\" "; html += "cellspacing=0 border=0>"; foreach (QString symbol, intervalMetrics) { RideMetricPtr m = metrics.value(symbol); if (!m) continue; html += "<tr>"; // left column (names) html += "<td align=\"right\" valign=\"bottom\">" + m->name() + "</td>"; // right column (values) QString s("<td align=\"center\">%1</td>"); if (m->units(metricUnits) == "seconds" || m->units(metricUnits) == tr("seconds")) html += s.arg(time_to_string(m->value(metricUnits))); else if (m->internalName() == "Pace") { html += s.arg(QTime(0,0,0,0).addSecs(m->value(metricUnits)*60).toString("mm:ss")); } else html += s.arg(m->value(metricUnits), 0, 'f', m->precision()); html += "<td align=\"left\" valign=\"bottom\">"; if (m->units(metricUnits) == "seconds" || m->units(metricUnits) == tr("seconds")) ; // don't do anything else if (m->units(metricUnits).size() > 0) html += m->units(metricUnits); html += "</td>"; html += "</tr>"; }