-rw-r--r-- | libopie/tododb.cpp | 25 | ||||
-rw-r--r-- | libopie/todoevent.cpp | 27 | ||||
-rw-r--r-- | libopie/todoevent.h | 15 | ||||
-rw-r--r-- | libopie/todovcalresource.cpp | 2 |
4 files changed, 46 insertions, 23 deletions
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp index 10ea2f0..7814c4f 100644 --- a/libopie/tododb.cpp +++ b/libopie/tododb.cpp @@ -1,53 +1,57 @@ #include <qdir.h> #include <opie/tododb.h> #include <opie/xmltree.h> #include <opie/todoresource.h> #include <qpe/palmtoprecord.h> #include <qpe/global.h> 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 ); + QArray<int> arrat = (*it).categories(); + QString attr; + for(uint i=0; i < arrat.count(); i++ ){ + attr.append(QString::number(arrat[i])+";" ); + } + if(!attr.isEmpty() ) // remove the last ; + attr.remove(attr.length()-1, 1 ); + map.insert( "Categories", attr ); + //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" ); @@ -80,54 +84,51 @@ public: // 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 ) ); - } + QStringList ids = QStringList::split(";", dummy ); + event.setCategories( ids ); + //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; qWarning("returning" ); return m_todos; } }; } ToDoDB::ToDoDB(const QString &fileName, ToDoResource *res ){ m_fileName = fileName; if( fileName.isEmpty() && res == 0 ){ m_fileName = Global::applicationFileName("todolist","todolist.xml"); res = new FileToDoResource(); diff --git a/libopie/todoevent.cpp b/libopie/todoevent.cpp index 7dbf907..28b2e98 100644 --- a/libopie/todoevent.cpp +++ b/libopie/todoevent.cpp @@ -1,109 +1,124 @@ #include <opie/todoevent.h> #include <qpe/palmtopuidgen.h> #include <qpe/stringutil.h> #include <qpe/palmtoprecord.h> ToDoEvent::ToDoEvent(const ToDoEvent &event ) { *this = event; } -ToDoEvent::ToDoEvent(bool completed, int priority, const QString &category, +ToDoEvent::ToDoEvent(bool completed, int priority, const QStringList &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 = Qtopia::simplifyMultiLineSpace(description ); if (uid == -1 ) { Qtopia::UidGen *uidgen = new Qtopia::UidGen(); uid = uidgen->generate(); delete uidgen; }// generate the ids m_uid = uid; } QArray<int> ToDoEvent::categories()const { - QArray<int> array(1); // currently the datebook can be only in one category - array = Qtopia::Record::idsFromString( category() ); + QArray<int> array(m_category.count() ); // currently the datebook can be only in one category + array = Qtopia::Record::idsFromString( m_category.join(";") ); return array; } bool ToDoEvent::match( const QRegExp ®Exp )const { if( QString::number( m_priority ).find( regExp ) != -1 ){ return true; }else if( m_hasDate && m_date.toString().find( regExp) != -1 ){ return true; }else if(m_desc.find( regExp ) != -1 ){ return true; } return false; } 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 +QStringList ToDoEvent::allCategories()const { return m_category; } +void ToDoEvent::insertCategory(const QString &str ) +{ + m_category.append( str ); +} +void ToDoEvent::clearCategories() +{ + m_category.clear(); +} +void ToDoEvent::setCategories(const QStringList &list ) +{ + m_category = list; + qWarning("todoevent: %s", list.join(";" ).latin1() ); +} 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 = Qtopia::simplifyMultiLineSpace(desc ); } void ToDoEvent::setCategory( const QString &cat ) { qWarning("setCategory %s", cat.latin1() ); - m_category = cat; + m_category.clear(); + 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(); } @@ -130,47 +145,47 @@ bool ToDoEvent::operator>(const ToDoEvent &toDoEvent )const 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 ) + 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_desc ) 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; m_uid = item.m_uid; return *this; } diff --git a/libopie/todoevent.h b/libopie/todoevent.h index ac996a1..0d477fd 100644 --- a/libopie/todoevent.h +++ b/libopie/todoevent.h @@ -1,57 +1,64 @@ #ifndef todoevent_h #define todoevent_h +#include <qstringlist.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 QStringList &category = QStringList(), const QString &description = QString::null , bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 ); ToDoEvent(const ToDoEvent & ); bool isCompleted() const; bool hasDate() const; int priority()const ; - QString category()const; + QStringList allCategories()const; QArray<int> categories() 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 + // if the category doesn't exist we will create it + // this sets the the Category after this call category will be the only category void setCategory( const QString &category ); + // adds a category to the Categories of this event + void insertCategory(const QString &category ); + void clearCategories(); + void setCategories(const QStringList& ); + void setPriority(int priority ); void setDate( QDate date ); void setDescription(const QString& ); bool isOverdue(); bool match( const QRegExp &r )const; 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; + QStringList m_category; QString m_desc; int m_uid; }; #endif diff --git a/libopie/todovcalresource.cpp b/libopie/todovcalresource.cpp index a6afe68..75f2197 100644 --- a/libopie/todovcalresource.cpp +++ b/libopie/todovcalresource.cpp @@ -27,49 +27,49 @@ */ #include <qfile.h> #include <qvaluelist.h> #include <opie/todoevent.h> #include <opie/todovcalresource.h> #include "../library/backend/vobject_p.h" #include "../library/backend/timeconversion.h" #include "../library/backend/qfiledirect_p.h" static VObject *vobjByEvent( const ToDoEvent &event ) { VObject *task = newVObject( VCTodoProp ); if( task == 0 ) return 0l; if( event.hasDate() ) addPropValue( task, VCDueProp, TimeConversion::toISO8601( event.date() ) ); if( event.isCompleted() ) addPropValue( task, VCStatusProp, "COMPLETED"); QString string = QString::number(event.priority() ); addPropValue( task, VCPriorityProp, string.local8Bit() ); - addPropValue( task, VCCategoriesProp, event.category().local8Bit() ); + addPropValue( task, VCCategoriesProp, event.allCategories().join(";").local8Bit() ); addPropValue( task, VCDescriptionProp, event.description().local8Bit() ); addPropValue( task, VCSummaryProp, event.description().left(15).local8Bit() ); return task; }; static ToDoEvent eventByVObj( VObject *obj ){ ToDoEvent event; VObject *ob; QCString name; // no uid, attendees, ... and no fun // description if( ( ob = isAPropertyOf( obj, VCDescriptionProp )) != 0 ){ name = vObjectStringZValue( ob ); event.setDescription( name ); } // completed if( ( ob = isAPropertyOf( obj, VCStatusProp )) != 0 ){ name = vObjectStringZValue( ob ); if( name == "COMPLETED" ){ event.setCompleted( true ); }else{ event.setCompleted( false ); } }else |