-rw-r--r-- | libkcal/incidence.h | 2 | ||||
-rw-r--r-- | libkcal/todo.cpp | 32 | ||||
-rw-r--r-- | libkcal/todo.h | 12 |
3 files changed, 44 insertions, 2 deletions
diff --git a/libkcal/incidence.h b/libkcal/incidence.h index 1807bc4..de2a381 100644 --- a/libkcal/incidence.h +++ b/libkcal/incidence.h @@ -267,4 +267,5 @@ class Incidence : public IncidenceBase protected: QPtrList<Alarm> mAlarms; + QPtrList<Incidence> mRelations; private: int mRevision; @@ -278,5 +279,4 @@ protected: Incidence *mRelatedTo; QString mRelatedToUid; - QPtrList<Incidence> mRelations; DateList mExDates; QPtrList<Attachment> mAttachments; diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp index 7f1de78..d81a68f 100644 --- a/libkcal/todo.cpp +++ b/libkcal/todo.cpp @@ -194,5 +194,35 @@ QString Todo::dtDueStr(bool shortfmt) const return KGlobal::locale()->formatDateTime(mDtDue, shortfmt); } - +// retval 0 : no found +// 1 : due for date found +// 2 : overdue for date found +int Todo::hasDueSubTodoForDate( const QDate & date, bool checkSubtodos ) +{ + int retval = 0; + if ( isCompleted() ) + return 0; + if ( hasDueDate() ) { + if ( dtDue().date() < date ) + return 2; + // we do not return, because we may find an overdue sub todo + if ( dtDue().date() == date ) + retval = 1; + } + if ( checkSubtodos ) { + Incidence *aTodo; + for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) { + int ret = ((Todo*)aTodo)->hasDueSubTodoForDate( date ,checkSubtodos ); + if ( ret == 2 ) + return 2; + if ( ret == 1) + retval = 1; + } + } + return retval; +} +int Todo::hasDueSubTodo( bool checkSubtodos ) //= true +{ + return hasDueSubTodoForDate(QDate::currentDate(), checkSubtodos ); +} bool Todo::hasDueDate() const { diff --git a/libkcal/todo.h b/libkcal/todo.h index 41f5841..137b252 100644 --- a/libkcal/todo.h +++ b/libkcal/todo.h @@ -63,4 +63,16 @@ class Todo : public Incidence void setHasDueDate(bool f); + /* + Looks for a subtodo (including itself ) which is not complete and is + - overdue, or + - due today. + It returns 0 for nothing found, + 1 for found a todo which is due today and no overdue found + 2 for found a overdue todo + */ + int hasDueSubTodo( bool checkSubtodos = true ); + /* same as above, but a specific date can be specified*/ + int hasDueSubTodoForDate( const QDate & date, bool checkSubtodos ); + /** sets the event's status to the string specified. The string |