diff options
Diffstat (limited to 'src/tasktree.cc')
-rw-r--r-- | src/tasktree.cc | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/src/tasktree.cc b/src/tasktree.cc index 5c58e3c..ee181eb 100644 --- a/src/tasktree.cc +++ b/src/tasktree.cc @@ -27,10 +27,39 @@ */ #include "tasktree.h" +#include "xmlparser.h" + #include "debug.h" +#include "xml_encode_decode.h" + #define ROOT_PARENT_ID -1 +static inline std::string id2str(taskid_t id) +{ + char buf[32]; + sprintf(buf, "%u", id); + return buf; +} + +std::string node::toXML(std::string prefix) +{ + std::string xml; + + xml += prefix + "<task id=\""+id2str(id)+"\">\n"; + xml += prefix + " <title>" + xml_encode(data.title) + "</title>\n"; + xml += prefix + " <children>\n"; + NodeList::iterator ni = children.begin(); + while(ni != children.end()) { + xml += (*ni)->toXML(prefix + " "); + ni++; + } + xml += prefix + " </children>\n"; + xml += prefix + "</task>\n"; + + return xml; +} + static void concatTaskIdLists(TaskIdList& pre, TaskIdList& post) { pre.insert(pre.end(), post.begin(), post.end()); // for(TaskIdList::iterator it = post.begin(); @@ -190,7 +219,7 @@ task_t TaskTree::data(taskid_t id) try { node_t* node = id2node.at(id); task_t tmp = node->data; - t.id = tmp.id; + t.id = node->id; t.title = tmp.title; // printf("!!!!t.id and tmp.id in data: %d and %d\n", t.id, tmp.id); if(node->parent) t.parentid = node->parent->id; @@ -270,14 +299,18 @@ node_t* TaskTree::createNode(taskid_t id) { } void TaskTree::insertChild(node_t* parent, node_t* child) { - parent->children.push_back(child); + if(parent) parent->children.push_back(child); + else { + rootid = child->id; + root = child; + } child->parent = parent; } static void printNode(node_t* node, std::string prefix) { if(!node) return; task_t t = node->data; - printf("%s- %u - %s (%p)\n", prefix.c_str(), t.id, t.title.c_str(), node); + printf("%s- %u - %s (%p)\n", prefix.c_str(), node->id, t.title.c_str(), node); NodeList::iterator it; for(it = node->children.begin(); it != node->children.end(); it++) { @@ -290,6 +323,25 @@ void TaskTree::toStdOut() { printNode(root, ""); } +std::string TaskTree::toXML() +{ + node_t *root = id2node.at(rootid); + + std::string xml; + xml += "<?xml version='1.0' encoding='UTF-8'?>\n"; + xml += "<tasktree>\n"; + xml += root->toXML(" "); + xml += "</tasktree>"; + + return xml; +} + +void TaskTree::fromXML(std::string xml) +{ + XmlParser p(this); + p.parse(xml.c_str(), xml.size()); +} + #ifdef TEST_TASKTREE //Additional dependency files |