diff --git a/src/DataFilter.cpp b/src/DataFilter.cpp index dfcc7a0ca..96d385353 100644 --- a/src/DataFilter.cpp +++ b/src/DataFilter.cpp @@ -1027,7 +1027,7 @@ void Leaf::validateFilter(Context *context, DataFilterRuntime *df, Leaf *leaf) // is the symbol valid? QRegExp bestValidSymbols("^(apower|power|hr|cadence|speed|torque|vam|xpower|np|wpk)$", Qt::CaseInsensitive); QRegExp tizValidSymbols("^(power|hr)$", Qt::CaseInsensitive); - QRegExp configValidSymbols("^(cranklength|cp|w\\'|pmax|cv|d\\'|scv|sd\\'|height|weight|lthr|maxhr|rhr|units)$", Qt::CaseInsensitive); + QRegExp configValidSymbols("^(cranklength|cp|ftp|w\\'|pmax|cv|d\\'|scv|sd\\'|height|weight|lthr|maxhr|rhr|units)$", Qt::CaseInsensitive); QRegExp constValidSymbols("^(e|pi)$", Qt::CaseInsensitive); // just do basics for now QRegExp dateRangeValidSymbols("^(start|stop)$", Qt::CaseInsensitive); // date range @@ -1632,6 +1632,7 @@ Result Leaf::eval(DataFilterRuntime *df, Leaf *leaf, float x, RideItem *m, RideF // Get CP and W' estimates for date of ride // double CP = 0; + double FTP = 0; double WPRIME = 0; double PMAX = 0; int zoneRange; @@ -1640,10 +1641,17 @@ Result Leaf::eval(DataFilterRuntime *df, Leaf *leaf, float x, RideItem *m, RideF // if range is -1 we need to fall back to a default value zoneRange = m->context->athlete->zones(m->isRun)->whichRange(m->dateTime.date()); - CP = zoneRange >= 0 ? m->context->athlete->zones(m->isRun)->getCP(zoneRange) : 0; + FTP = 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; + // use CP for FTP, or is it configured separately + bool useCPForFTP = (appsettings->cvalue(m->context->athlete->cyclist, + m->context->athlete->zones(m->isRun)->useCPforFTPSetting(), 0).toInt() == 0); + if (zoneRange >= 0 && !useCPForFTP) { + FTP = m->context->athlete->zones(m->isRun)->getFTP(zoneRange); + } + // did we override CP in metadata ? int oCP = m->getText("CP","0").toInt(); int oW = m->getText("W'","0").toInt(); @@ -1695,6 +1703,9 @@ Result Leaf::eval(DataFilterRuntime *df, Leaf *leaf, float x, RideItem *m, RideF if (symbol == "cp") { return Result(CP); } + if (symbol == "ftp") { + return Result(FTP); + } if (symbol == "w'") { return Result(WPRIME); } diff --git a/src/EditUserMetricDialog.cpp b/src/EditUserMetricDialog.cpp index a6898f03c..c3be452a5 100644 --- a/src/EditUserMetricDialog.cpp +++ b/src/EditUserMetricDialog.cpp @@ -123,6 +123,7 @@ EditUserMetricDialog::EditUserMetricDialog(QWidget *parent, Context *context, Us // add special functions (older code needs fixing !) list << "config(cranklength)"; list << "config(cp)"; + list << "config(ftp)"; list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; diff --git a/src/LTMTool.cpp b/src/LTMTool.cpp index b637102cd..15a4abd8d 100644 --- a/src/LTMTool.cpp +++ b/src/LTMTool.cpp @@ -1805,6 +1805,7 @@ EditMetricDetailDialog::EditMetricDetailDialog(Context *context, LTMTool *ltmToo // add special functions (older code needs fixing !) list << "config(cranklength)"; list << "config(cp)"; + list << "config(ftp)"; list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; diff --git a/src/SearchBox.cpp b/src/SearchBox.cpp index 1e3f9cec6..4cd338d9d 100644 --- a/src/SearchBox.cpp +++ b/src/SearchBox.cpp @@ -154,6 +154,7 @@ SearchBox::configChanged(qint32) // add special functions (older code needs fixing !) list << "config(cranklength)"; list << "config(cp)"; + list << "config(ftp)"; list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; diff --git a/src/UserData.cpp b/src/UserData.cpp index fdd36e6e1..595d1a055 100644 --- a/src/UserData.cpp +++ b/src/UserData.cpp @@ -111,6 +111,7 @@ EditUserDataDialog::EditUserDataDialog(Context *context, UserData *here) : // add special functions (older code needs fixing !) list << "config(cranklength)"; list << "config(cp)"; + list << "config(ftp)"; list << "config(w')"; list << "config(pmax)"; list << "config(cv)";