From db6cecd2f32bb7e270c449f6273d19e78d12f7a7 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Tue, 24 Jun 2014 22:16:57 -0400 Subject: [PATCH] DOM - When attributes are accessed via DOM references, the value extracted is now imbued with the attribute type. --- src/DOM.cpp | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/DOM.cpp b/src/DOM.cpp index 85a4b2656..b17c35ea1 100644 --- a/src/DOM.cpp +++ b/src/DOM.cpp @@ -245,8 +245,20 @@ bool DOM::get (const std::string& name, const Task& task, Variant& value) std::string canonical; if (task.size () && context.parser.canonicalize (canonical, "attribute", name)) { - value = Variant (task.get (canonical)); - return true; + Column* column = context.columns[canonical]; + if (column) + { + if (column->type () == "date") + value = Variant (task.get_date (canonical), Variant::type_date); + else if (column->type () == "duration") + value = Variant ((time_t) Duration (task.get (canonical)), Variant::type_duration); + else if (column->type () == "numeric") + value = Variant (task.get_float (canonical)); + else + value = Variant (task.get (canonical)); + + return true; + } } } else if (elements.size () > 1) @@ -301,14 +313,19 @@ bool DOM::get (const std::string& name, const Task& task, Variant& value) if (elements.size () == 2) { Column* column = context.columns[canonical]; - if (column && column->type () == "date") - value = Variant (ref.get_date (canonical), Variant::type_date); - else if (column && column->type () == "duration") - value = Variant ((time_t) Duration (ref.get (canonical)), Variant::type_duration); - else - value = Variant (ref.get (canonical)); + if (column) + { + if (column->type () == "date") + value = Variant (ref.get_date (canonical), Variant::type_date); + else if (column->type () == "duration") + value = Variant ((time_t) Duration (ref.get (canonical)), Variant::type_duration); + else if (column->type () == "numeric") + value = Variant (ref.get_float (canonical)); + else + value = Variant (ref.get (canonical)); - return true; + return true; + } } else if (elements.size () == 3) {