summaryrefslogtreecommitdiff
path: root/src/tasktree.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tasktree.cc')
-rw-r--r--src/tasktree.cc48
1 files changed, 33 insertions, 15 deletions
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++) {