/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * tasktree.h * * Tue Mar 27 11:07:48 CEST 2012 * Copyright 2012 Jonas Suhr Christensen * jsc@umbraculum.org ****************************************************************************/ /* * This file is part of Munia. * * Munia is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Munia is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Munia; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #pragma once #include #include #include #include "task.h" class node; typedef std::list NodeList; class node { public: taskid_t id; node* parent; task_t data; NodeList children; std::string toXML(std::string prefix); }; typedef node node_t; class TaskTree { friend class XmlParser; public: TaskTree(); ~TaskTree(); taskid_t createId(); TaskIdList insertAsChild(taskid_t parentid, taskid_t id, task_t data) throw (std::exception); TaskIdList remove(taskid_t id) throw (std::exception); TaskIdList move(taskid_t id, taskid_t newParentId) throw (std::exception); TaskIdList updateData(taskid_t id, const std::string &name, const std::string &value) throw (std::exception); task_t data(taskid_t id) throw (std::exception); TaskIdList bfs(taskid_t id) throw (std::exception); TaskIdList ancestorList(taskid_t id) throw (std::exception); void toStdOut(); std::string toXML(); void fromXML(std::string xml); taskid_t nextid; private: node_t* createNode(taskid_t id); void insertChild(node_t* parent, node_t* child); node_t* root; std::map id2node; };