From c624755efee924b68bfaee36bc5a37422bda4be8 Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Fri, 4 May 2012 16:16:11 +0200 Subject: IMplemneted remove. --- src/tasktree.cc | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) (limited to 'src/tasktree.cc') diff --git a/src/tasktree.cc b/src/tasktree.cc index 77c8fc8..fc84efa 100644 --- a/src/tasktree.cc +++ b/src/tasktree.cc @@ -90,22 +90,38 @@ TaskIdList TaskTree::insertAsChild(taskid_t parentid, taskid_t id, task_t data) TaskIdList TaskTree::remove(taskid_t id) throw (std::exception) { - //todo: move all childrin to lost+found - WARN(tasktree, "Feature not implemneted yet\n"); TaskIdList affectedNodes; - return affectedNodes; - - /* - try { - node_t* node = id2node.at(id); - + affectedNodes.push_back(id); + TaskIdList ancestors = ancestorList(id); + concatTaskIdLists(affectedNodes, ancestors); + +// printf("Removing %d\n", id); + +// printf("!!!!!affected nodes %d\n", affectedNodes.size()); + + node_t* node = id2node[id]; + +// printf("node: %p, id %d, parent %p\n", node, node->data.id, node->parent); + +// printf("!!!!!size %d\n", node->parent->children.size()); + node->parent->children.remove(node); + for(NodeList::iterator it = node->parent->children.begin(); + it != node->parent->children.end(); + it++) { +// printf("%p\n", *it); } - catch (std::exception& e) { - throw std::exception(); +// printf("!!!!!size %d\n", node->parent->children.size()); + + TaskIdList idlist = bfs(id); + TaskIdList::reverse_iterator it = idlist.rbegin(); + while(it != idlist.rend()) { + task_t task = data(*it); +// node_t* n = id2node[task.id]; +// delete(n); + it++; } return affectedNodes; - */ } TaskIdList TaskTree::move(taskid_t id, taskid_t toid) @@ -125,6 +141,8 @@ TaskIdList TaskTree::move(taskid_t id, taskid_t toid) child->parent->children.remove(child); newparent->children.push_back(child); + child->parent = newparent; + affectedNodes.push_back(id); // affectedNodes.push_back(child->parent->id); TaskIdList ancestors = ancestorList(id); @@ -233,10 +251,10 @@ TaskIdList TaskTree::ancestorList(taskid_t id) } // printf("Collected %d ancestors to %u\n", ancestors.size(), id); - for(TaskIdList::iterator it = ancestors.begin(); - it != ancestors.end(); it++) { +// for(TaskIdList::iterator it = ancestors.begin(); +// it != ancestors.end(); it++) { // printf("\tancestor %u\n", *it); - } +// } return ancestors; } @@ -256,7 +274,7 @@ void TaskTree::insertChild(node_t* parent, node_t* child) { static void printNode(node_t* node, std::string prefix) { if(!node) return; task_t t = node->data; - printf("%s- %u - %s\n", prefix.c_str(), t.id, t.title.c_str()); + printf("%s- %u - %s (%p)\n", prefix.c_str(), t.id, t.title.c_str(), node); NodeList::iterator it; for(it = node->children.begin(); it != node->children.end(); it++) { -- cgit v1.2.3