From 3957c3567ace4445ddd36cc3ca8e5339e247174a Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 31 Jan 2016 20:09:10 -0500 Subject: [PATCH] ColTypeString: Migrated part of Task::modify to ::modify --- src/columns/ColTypeString.cpp | 36 ++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/columns/ColTypeString.cpp b/src/columns/ColTypeString.cpp index 10ee41480..a15d919a6 100644 --- a/src/columns/ColTypeString.cpp +++ b/src/columns/ColTypeString.cpp @@ -26,6 +26,16 @@ #include #include +#include +#include +#include +#include +#include +#include +#include + +extern Context context; +extern Task& contextTask; //////////////////////////////////////////////////////////////////////////////// ColumnTypeString::ColumnTypeString () @@ -54,7 +64,31 @@ void ColumnTypeString::render ( //////////////////////////////////////////////////////////////////////////////// void ColumnTypeString::modify (Task& task, const std::string& value) { - task.set (_name, value); + // Try to evaluate 'value'. It might work. + Variant evaluatedValue; + try + { + Eval e; + e.addSource (domSource); + e.addSource (namedDates); + contextTask = task; + e.evaluateInfixExpression (value, evaluatedValue); + } + + catch (...) + { + evaluatedValue = Variant (value); + } + + std::string label = " MODIFICATION "; + std::string strValue = (std::string) evaluatedValue; + if (validate (strValue)) + { + context.debug (label + _name + " <-- '" + strValue + "' <-- '" + value + "'"); + task.set (_name, strValue); + } + else + throw format (STRING_INVALID_MOD, _name, value); } ////////////////////////////////////////////////////////////////////////////////