From aed0fb34803583fa2615f81d04c8cf808a1f9c33 Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Fri, 30 Mar 2012 12:05:22 +0200 Subject: Updated interfaces. --- src/taskmanager.h | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 src/taskmanager.h (limited to 'src/taskmanager.h') 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 +#include +#include +#include + +#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 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{ +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::push_front(t); + return; + } + + std::list::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::insert(++it, t); + +// std::list::push_back(t); +// std::list::sort(CompareByParentid()); + + } + + void move(task_t t) { + std::list::iterator it; + for(it = begin(); it != end(); it++) { + if(t.id == it->id) { + break; + } + } + assert(it != end()); + // if(it != end()) { + std::list::erase(it); + // } + insert(t); + } + + void push_back(task_t t) { + insert(t); + } + +private: + std::list list; +}; + + +extern TaskList tasklist; + +//typedef std::priority_queue, 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__*/ -- cgit v1.2.3