summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opie/tododb.h6
-rw-r--r--include/opie/todoevent.h1
-rw-r--r--include/opie/todoresource.h14
-rw-r--r--libopie/tododb.cpp237
-rw-r--r--libopie/tododb.h6
-rw-r--r--libopie/todoevent.h1
-rw-r--r--libopie/todoresource.h14
7 files changed, 168 insertions, 111 deletions
diff --git a/include/opie/tododb.h b/include/opie/tododb.h
index 6478363..945f343 100644
--- a/include/opie/tododb.h
+++ b/include/opie/tododb.h
@@ -1,40 +1,44 @@
#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 );
+ 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 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
diff --git a/include/opie/todoevent.h b/include/opie/todoevent.h
index dd8c0c9..79522b2 100644
--- a/include/opie/todoevent.h
+++ b/include/opie/todoevent.h
@@ -1,52 +1,53 @@
#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();
+ void setUid(int id) {m_uid = id; };
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/include/opie/todoresource.h b/include/opie/todoresource.h
new file mode 100644
index 0000000..34edb04
--- a/dev/null
+++ b/include/opie/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
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp
index eb17674..91331d0 100644
--- a/libopie/tododb.cpp
+++ b/libopie/tododb.cpp
@@ -1,196 +1,215 @@
#include <qdir.h>
#include <opie/tododb.h>
#include <opie/xmltree.h>
+#include <opie/todoresource.h>
#include <qpe/palmtoprecord.h>
#include <qpe/global.h>
-ToDoDB::ToDoDB(const QString &fileName = QString::null ){
+namespace {
+
+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() ){
+ 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( name);
+ if( file.open(IO_WriteOnly ) ){
+ QTextStream stream(&file );
+ stream << "<!DOCTYPE Tasks>" << endl;
+ tasks->save(stream );
+ delete tasks;
+ file.close();
+ return true;
+ }
+ return false;
+ }
+ QValueList<ToDoEvent> load( const QString &name ){
+ qWarning("loading tododb" );
+ QValueList<ToDoEvent> m_todos;
+ XMLElement *root = XMLElement::load( name );
+ 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.setUid( dumInt );
+ m_todos.append( event );
+ element = element->nextChild(); // next element
+ }
+ //}
+ }else {
+ qWarning("could not load" );
+ }
+ delete root;
+ return m_todos;
+ }
+};
+
+}
+
+ToDoDB::ToDoDB(const QString &fileName = QString::null, ToDoResource *res ){
m_fileName = fileName;
- if( fileName.isEmpty() ){
+ if( fileName.isEmpty() && res == 0 ){
m_fileName = Global::applicationFileName("todolist","todolist.xml");;
- qWarning("%s", m_fileName.latin1() );
+ //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()
{
}
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;
+ 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
@@ -1,40 +1,44 @@
#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 );
+ 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 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
diff --git a/libopie/todoevent.h b/libopie/todoevent.h
index dd8c0c9..79522b2 100644
--- a/libopie/todoevent.h
+++ b/libopie/todoevent.h
@@ -1,52 +1,53 @@
#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();
+ void setUid(int id) {m_uid = id; };
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/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