#ifndef tododb_h
#define tododb_h

#include <qvaluelist.h>

#include <opie/todoevent.h>

class ToDoResource;
class ToDoDB
{
 public:
    // if no argument is supplied pick the default book 
    ToDoDB(const QString &fileName = QString::null, ToDoResource* resource= 0 );
    ~ToDoDB();
    QValueList<ToDoEvent> effectiveToDos(const QDate &from,
					 const QDate &to,
					 bool includeNoDates = true);
    QValueList<ToDoEvent> effectiveToDos(const QDate &start, bool includeNoDates = true );
    QValueList<ToDoEvent> rawToDos(); // all events
    QValueList<ToDoEvent> overDue();

    void addEvent(const ToDoEvent &event );
    void editEvent(const ToDoEvent &editEvent );
    void removeEvent(const ToDoEvent &event);
    void replaceEvent(const ToDoEvent &event );
    // QValueList<ToDoEvents will overwrite existing ones no smart code at all ;)
    void mergeWith(const QValueList<ToDoEvent>& ); 
    void reload();
    void setFileName(const QString & );
    QString fileName()const;
    bool save();
    ToDoResource *resource(); 
    void setResource(ToDoResource* res); 

 private:
    class ToDoDBPrivate;
    ToDoDBPrivate *d;
    QString m_fileName;
    ToDoResource *m_res;
    QValueList<ToDoEvent> m_todos;
    void load();
};


#endif