From d39298499365d7f2fc61e3f32bd0d255d0875812 Mon Sep 17 00:00:00 2001 From: Ale Martinez Date: Sat, 30 Jan 2021 21:41:10 -0300 Subject: [PATCH] Add config(sex) and config(dob) to formulas To enable formulas like Harris-Benedict basal metabolic rate or TRIMP variants which depend on sex and age. Fixes #3523 [publish binaries] --- doc/user/formula-syntax.txt | 2 ++ src/Charts/LTMTool.cpp | 2 ++ src/Charts/OverviewItems.cpp | 2 ++ src/Charts/UserChart.cpp | 2 ++ src/Core/DataFilter.cpp | 14 +++++++++++++- src/Core/UserData.cpp | 2 ++ src/Gui/EditUserMetricDialog.cpp | 2 ++ src/Gui/SearchBox.cpp | 2 ++ 8 files changed, 27 insertions(+), 1 deletion(-) diff --git a/doc/user/formula-syntax.txt b/doc/user/formula-syntax.txt index 6735949a9..3c82e008c 100644 --- a/doc/user/formula-syntax.txt +++ b/doc/user/formula-syntax.txt @@ -63,6 +63,8 @@ config(cp) config(w) config(pmax) config(cv) +config(sex) +config(dob) config(height) config(weight) config(lthr) diff --git a/src/Charts/LTMTool.cpp b/src/Charts/LTMTool.cpp index a1255699c..2364b8c99 100644 --- a/src/Charts/LTMTool.cpp +++ b/src/Charts/LTMTool.cpp @@ -1875,6 +1875,8 @@ EditMetricDetailDialog::EditMetricDetailDialog(Context *context, LTMTool *ltmToo list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; + list << "config(sex)"; + list << "config(dob)"; list << "config(height)"; list << "config(weight)"; list << "config(lthr)"; diff --git a/src/Charts/OverviewItems.cpp b/src/Charts/OverviewItems.cpp index f15ede2cb..92cf47a47 100644 --- a/src/Charts/OverviewItems.cpp +++ b/src/Charts/OverviewItems.cpp @@ -2419,6 +2419,8 @@ OverviewItemConfig::OverviewItemConfig(ChartSpaceItem *item) : QWidget(item->par list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; + list << "config(sex)"; + list << "config(dob)"; list << "config(height)"; list << "config(weight)"; list << "config(lthr)"; diff --git a/src/Charts/UserChart.cpp b/src/Charts/UserChart.cpp index 9acbb67a6..4f08add76 100644 --- a/src/Charts/UserChart.cpp +++ b/src/Charts/UserChart.cpp @@ -1118,6 +1118,8 @@ EditUserSeriesDialog::EditUserSeriesDialog(Context *context, bool rangemode, Gen list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; + list << "config(sex)"; + list << "config(dob)"; list << "config(height)"; list << "config(weight)"; list << "config(lthr)"; diff --git a/src/Core/DataFilter.cpp b/src/Core/DataFilter.cpp index 70c545a08..8af6ead44 100644 --- a/src/Core/DataFilter.cpp +++ b/src/Core/DataFilter.cpp @@ -1544,7 +1544,7 @@ void Leaf::validateFilter(Context *context, DataFilterRuntime *df, Leaf *leaf) // is the symbol valid? QRegExp bestValidSymbols("^(apower|power|hr|cadence|speed|torque|vam|xpower|isopower|wpk)$", Qt::CaseInsensitive); QRegExp tizValidSymbols("^(power|hr)$", Qt::CaseInsensitive); - QRegExp configValidSymbols("^(cranklength|cp|ftp|w\\'|pmax|cv|height|weight|lthr|maxhr|rhr|units)$", Qt::CaseInsensitive); + QRegExp configValidSymbols("^(cranklength|cp|ftp|w\\'|pmax|cv|height|weight|lthr|maxhr|rhr|units|dob|sex)$", Qt::CaseInsensitive); QRegExp constValidSymbols("^(e|pi)$", Qt::CaseInsensitive); // just do basics for now QRegExp dateRangeValidSymbols("^(start|stop)$", Qt::CaseInsensitive); // date range QRegExp pmcValidSymbols("^(stress|lts|sts|sb|rr|date)$", Qt::CaseInsensitive); @@ -3328,6 +3328,12 @@ Result Leaf::eval(DataFilterRuntime *df, Leaf *leaf, Result x, long it, RideItem return Result(appsettings->cvalue(m->context->athlete->cyclist, GC_CRANKLENGTH, 175.00f).toDouble() / 1000.0); } + // + // DOB and SEX + // + double DOB = QDate(1900,1,1).daysTo(appsettings->cvalue(m->context->athlete->cyclist, GC_DOB).toDate()); + QString SEX = appsettings->cvalue(m->context->athlete->cyclist, GC_SEX).toInt() ? "Female" : "Male"; + if (symbol == "cp") { return Result(CP); } @@ -3361,6 +3367,12 @@ Result Leaf::eval(DataFilterRuntime *df, Leaf *leaf, Result x, long it, RideItem if (symbol == "units") { return Result(GlobalContext::context()->useMetricUnits ? 1 : 0); } + if (symbol == "dob") { + return Result(DOB); + } + if (symbol == "sex") { + return Result(SEX); + } } // bool(expr) diff --git a/src/Core/UserData.cpp b/src/Core/UserData.cpp index 62f6e86c6..049a046b7 100644 --- a/src/Core/UserData.cpp +++ b/src/Core/UserData.cpp @@ -127,6 +127,8 @@ EditUserDataDialog::EditUserDataDialog(Context *context, UserData *here) : list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; + list << "config(sex)"; + list << "config(dob)"; list << "config(height)"; list << "config(weight)"; list << "config(lthr)"; diff --git a/src/Gui/EditUserMetricDialog.cpp b/src/Gui/EditUserMetricDialog.cpp index f1aab38a0..60b517d54 100644 --- a/src/Gui/EditUserMetricDialog.cpp +++ b/src/Gui/EditUserMetricDialog.cpp @@ -129,6 +129,8 @@ EditUserMetricDialog::EditUserMetricDialog(QWidget *parent, Context *context, Us list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; + list << "config(sex)"; + list << "config(dob)"; list << "config(height)"; list << "config(weight)"; list << "config(lthr)"; diff --git a/src/Gui/SearchBox.cpp b/src/Gui/SearchBox.cpp index 016640e60..c48f046a2 100644 --- a/src/Gui/SearchBox.cpp +++ b/src/Gui/SearchBox.cpp @@ -162,6 +162,8 @@ SearchBox::configChanged(qint32) list << "config(w')"; list << "config(pmax)"; list << "config(cv)"; + list << "config(sex)"; + list << "config(dob)"; list << "config(height)"; list << "config(weight)"; list << "config(lthr)";