summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opie/tododb.h40
-rw-r--r--include/opie/todoevent.h52
-rw-r--r--libopie/libopie.pro2
-rw-r--r--libopie/tododb.cpp196
-rw-r--r--libopie/tododb.h40
-rw-r--r--libopie/todoevent.cpp150
-rw-r--r--libopie/todoevent.h52
7 files changed, 531 insertions, 1 deletions
diff --git a/include/opie/tododb.h b/include/opie/tododb.h
new file mode 100644
index 0000000..6478363
--- a/dev/null
+++ b/include/opie/tododb.h
@@ -0,0 +1,40 @@
+
+#ifndef tododb_h
+#define tododb_h
+
+#include <qvaluelist.h>
+
+#include <opie/todoevent.h>
+
+class ToDoDB
+{
+ public:
+ // if no argument is supplied pick the default book
+ ToDoDB(const QString &fileName = QString::null );
+ ~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 reload();
+ void setFileName(const QString & );
+ QString fileName()const;
+ bool save();
+
+ private:
+ class ToDoDBPrivate;
+ ToDoDBPrivate *d;
+ QString m_fileName;
+ QValueList<ToDoEvent> m_todos;
+ void load();
+};
+
+
+#endif
diff --git a/include/opie/todoevent.h b/include/opie/todoevent.h
new file mode 100644
index 0000000..dd8c0c9
--- a/dev/null
+++ b/include/opie/todoevent.h
@@ -0,0 +1,52 @@
+
+#ifndef todoevent_h
+#define todoevent_h
+
+#include <qdatetime.h>
+
+class ToDoEvent {
+ friend class ToDoDB;
+ public:
+ enum Priority { VERYHIGH=1, HIGH, NORMAL, LOW, VERYLOW };
+ ToDoEvent( bool completed = false, int priority = NORMAL,
+ const QString &category = QString::null,
+ const QString &description = QString::null ,
+ bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 );
+ bool isCompleted() const;
+ bool hasDate() const;
+ int priority()const ;
+ QString category()const;
+ QDate date()const;
+ QString description()const;
+
+ int uid()const { return m_uid;};
+ void setCompleted(bool completed );
+ void setHasDate( bool hasDate );
+ // if the category doesn't exist we will create it
+ void setCategory( const QString &category );
+ void setPriority(int priority );
+ void setDate( QDate date );
+ void setDescription(const QString& );
+ bool isOverdue();
+
+ bool operator<(const ToDoEvent &toDoEvent )const;
+ bool operator<=(const ToDoEvent &toDoEvent )const;
+ bool operator!=(const ToDoEvent &toDoEvent )const { return !(*this == toDoEvent); };
+ bool operator>(const ToDoEvent &toDoEvent )const;
+ bool operator>=(const ToDoEvent &toDoEvent)const;
+ bool operator==(const ToDoEvent &toDoEvent )const;
+ ToDoEvent &operator=(const ToDoEvent &toDoEvent );
+ private:
+ class ToDoEventPrivate;
+ ToDoEventPrivate *d;
+ QDate m_date;
+ bool m_isCompleted:1;
+ bool m_hasDate:1;
+ int m_priority;
+ QString m_category;
+ QString m_desc;
+ int m_uid;
+};
+
+
+#endif
diff --git a/libopie/libopie.pro b/libopie/libopie.pro
index 95ec145..fb00422 100644
--- a/libopie/libopie.pro
+++ b/libopie/libopie.pro
@@ -3,3 +3,3 @@ CONFIG += qte warn_on release
HEADERS = $(OPIEDIR)/include/opie/xmltree.h
-SOURCES = xmltree.cc
+SOURCES = xmltree.cc tododb.cpp todoevent.cpp
TARGET = opie
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp
new file mode 100644
index 0000000..eb17674
--- a/dev/null
+++ b/libopie/tododb.cpp
@@ -0,0 +1,196 @@
+
+#include <qdir.h>
+#include <opie/tododb.h>
+#include <opie/xmltree.h>
+#include <qpe/palmtoprecord.h>
+#include <qpe/global.h>
+
+ToDoDB::ToDoDB(const QString &fileName = QString::null ){
+ m_fileName = fileName;
+ if( fileName.isEmpty() ){
+ m_fileName = Global::applicationFileName("todolist","todolist.xml");;
+ qWarning("%s", m_fileName.latin1() );
+ }
+
+ load();
+}
+ToDoDB::~ToDoDB()
+{
+
+}
+QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, const QDate &to,
+ bool all )
+{
+ QValueList<ToDoEvent> events;
+ for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
+ if( (*it).hasDate() ){
+ if( (*it).date() >= from && (*it).date() <= to )
+ events.append( (*it) );
+ }else if( all ){
+ events.append( (*it) );
+ }
+ }
+ return events;
+}
+QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from,
+ bool all)
+{
+ return effectiveToDos( from, QDate::currentDate(), all );
+}
+QValueList<ToDoEvent> ToDoDB::overDue()
+{
+ QValueList<ToDoEvent> events;
+ for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
+ if( (*it).isOverdue() )
+ events.append((*it) );
+ }
+ return events;
+}
+QValueList<ToDoEvent> ToDoDB::rawToDos()
+{
+ return m_todos;
+}
+void ToDoDB::addEvent( const ToDoEvent &event )
+{
+ m_todos.append( event );
+}
+void ToDoDB::editEvent( const ToDoEvent &event )
+{
+ m_todos.remove( event );
+ m_todos.append( event );
+}
+void ToDoDB::removeEvent( const ToDoEvent &event )
+{
+ m_todos.remove( event );
+}
+void ToDoDB::reload()
+{
+ load();
+}
+void ToDoDB::setFileName(const QString &file )
+{
+ m_fileName =file;
+}
+QString ToDoDB::fileName()const
+{
+ return m_fileName;
+}
+void ToDoDB::load()
+{
+ qWarning("loading tododb" );
+ m_todos.clear();
+ XMLElement *root = XMLElement::load( m_fileName );
+ if(root != 0l ){ // start parsing
+ qWarning("ToDoDB::load tagName(): %s", root->tagName().latin1() );
+ //if( root->tagName() == QString::fromLatin1("Tasks" ) ){// Start
+ XMLElement *element = root->firstChild();
+ element = element->firstChild();
+ while( element ){
+ qWarning("ToDoDB::load element tagName() : %s", element->tagName().latin1() );
+ QString dummy;
+ ToDoEvent event;
+ bool ok;
+ int dumInt;
+ // completed
+ dummy = element->attribute("Completed" );
+ dumInt = dummy.toInt(&ok );
+ if(ok ) event.setCompleted( dumInt == 0 ? false : true );
+ // hasDate
+ dummy = element->attribute("HasDate" );
+ dumInt = dummy.toInt(&ok );
+ if(ok ) event.setHasDate( dumInt == 0 ? false: true );
+ // set the date
+ bool hasDa = dumInt;
+ if ( hasDa ) { //parse the date
+ int year, day, month = 0;
+ year = day = month;
+ // year
+ dummy = element->attribute("DateYear" );
+ dumInt = dummy.toInt(&ok );
+ if( ok ) year = dumInt;
+ // month
+ dummy = element->attribute("DateMonth" );
+ dumInt = dummy.toInt(&ok );
+ if(ok ) month = dumInt;
+ dummy = element->attribute("DateDay" );
+ dumInt = dummy.toInt(&ok );
+ if(ok ) day = dumInt;
+ // set the date
+ QDate date( year, month, day );
+ event.setDate( date);
+ }
+ dummy = element->attribute("Priority" );
+ dumInt = dummy.toInt(&ok );
+ if(!ok ) dumInt = ToDoEvent::NORMAL;
+ event.setPriority( dumInt );
+ //description
+ dummy = element->attribute("Description" );
+ event.setDescription( dummy );
+ // category
+ dummy = element->attribute("Categories" );
+ dumInt = dummy.toInt(&ok );
+ if(ok ) {
+ QArray<int> arrat(1);
+ arrat[0] = dumInt;
+ event.setCategory( Qtopia::Record::idsToString( arrat ) );
+ }
+ //uid
+ dummy = element->attribute("Uid" );
+ dumInt = dummy.toInt(&ok );
+ if(ok ) event.m_uid = dumInt;
+ m_todos.append( event );
+ element = element->nextChild(); // next element
+ }
+ //}
+ }else {
+ qWarning("could not load" );
+ }
+ delete root;
+}
+bool ToDoDB::save()
+{
+// prepare the XML
+ XMLElement *tasks = new XMLElement( );
+ tasks->setTagName("Tasks" );
+ for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it != m_todos.end(); ++it ){
+ XMLElement::AttributeMap map;
+ XMLElement *task = new XMLElement();
+ map.insert( "Completed", QString::number((int)(*it).isCompleted() ) );
+ map.insert( "HasDate", QString::number((int)(*it).hasDate() ) );
+ map.insert( "Priority", QString::number( (*it).priority() ) );
+ if(!(*it).category().isEmpty() ){
+ QArray<int> arrat(1);
+ arrat = Qtopia::Record::idsFromString( (*it).category() );
+ map.insert( "Categories", QString::number( arrat[0] ) );
+ }else
+ map.insert( "Categories", QString::null );
+ map.insert( "Description", (*it).description() );
+ if( (*it).hasDate() ){
+ map.insert("DateYear", QString::number( (*it).date().year() ) );
+ map.insert("DateMonth", QString::number( (*it).date().month() ) );
+ map.insert("DateDay", QString::number( (*it).date().day() ) );
+ }
+ map.insert("Uid", QString::number( (*it).uid() ) );
+ task->setTagName("Task" );
+ task->setAttributes( map );
+ tasks->appendChild(task);
+ }
+ QFile file( m_fileName);
+ if( file.open(IO_WriteOnly ) ){
+ QTextStream stream(&file );
+ stream << "<!DOCTYPE Tasks>" << endl;
+ tasks->save(stream );
+ delete tasks;
+ file.close();
+ return true;
+ }
+ return false;
+}
+
+
+
+
+
+
+
+
diff --git a/libopie/tododb.h b/libopie/tododb.h
new file mode 100644
index 0000000..6478363
--- a/dev/null
+++ b/libopie/tododb.h
@@ -0,0 +1,40 @@
+
+#ifndef tododb_h
+#define tododb_h
+
+#include <qvaluelist.h>
+
+#include <opie/todoevent.h>
+
+class ToDoDB
+{
+ public:
+ // if no argument is supplied pick the default book
+ ToDoDB(const QString &fileName = QString::null );
+ ~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 reload();
+ void setFileName(const QString & );
+ QString fileName()const;
+ bool save();
+
+ private:
+ class ToDoDBPrivate;
+ ToDoDBPrivate *d;
+ QString m_fileName;
+ QValueList<ToDoEvent> m_todos;
+ void load();
+};
+
+
+#endif
diff --git a/libopie/todoevent.cpp b/libopie/todoevent.cpp
new file mode 100644
index 0000000..4cfe1c0
--- a/dev/null
+++ b/libopie/todoevent.cpp
@@ -0,0 +1,150 @@
+
+#include <opie/todoevent.h>
+#include <qpe/palmtopuidgen.h>
+
+ToDoEvent::ToDoEvent(bool completed, int priority, const QString &category,
+ const QString &description, bool hasDate, QDate date, int uid )
+{
+ qWarning("todoEvent c'tor" );
+ m_date = date;
+ m_isCompleted = completed;
+ m_hasDate = hasDate;
+ m_priority = priority;
+ m_category = category;
+ m_desc = description;
+ if (uid == -1 ) {
+ Qtopia::UidGen *uidgen = new Qtopia::UidGen();
+ uid = uidgen->generate();
+ delete uidgen;
+ }// generate the ids
+ m_uid = uid;
+}
+bool ToDoEvent::isCompleted() const
+{
+ return m_isCompleted;
+}
+bool ToDoEvent::hasDate() const
+{
+ return m_hasDate;
+}
+int ToDoEvent::priority()const
+{
+ return m_priority;
+}
+QString ToDoEvent::category()const
+{
+ return m_category;
+}
+QDate ToDoEvent::date()const
+{
+ return m_date;
+}
+QString ToDoEvent::description()const
+{
+ return m_desc;
+}
+void ToDoEvent::setCompleted( bool completed )
+{
+ m_isCompleted = completed;
+}
+void ToDoEvent::setHasDate( bool hasDate )
+{
+ m_hasDate = hasDate;
+}
+void ToDoEvent::setDescription(const QString &desc )
+{
+ m_desc = desc;
+}
+void ToDoEvent::setCategory( const QString &cat )
+{
+ m_category = cat;
+}
+void ToDoEvent::setPriority(int prio )
+{
+ m_priority = prio;
+}
+void ToDoEvent::setDate( QDate date )
+{
+ m_date = date;
+}
+bool ToDoEvent::isOverdue( )
+{
+ if( m_hasDate )
+ return QDate::currentDate() > m_date;
+ return false;
+}
+bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{
+ if( !hasDate() && !toDoEvent.hasDate() ) return true;
+ if( !hasDate() && toDoEvent.hasDate() ) return true;
+ if( hasDate() && toDoEvent.hasDate() ){
+ if( date() == toDoEvent.date() ){ // let's the priority decide
+ return priority() < toDoEvent.priority();
+ }else{
+ return date() < toDoEvent.date();
+ }
+ }
+ return false;
+}
+bool ToDoEvent::operator<=(const ToDoEvent &toDoEvent )const
+{
+ if( !hasDate() && !toDoEvent.hasDate() ) return true;
+ if( !hasDate() && toDoEvent.hasDate() ) return true;
+ if( hasDate() && toDoEvent.hasDate() ){
+ if( date() == toDoEvent.date() ){ // let's the priority decide
+ return priority() <= toDoEvent.priority();
+ }else{
+ return date() <= toDoEvent.date();
+ }
+ }
+ return true;
+}
+bool ToDoEvent::operator>(const ToDoEvent &toDoEvent )const
+{
+ if( !hasDate() && !toDoEvent.hasDate() ) return false;
+ if( !hasDate() && toDoEvent.hasDate() ) return false;
+ if( hasDate() && toDoEvent.hasDate() ){
+ if( date() == toDoEvent.date() ){ // let's the priority decide
+ return priority() > toDoEvent.priority();
+ }else{
+ return date() > toDoEvent.date();
+ }
+ }
+ return false;
+}
+bool ToDoEvent::operator>=(const ToDoEvent &toDoEvent )const
+{
+ if( !hasDate() && !toDoEvent.hasDate() ) return true;
+ if( !hasDate() && toDoEvent.hasDate() ) return false;
+ if( hasDate() && toDoEvent.hasDate() ){
+ if( date() == toDoEvent.date() ){ // let's the priority decide
+ return priority() > toDoEvent.priority();
+ }else{
+ return date() > toDoEvent.date();
+ }
+ }
+ return true;
+}
+bool ToDoEvent::operator==(const ToDoEvent &toDoEvent )const
+{
+ if( m_date == toDoEvent.m_date && m_isCompleted == toDoEvent.m_isCompleted && m_hasDate == toDoEvent.m_hasDate && m_priority == toDoEvent.m_priority && m_category == toDoEvent.m_category && m_desc == toDoEvent.m_category )
+ return true;
+ return false;
+}
+ToDoEvent &ToDoEvent::operator=(const ToDoEvent &item )
+{
+ m_date = item.m_date;
+ m_isCompleted = item.m_isCompleted;
+ m_hasDate = item.m_hasDate;
+ m_priority = item.m_priority;
+ m_category = item.m_category;
+ m_desc = item.m_desc;
+ return *this;
+}
+
+
+
+
+
+
+
+
diff --git a/libopie/todoevent.h b/libopie/todoevent.h
new file mode 100644
index 0000000..dd8c0c9
--- a/dev/null
+++ b/libopie/todoevent.h
@@ -0,0 +1,52 @@
+
+#ifndef todoevent_h
+#define todoevent_h
+
+#include <qdatetime.h>
+
+class ToDoEvent {
+ friend class ToDoDB;
+ public:
+ enum Priority { VERYHIGH=1, HIGH, NORMAL, LOW, VERYLOW };
+ ToDoEvent( bool completed = false, int priority = NORMAL,
+ const QString &category = QString::null,
+ const QString &description = QString::null ,
+ bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 );
+ bool isCompleted() const;
+ bool hasDate() const;
+ int priority()const ;
+ QString category()const;
+ QDate date()const;
+ QString description()const;
+
+ int uid()const { return m_uid;};
+ void setCompleted(bool completed );
+ void setHasDate( bool hasDate );
+ // if the category doesn't exist we will create it
+ void setCategory( const QString &category );
+ void setPriority(int priority );
+ void setDate( QDate date );
+ void setDescription(const QString& );
+ bool isOverdue();
+
+ bool operator<(const ToDoEvent &toDoEvent )const;
+ bool operator<=(const ToDoEvent &toDoEvent )const;
+ bool operator!=(const ToDoEvent &toDoEvent )const { return !(*this == toDoEvent); };
+ bool operator>(const ToDoEvent &toDoEvent )const;
+ bool operator>=(const ToDoEvent &toDoEvent)const;
+ bool operator==(const ToDoEvent &toDoEvent )const;
+ ToDoEvent &operator=(const ToDoEvent &toDoEvent );
+ private:
+ class ToDoEventPrivate;
+ ToDoEventPrivate *d;
+ QDate m_date;
+ bool m_isCompleted:1;
+ bool m_hasDate:1;
+ int m_priority;
+ QString m_category;
+ QString m_desc;
+ int m_uid;
+};
+
+
+#endif