-rw-r--r-- | libopie/tododb.cpp | 221 | ||||
-rw-r--r-- | libopie/tododb.h | 6 | ||||
-rw-r--r-- | libopie/todoevent.h | 1 | ||||
-rw-r--r-- | libopie/todoresource.h | 14 |
4 files changed, 140 insertions, 102 deletions
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp index eb17674..91331d0 100644 --- a/libopie/tododb.cpp +++ b/libopie/tododb.cpp @@ -4,2 +4,3 @@ #include <opie/xmltree.h> +#include <opie/todoresource.h> #include <qpe/palmtoprecord.h> @@ -7,77 +8,49 @@ -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() ); - } +namespace { - 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 ){ +class FileToDoResource : public ToDoResource { +public: + FileToDoResource() {}; + bool save(const QString &name, const QValueList<ToDoEvent> &m_todos ){ + // prepare the XML + XMLElement *tasks = new XMLElement( ); + tasks->setTagName("Tasks" ); + for( QValueList<ToDoEvent>::ConstIterator 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() ){ - 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 ); + map.insert("DateYear", QString::number( (*it).date().year() ) ); + map.insert("DateMonth", QString::number( (*it).date().month() ) ); + map.insert("DateDay", QString::number( (*it).date().day() ) ); } -void ToDoDB::reload() -{ - load(); + map.insert("Uid", QString::number( (*it).uid() ) ); + task->setTagName("Task" ); + task->setAttributes( map ); + tasks->appendChild(task); } -void ToDoDB::setFileName(const QString &file ) -{ - m_fileName =file; + QFile file( name); + if( file.open(IO_WriteOnly ) ){ + QTextStream stream(&file ); + stream << "<!DOCTYPE Tasks>" << endl; + tasks->save(stream ); + delete tasks; + file.close(); + return true; } -QString ToDoDB::fileName()const -{ - return m_fileName; + return false; } -void ToDoDB::load() -{ + QValueList<ToDoEvent> load( const QString &name ){ qWarning("loading tododb" ); - m_todos.clear(); - XMLElement *root = XMLElement::load( m_fileName ); + QValueList<ToDoEvent> m_todos; + XMLElement *root = XMLElement::load( name ); if(root != 0l ){ // start parsing @@ -139,3 +112,3 @@ void ToDoDB::load() dumInt = dummy.toInt(&ok ); - if(ok ) event.m_uid = dumInt; + if(ok ) event.setUid( dumInt ); m_todos.append( event ); @@ -148,41 +121,87 @@ void ToDoDB::load() delete root; + return m_todos; } -bool ToDoDB::save() +}; + +} + +ToDoDB::ToDoDB(const QString &fileName = QString::null, ToDoResource *res ){ + m_fileName = fileName; + if( fileName.isEmpty() && res == 0 ){ + m_fileName = Global::applicationFileName("todolist","todolist.xml");; + //qWarning("%s", m_fileName.latin1() ); + }else if(res == 0 ){ // let's create a ToDoResource for xml + res = new FileToDoResource(); + } + m_res = res; + load(); +} +ToDoDB::~ToDoDB() { -// prepare the XML - XMLElement *tasks = new XMLElement( ); - tasks->setTagName("Tasks" ); + +} +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 ){ - 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() ) ); + if( (*it).date() >= from && (*it).date() <= to ) + events.append( (*it) ); + }else if( all ){ + events.append( (*it) ); } - 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 events; } - return false; +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() +{ + +} +bool ToDoDB::save() +{ + return m_res->save( m_fileName, m_todos ); } diff --git a/libopie/tododb.h b/libopie/tododb.h index 6478363..945f343 100644 --- a/libopie/tododb.h +++ b/libopie/tododb.h @@ -8,2 +8,3 @@ +class ToDoResource; class ToDoDB @@ -12,3 +13,3 @@ class ToDoDB // if no argument is supplied pick the default book - ToDoDB(const QString &fileName = QString::null ); + ToDoDB(const QString &fileName = QString::null, ToDoResource* resource= 0 ); ~ToDoDB(); @@ -29,2 +30,4 @@ class ToDoDB bool save(); + ToDoResource *resource(); + void setResource(ToDoResource* res); @@ -34,2 +37,3 @@ class ToDoDB QString m_fileName; + ToDoResource *m_res; QValueList<ToDoEvent> m_todos; diff --git a/libopie/todoevent.h b/libopie/todoevent.h index dd8c0c9..79522b2 100644 --- a/libopie/todoevent.h +++ b/libopie/todoevent.h @@ -31,2 +31,3 @@ class ToDoEvent { + void setUid(int id) {m_uid = id; }; bool operator<(const ToDoEvent &toDoEvent )const; diff --git a/libopie/todoresource.h b/libopie/todoresource.h new file mode 100644 index 0000000..34edb04 --- a/dev/null +++ b/libopie/todoresource.h @@ -0,0 +1,14 @@ + + +#ifndef opietodoresource_h +#define opietodoresource_h + +class ToDoEvent; +class ToDoResource { + public: + ToDoResource( ) {}; + virtual QValueList<ToDoEvent> load(const QString &file ) = 0; + virtual bool save( const QString &file, const QValueList<ToDoEvent> & ) = 0; +}; + +#endif |