QString HrZones::summarize(int rnum, QVector<double> &time_in_zone) const { assert(rnum < ranges.size()); const HrZoneRange &range = ranges[rnum]; if (time_in_zone.size() < range.zones.size()) return ""; QString summary; if(range.lt > 0){ summary += "<table align=\"center\" width=\"70%\" border=\"0\">"; summary += "<tr><td align=\"center\">"; summary += tr("Threshold (bpm): %1").arg(range.lt); 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 (bpm)</td>"); summary += tr("<td align=\"center\">High (bpm)</td>"); summary += tr("<td align=\"center\">Time</td>"); summary += tr("<td align=\"center\">%</td>"); summary += "</tr>"; QColor color = QApplication::palette().alternateBase().color(); color = QColor::fromHsv(color.hue(), color.saturation() * 2, color.value()); 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; int lo, hi; double trimp; zoneInfo(rnum, zone, name, desc, lo, hi, trimp); 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(lo); if (hi == INT_MAX) summary += "<td align=\"center\">MAX</td>"; else summary += QString("<td align=\"center\">%1</td>").arg(hi); 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 Zones::summarize(int rnum, QVector<double> &time_in_zone, QColor color) const { assert(rnum < ranges.size()); const ZoneRange &range = ranges[rnum]; assert(time_in_zone.size() == range.zones.size()); QString summary; if(range.cp > 0) { summary += "<table align=\"center\" width=\"70%\" border=\"0\">"; summary += "<tr><td align=\"center\">"; summary += tr("Critical Power (watts): %1").arg(range.cp); 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 (watts)</td>"); summary += tr("<td align=\"center\">High (watts)</td>"); 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; int 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(lo); if (hi == INT_MAX) summary += "<td align=\"center\">MAX</td>"; else summary += QString("<td align=\"center\">%1</td>").arg(hi); 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 Zones::summarize(int rnum, QVector<double> &time_in_zone) const { assert(rnum < ranges.size()); ZoneRange *range = ranges[rnum]; assert(time_in_zone.size() == range->zones.size()); QString summary; if(range->cp > 0){ summary += "<table align=\"center\" width=\"70%\" border=\"0\">"; summary += "<tr><td align=\"center\">"; summary += tr("Critical Power: %1").arg(range->cp); summary += "</td></tr></table>"; } summary += "<table align=\"center\" width=\"70%\" "; summary += "border=\"0\">"; summary += "<tr>"; summary += "<td align=\"center\">Zone</td>"; summary += "<td align=\"center\">Description</td>"; summary += "<td align=\"center\">Low</td>"; summary += "<td align=\"center\">High</td>"; summary += "<td align=\"center\">Time</td>"; summary += "</tr>"; QColor color = QApplication::palette().alternateBase().color(); color = QColor::fromHsv(color.hue(), color.saturation() * 2, color.value()); for (int zone = 0; zone < time_in_zone.size(); ++zone) { if (time_in_zone[zone] > 0.0) { QString name, desc; int 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(lo); if (hi == INT_MAX) summary += "<td align=\"center\">MAX</td>"; else summary += QString("<td align=\"center\">%1</td>").arg(hi); summary += QString("<td align=\"center\">%1</td>") .arg(time_to_string((unsigned) round(time_in_zone[zone]))); summary += "</tr>"; } } summary += "</table>"; return summary; }
void deliveryController::ad(QueryString &qs) { Log &error = app->GetErrorLog(); int zoneid = 0; try { zoneid = lexical_cast<int>(qs["zoneid"]); } catch (bad_lexical_cast &e) { error.LogFmt("zoneid [%s] %s", qs["zoneid"].c_str(), e.what()); response->StringResult(" "); return; } NamedSemiSpace space(SHARED_MEM_OBJ_NAME, SHARED_MEM_OBJ_SIZE); space.Open(); boost::scoped_ptr<ZoneInfo> zoneInfo(GetZoneInfoById(zoneid, space)); if (zoneInfo == NULL) { error.LogFmt("ZoneInfo by id [%d], not found in Shared Memory Object named [%s] size[%d]", zoneid, SHARED_MEM_OBJ_NAME, SHARED_MEM_OBJ_SIZE); response->StringResult(" "); space.Close(); return ; } printf("zone id:%d, name:%s\n", zoneInfo->id, zoneInfo->name.c_str()); std::vector<AdInfo *> adInfos; BOOST_FOREACH(int bannerid, zoneInfo->linked_banners) { printf("linked banner id:%d\n", bannerid); AdInfo *adInfo = GetAdInfoById(bannerid, space); if (adInfo == NULL) continue; printf("ad id:%d, weight:%d,instance:%s\n", adInfo->banner_id, adInfo->campaign_weight,adInfo->template_string.c_str()); adInfos.push_back(adInfo); } Information info = { request, response, &qs, }; filter(adInfos, info, VisitorFilter); filter(adInfos, info, StandardFilter); AdInfo *adInfo = SelectOne(adInfos); if (adInfo == NULL) { std::string out = "no ad selected"; response->StringResult(out); space.Close(); return ; } int rnd = std::rand(); View v("__db"); v.DataBind(qs); v.DataBind(*config); ViewBag &bag = v.getViewBag(); bag["rnd"] = boost::lexical_cast<std::string>(rnd); bag["cb"] = bag["rnd"]; ViewEngine ve; std::string result = ve.Out(v, adInfo->template_string); response->StringResult(result); space.Close(); return ; }
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; }