diff --git a/src/Filter.cpp b/src/Filter.cpp index f6d0529ac..d98f9f576 100644 --- a/src/Filter.cpp +++ b/src/Filter.cpp @@ -35,6 +35,23 @@ extern Context context; +//////////////////////////////////////////////////////////////////////////////// +// Const iterator that can be derefenced into a Task by domSource. +static std::vector ::const_iterator contextTask; + +//////////////////////////////////////////////////////////////////////////////// +static bool domSource (const std::string& identifier, Variant& value) +{ + std::string stringValue = context.dom.get (identifier, *contextTask); + if (stringValue != identifier) + { + value = Variant (stringValue); + return true; + } + + return false; +} + //////////////////////////////////////////////////////////////////////////////// Filter::Filter () : _startCount (0) @@ -72,7 +89,7 @@ void Filter::subset (const std::vector & input, std::vector & output Eval eval; eval.addSource (namedDates); - // TODO Need DOM source. + eval.addSource (domSource); eval.compileExpression (filterExpr); std::vector ::const_iterator task; @@ -82,6 +99,8 @@ void Filter::subset (const std::vector & input, std::vector & output if (oldFilter) output.push_back (*task); + contextTask = task; + Variant var; eval.evaluateCompiledExpression (var); @@ -122,7 +141,7 @@ void Filter::subset (std::vector & output) Eval eval; eval.addSource (namedDates); - // TODO Need DOM source. + eval.addSource (domSource); eval.compileExpression (filterExpr); output.clear (); @@ -134,6 +153,8 @@ void Filter::subset (std::vector & output) if (oldFilter) output.push_back (*task); + contextTask = task; + Variant var; eval.evaluateCompiledExpression (var); @@ -153,6 +174,8 @@ void Filter::subset (std::vector & output) if (oldFilter) output.push_back (*task); + contextTask = task; + Variant var; eval.evaluateCompiledExpression (var);