summaryrefslogtreecommitdiff
path: root/src/taskmanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/taskmanager.h')
-rw-r--r--src/taskmanager.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/taskmanager.h b/src/taskmanager.h
new file mode 100644
index 0000000..fb8c965
--- /dev/null
+++ b/src/taskmanager.h
@@ -0,0 +1,185 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * taskmanager.h
+ *
+ * Fri Feb 24 08:16:29 CET 2012
+ * Copyright 2012 Bent Bisballe Nyeng & Jonas Suhr Christensen
+ * deva@aasimon.org & 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.
+ */
+#ifndef __MUNIA_TASKMANAGER_H__
+#define __MUNIA_TASKMANAGER_H__
+
+#include <list>
+#include <string>
+#include <stdio.h>
+#include <exception>
+
+#include "task.h"
+#include "tasktree.h"
+
+class TaskManager {
+public:
+ TaskManager();
+ ~TaskManager();
+ task_t createTask();
+
+ TaskIdList addTask(task_t t, taskid_t, taskid_t parentid) throw (std::exception);
+ TaskIdList updateTask(taskid_t id, task_t task) throw (std::exception);
+ TaskIdList deleteTask(taskid_t id) throw (std::exception);
+ TaskIdList moveTask(taskid_t id, taskid_t newParent) throw (std::exception);
+
+private:
+ // TaskIdList ancestorList(taskid_t task);
+ taskid_t createId();
+
+ TaskTree tree;
+ taskid_t idCount;
+};
+
+#if 0
+
+/*
+Task:
+ id
+ subtasks
+// tags
+ title
+ description
+// primary_assignment
+// secondary_assignment
+
+
+Protocol:
+
+Server -> client:
+ update [id] [title] [description];
+ move [id] [x] [y];
+ add [id] [title] [description] [x] [y];
+ del [id]
+
+Client -> server:
+ update [id] [title] [description];
+ move [id] [x] [y];
+ add [title] [description] [x] [y];
+ del [id]
+
+title and description are " encapsulated utf-8 string with " escaped with a backslash.
+x and y are integers as strings
+id are an integer as a string
+ */
+
+/*
+typedef struct {
+ int x, y;
+ int id;
+ std::string title;
+ std::string desc;
+} task_t;
+*/
+/*
+protocol:
+ add_task title description parent_id
+ del_task id
+ update_task id title description
+ move_task id parent
+ copy_task id parent
+*/
+
+
+
+//typedef std::list<task_t> TaskList;
+
+class CompareByParentid {
+public:
+ bool operator()(const task_t &a, const task_t &b) const {
+ return a.parent_id < b.parent_id;
+ }
+};
+
+
+
+
+class TaskList : public std::list<task_t>{
+public:
+ TaskList() {}
+ ~TaskList(){}
+
+ void insert(task_t t) {
+ if(t.id == t.parent_id) return;
+ printf("inserting task %d with parent %d\n", t.id, t.parent_id);
+
+ if(t.parent_id == -1) {
+ std::list<task_t>::push_front(t);
+ return;
+ }
+
+ std::list<task_t>::iterator it;
+ for(it = begin(); it != end(); ++it) {
+ printf("\tcomparing %d and %d\n", t.parent_id, it->id);
+ if(t.parent_id == it->id) {
+ break;
+ }
+ }
+ assert(it != end());
+
+ std::list<task_t>::insert(++it, t);
+
+// std::list<task_t>::push_back(t);
+// std::list<task_t>::sort(CompareByParentid());
+
+ }
+
+ void move(task_t t) {
+ std::list<task_t>::iterator it;
+ for(it = begin(); it != end(); it++) {
+ if(t.id == it->id) {
+ break;
+ }
+ }
+ assert(it != end());
+ // if(it != end()) {
+ std::list<task_t>::erase(it);
+ // }
+ insert(t);
+ }
+
+ void push_back(task_t t) {
+ insert(t);
+ }
+
+private:
+ std::list<task_t> list;
+};
+
+
+extern TaskList tasklist;
+
+//typedef std::priority_queue<task_t, std::vector<task_t>, CompareByParentid> TaskList;
+
+task_t create_task(std::string title, std::string desc,
+ /*int x, int y*/ int parent_id);
+
+TaskList load_tasklist_from_file(std::string file);
+bool save_tasklist_to_file(TaskList t, std::string file);
+#endif
+
+#endif/*__MUNIA_TASK_H__*/