-rw-r--r-- | libopie/todoevent.cpp | 57 | ||||
-rw-r--r-- | libopie/todoevent.h | 29 |
2 files changed, 86 insertions, 0 deletions
diff --git a/libopie/todoevent.cpp b/libopie/todoevent.cpp index b35ac9d..f744550 100644 --- a/libopie/todoevent.cpp +++ b/libopie/todoevent.cpp @@ -1,282 +1,339 @@ #include <opie/todoevent.h> #include <qpe/palmtopuidgen.h> #include <qpe/stringutil.h> #include <qpe/palmtoprecord.h> #include <qpe/stringutil.h> #include <qpe/categories.h> #include <qpe/categoryselect.h> #include <qobject.h> ToDoEvent::ToDoEvent(const ToDoEvent &event ) { *this = event; } ToDoEvent::ToDoEvent(bool completed, int priority, const QStringList &category, const QString& summary, const QString &description, ushort progress, bool hasDate, QDate date, int uid ) { m_date = date; m_isCompleted = completed; m_hasDate = hasDate; m_priority = priority; m_category = category; m_sum = summary; m_prog = progress; 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(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; } QStringList ToDoEvent::allCategories()const { return m_category; } QString ToDoEvent::extra(const QString& )const { return QString::null; } QString ToDoEvent::summary() const { return m_sum; } ushort ToDoEvent::progress() const { return m_prog; } +QStringList ToDoEvent::relatedApps() const +{ + QStringList list; + QMap<QString, QArray<int> >::ConstIterator it; + for ( it = m_relations.begin(); it != m_relations.end(); ++it ) { + list << it.key(); + } + return list; +} +QArray<int> ToDoEvent::relations( const QString& app)const +{ + QArray<int> tmp; + QMap<QString, QArray<int> >::ConstIterator it; + it = m_relations.find( app); + if ( it != m_relations.end() ) + tmp = it.data(); + return tmp; +} 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; } 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::setExtra( const QString&, const QString& ) { } void ToDoEvent::setSummary( const QString& sum ) { m_sum = sum; } void ToDoEvent::setCategory( const QString &cat ) { qWarning("setCategory %s", cat.latin1() ); m_category.clear(); m_category << cat; } void ToDoEvent::setPriority(int prio ) { m_priority = prio; } void ToDoEvent::setDate( QDate date ) { m_date = date; } +void ToDoEvent::addRelated( const QString &app, int id ) +{ + QMap<QString, QArray<int> >::Iterator it; + QArray<int> tmp; + it = m_relations.find( app ); + if ( it == m_relations.end() ) { + tmp.resize(1 ); + tmp[0] = id; + }else{ + tmp = it.data(); + tmp.resize( tmp.size() + 1 ); + tmp[tmp.size() - 1] = id; + } + m_relations.replace( app, tmp ); +} +void ToDoEvent::addRelated(const QString& app, QArray<int> ids ) +{ + QMap<QString, QArray<int> >::Iterator it; + QArray<int> tmp; + it = m_relations.find( app); + if ( it == m_relations.end() ) { // not there + /** tmp.resize( ids.size() ); stupid?? + */ + tmp = ids; + }else{ + tmp = it.data(); + int offset = tmp.size()-1; + tmp.resize( tmp.size() + ids.size() ); + for (uint i = 0; i < ids.size(); i++ ) { + tmp[offset+i] = ids[i]; + } + + } + m_relations.replace( app, tmp ); +} +void ToDoEvent::clearRelated( const QString& app ) +{ + m_relations.remove( app ); +} bool ToDoEvent::isOverdue( ) { if( m_hasDate ) return QDate::currentDate() > m_date; return false; } void ToDoEvent::setProgress(ushort progress ) { m_prog = progress; } /*! Returns a richt text string */ QString ToDoEvent::richText() const { QString text; QStringList catlist; // Description of the todo if ( !description().isEmpty() ){ text += "<b>" + QObject::tr( "Summary:") + "</b><br>"; text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; text += "<b>" + QObject::tr( "Description:" ) + "</b><br>"; text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br><br><br>"; } text += "<b>" + QObject::tr( "Priority:") +" </b>" + QString::number( priority() ) + " <br>"; text += "<b>" + QObject::tr( "Progress:") + " </b>" + QString::number( progress() ) + " %<br>"; if (hasDate() ){ text += "<b>" + QObject::tr( "Deadline:") + " </b>"; text += date().toString(); text += "<br>"; } // Open database of all categories and get the list of // the categories this todoevent belongs to. // Then print them... // I am not sure whether there is no better way doing this !? Categories catdb; bool firstloop = true; catdb.load( categoryFileName() ); catlist = allCategories(); text += "<b>" + QObject::tr( "Category:") + "</b> "; for ( QStringList::Iterator it = catlist.begin(); it != catlist.end(); ++it ) { if (!firstloop){ text += ", "; } firstloop = false; text += catdb.label ("todo", (*it).toInt()); } text += "<br>"; return text; } 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 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_priority == toDoEvent.m_priority && m_priority == toDoEvent.m_prog && m_isCompleted == toDoEvent.m_isCompleted && m_hasDate == toDoEvent.m_hasDate && m_date == toDoEvent.m_date && m_category == toDoEvent.m_category && m_sum == toDoEvent.m_sum && 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; m_sum = item.m_sum; m_prog = item.m_prog; return *this; } diff --git a/libopie/todoevent.h b/libopie/todoevent.h index de4623f..b55a39b 100644 --- a/libopie/todoevent.h +++ b/libopie/todoevent.h @@ -1,162 +1,191 @@ #ifndef todoevent_h #define todoevent_h + +#include <qarray.h> #include <qmap.h> #include <qregexp.h> #include <qstringlist.h> #include <qdatetime.h> + class ToDoEvent { friend class ToDoDB; public: // priorities from Very low to very high enum Priority { VERYHIGH=1, HIGH, NORMAL, LOW, VERYLOW }; /* Constructs a new ToDoEvent @param completed Is the TodoEvent completed @param priority What is the priority of this ToDoEvent @param category Which category does it belong( uid ) @param summary A small summary of the todo @param description What is this ToDoEvent about @param hasDate Does this Event got a deadline @param date what is the deadline? @param uid what is the UUID of this Event **/ ToDoEvent( bool completed = false, int priority = NORMAL, const QStringList &category = QStringList(), const QString &summary = QString::null , const QString &description = QString::null, ushort progress = 0, bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 ); /* Copy c'tor **/ ToDoEvent(const ToDoEvent & ); /* Is this event completed? **/ bool isCompleted() const; /* Does this Event have a deadline **/ bool hasDate() const; /* What is the priority? **/ int priority()const ; /** * progress as ushort 0, 20, 40, 60, 80 or 100% */ ushort progress() const; /* All category numbers as QString in a List **/ QStringList allCategories()const; /* * Same as above but with QArray<int> */ QArray<int> categories() const; /** * The end Date */ QDate date()const; /** * The description of the todo */ QString description()const; /** * A small summary of the todo */ QString summary() const; /** * Return this todoevent in a RichText formatted QString */ QString richText() const; /** * Returns the UID of the Todo */ int uid()const { return m_uid;}; QString extra(const QString& )const; + + /** + * returns a list of apps which have related items + */ + QStringList relatedApps()const; + + /** + * returns all relations for one app + */ + QArray<int> relations( const QString& app )const; /** * Set if this Todo is completed */ void setCompleted(bool completed ); /** * set if this todo got an end data */ void setHasDate( bool hasDate ); // 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 ); /** * Removes this event from all categories */ void clearCategories(); /** * This todo belongs to xxx categories */ void setCategories(const QStringList& ); /** * Set the priority of the Todo */ void setPriority(int priority ); /** * Set the progress. */ void setProgress( ushort progress ); /** + * add related function it replaces too ;) + */ + void addRelated( const QString& app, int id ); + + /** + * add related + */ + void addRelated( const QString& app, QArray<int> ids ); + + /** + * clear relations for one app + */ + void clearRelated(const QString& app); + + /** * set the end date */ void setDate( QDate date ); void setDescription(const QString& ); void setSummary(const QString& ); void setExtra( const QString&, 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; QStringList m_category; QString m_desc; QString m_sum; QMap<QString, QString> m_extra; + QMap<QString, QArray<int> > m_relations; int m_uid; ushort m_prog; }; #endif |