author | zautrix <zautrix> | 2005-02-13 17:05:02 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-02-13 17:05:02 (UTC) |
commit | 293271fe9e6a9061da329183f8f488d79580f7da (patch) (unidiff) | |
tree | 3a0234eabdf58440a484e960b5eef912a63d0056 | |
parent | 0a33f91e166747406ca2ccb5819881feeecfdb40 (diff) | |
download | kdepimpi-293271fe9e6a9061da329183f8f488d79580f7da.zip kdepimpi-293271fe9e6a9061da329183f8f488d79580f7da.tar.gz kdepimpi-293271fe9e6a9061da329183f8f488d79580f7da.tar.bz2 |
todo rec fixes
-rw-r--r-- | korganizer/kotodoeditor.cpp | 29 | ||||
-rw-r--r-- | korganizer/kotodoviewitem.cpp | 42 | ||||
-rw-r--r-- | libkcal/incidence.cpp | 9 | ||||
-rw-r--r-- | libkcal/incidence.h | 5 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 1 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 4 | ||||
-rw-r--r-- | libkcal/todo.cpp | 51 | ||||
-rw-r--r-- | libkcal/todo.h | 2 |
8 files changed, 133 insertions, 10 deletions
diff --git a/korganizer/kotodoeditor.cpp b/korganizer/kotodoeditor.cpp index 069dda8..9232e09 100644 --- a/korganizer/kotodoeditor.cpp +++ b/korganizer/kotodoeditor.cpp | |||
@@ -318,12 +318,14 @@ void KOTodoEditor::checkRecurrence() | |||
318 | to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; | 318 | to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; |
319 | from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; | 319 | from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; |
320 | } else { | 320 | } else { |
321 | to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; | 321 | to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; |
322 | from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; | 322 | from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; |
323 | } | 323 | } |
324 | if ( to < from ) | ||
325 | to = from; | ||
324 | mRecurrence->setDefaults(from,to,!time); | 326 | mRecurrence->setDefaults(from,to,!time); |
325 | } | 327 | } |
326 | } else { | 328 | } else { |
327 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); | 329 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); |
328 | mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); | 330 | mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); |
329 | } | 331 | } |
@@ -347,12 +349,39 @@ void KOTodoEditor::writeTodo(Todo *event) | |||
347 | // set related event, i.e. parent to-do in this case. | 349 | // set related event, i.e. parent to-do in this case. |
348 | if (mRelatedTodo) { | 350 | if (mRelatedTodo) { |
349 | event->setRelatedTo(mRelatedTodo); | 351 | event->setRelatedTo(mRelatedTodo); |
350 | } | 352 | } |
351 | if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { | 353 | if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { |
352 | mRecurrence->writeEvent(event); | 354 | mRecurrence->writeEvent(event); |
355 | event->setRecurrenceID( event->dtStart().addSecs(-1) ); | ||
356 | event->setRecurDates(); | ||
357 | #if 0 | ||
358 | bool ok; | ||
359 | QDateTime next = event->getNextOccurence( event->dtStart().addSecs(-1), &ok ); | ||
360 | if ( ok ) { | ||
361 | QDateTime from,to; | ||
362 | bool time = mGeneral->mTimeButton->isChecked(); | ||
363 | if ( time ) { | ||
364 | to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; | ||
365 | from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; | ||
366 | } else { | ||
367 | to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; | ||
368 | from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; | ||
369 | } | ||
370 | if ( to < from ) | ||
371 | to = from; | ||
372 | int secs = from.secsTo( to ); | ||
373 | event->setRecurrenceID( next ); | ||
374 | event->setDtStart( next ); | ||
375 | event->setDtDue( next.addSecs( secs ) ); | ||
376 | } | ||
377 | else { | ||
378 | event->setHasRecurrenceID( false ); | ||
379 | event->recurrence()->unsetRecurs(); | ||
380 | } | ||
381 | #endif | ||
353 | } else | 382 | } else |
354 | event->recurrence()->unsetRecurs(); | 383 | event->recurrence()->unsetRecurs(); |
355 | } | 384 | } |
356 | 385 | ||
357 | bool KOTodoEditor::validateInput() | 386 | bool KOTodoEditor::validateInput() |
358 | { | 387 | { |
diff --git a/korganizer/kotodoviewitem.cpp b/korganizer/kotodoviewitem.cpp index 0e847c2..70f00c6 100644 --- a/korganizer/kotodoviewitem.cpp +++ b/korganizer/kotodoviewitem.cpp | |||
@@ -187,23 +187,31 @@ void KOTodoViewItem::setMyPixmap() | |||
187 | pixi.resize(size, pixSize+size); | 187 | pixi.resize(size, pixSize+size); |
188 | pPix.fill( Qt::red ); | 188 | pPix.fill( Qt::red ); |
189 | p.begin( &pixi ); | 189 | p.begin( &pixi ); |
190 | p. drawPixmap ( 0, pixSize, pPix); | 190 | p. drawPixmap ( 0, pixSize, pPix); |
191 | p.end(); | 191 | p.end(); |
192 | pixSize += size; | 192 | pixSize += size; |
193 | } | ||
194 | if ( mTodo->doesRecur() ) { | ||
195 | pixi.resize(size, pixSize+size); | ||
196 | pPix.fill( Qt::blue ); | ||
197 | p.begin( &pixi ); | ||
198 | p. drawPixmap ( 0, pixSize, pPix); | ||
199 | p.end(); | ||
200 | pixSize += size; | ||
193 | } | 201 | } |
194 | // } | 202 | // } |
195 | if ( pixi.width() > 1 ) { | 203 | if ( pixi.width() > 1 ) { |
196 | setPixmap ( 0,pixi ) ; | 204 | setPixmap ( 0,pixi ) ; |
197 | } else { | 205 | } else { |
198 | setPixmap ( 0,QPixmap() ) ; | 206 | setPixmap ( 0,QPixmap() ) ; |
199 | } | 207 | } |
200 | } | 208 | } |
201 | void KOTodoViewItem::stateChange(bool state) | 209 | void KOTodoViewItem::stateChange(bool state) |
202 | { | 210 | { |
203 | // qDebug("KOTodoViewItem::stateChange "); | 211 | // qDebug("KOTodoViewItem::stateChange %d ", state); |
204 | // do not change setting on startup | 212 | // do not change setting on startup |
205 | if ( m_init ) return; | 213 | if ( m_init ) return; |
206 | if (isOn()!=state) { | 214 | if (isOn()!=state) { |
207 | setOn(state); | 215 | setOn(state); |
208 | //qDebug("SETON "); | 216 | //qDebug("SETON "); |
209 | return; | 217 | return; |
@@ -212,13 +220,24 @@ void KOTodoViewItem::stateChange(bool state) | |||
212 | //qDebug("STATECHANGE:nothing to do "); | 220 | //qDebug("STATECHANGE:nothing to do "); |
213 | return; | 221 | return; |
214 | } | 222 | } |
215 | QString keyd = "=="; | 223 | QString keyd = "=="; |
216 | QString keyt = "=="; | 224 | QString keyt = "=="; |
217 | //qDebug("KOTodoViewItem::stateChange %s ", text(0).latin1()); | 225 | //qDebug("KOTodoViewItem::stateChange %s ", text(0).latin1()); |
218 | mTodo->setCompleted(state); | 226 | if ( mTodo->doesRecur() ){ |
227 | QDateTime start = mTodo->dtStart(); | ||
228 | mTodo->setCompleted(state); | ||
229 | if ( start != mTodo->dtStart() ) { | ||
230 | if ( state && !mTodo->isCompleted() ) { | ||
231 | setOn( false ); | ||
232 | state = false; | ||
233 | } | ||
234 | } | ||
235 | } else | ||
236 | mTodo->setCompleted(state); | ||
237 | |||
219 | if (state) mTodo->setCompleted(QDateTime::currentDateTime()); | 238 | if (state) mTodo->setCompleted(QDateTime::currentDateTime()); |
220 | 239 | ||
221 | if (mTodo->hasDueDate()) { | 240 | if (mTodo->hasDueDate()) { |
222 | setText(3, mTodo->dtDueDateStr()); | 241 | setText(3, mTodo->dtDueDateStr()); |
223 | QDate d = mTodo->dtDue().date(); | 242 | QDate d = mTodo->dtDue().date(); |
224 | keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); | 243 | keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); |
@@ -230,12 +249,31 @@ void KOTodoViewItem::stateChange(bool state) | |||
230 | setText(4,mTodo->dtDueTimeStr()); | 249 | setText(4,mTodo->dtDueTimeStr()); |
231 | QTime t = mTodo->dtDue().time(); | 250 | QTime t = mTodo->dtDue().time(); |
232 | keyt.sprintf("%02d%02d",t.hour(),t.minute()); | 251 | keyt.sprintf("%02d%02d",t.hour(),t.minute()); |
233 | setSortKey(4,keyt); | 252 | setSortKey(4,keyt); |
234 | } | 253 | } |
235 | } | 254 | } |
255 | if (mTodo->hasStartDate()) { | ||
256 | QString skeyt = "=="; | ||
257 | QString skeyd = "=="; | ||
258 | setText(5, mTodo->dtStartDateStr()); | ||
259 | QDate d = mTodo->dtStart().date(); | ||
260 | skeyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); | ||
261 | |||
262 | if (mTodo->doesFloat()) { | ||
263 | setText(6,""); | ||
264 | } | ||
265 | else { | ||
266 | setText(6,mTodo->dtStartTimeStr()); | ||
267 | QTime t = mTodo->dtStart().time(); | ||
268 | skeyt.sprintf("%02d%02d",t.hour(),t.minute()); | ||
269 | |||
270 | } | ||
271 | setSortKey(5,skeyd); | ||
272 | setSortKey(6,skeyt); | ||
273 | } | ||
236 | if (mTodo->isCompleted()) setSortKey(1,QString::number(9)+keyd+keyt); | 274 | if (mTodo->isCompleted()) setSortKey(1,QString::number(9)+keyd+keyt); |
237 | else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); | 275 | else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); |
238 | 276 | ||
239 | setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete()))); | 277 | setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete()))); |
240 | if (mTodo->percentComplete()<100) { | 278 | if (mTodo->percentComplete()<100) { |
241 | if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); | 279 | if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); |
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp index dbc159c..0684af2 100644 --- a/libkcal/incidence.cpp +++ b/libkcal/incidence.cpp | |||
@@ -644,6 +644,15 @@ QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const | |||
644 | } | 644 | } |
645 | } | 645 | } |
646 | if ( incidenceStart > dt ) | 646 | if ( incidenceStart > dt ) |
647 | *ok = true; | 647 | *ok = true; |
648 | return incidenceStart; | 648 | return incidenceStart; |
649 | } | 649 | } |
650 | QDateTime Incidence::dtStart() const | ||
651 | { | ||
652 | if ( doesRecur() ) { | ||
653 | if ( type() == "Todo" ) { | ||
654 | ((Todo*)this)->checkSetCompletedFalse(); | ||
655 | } | ||
656 | } | ||
657 | return mDtStart; | ||
658 | } | ||
diff --git a/libkcal/incidence.h b/libkcal/incidence.h index 38d2aaa..0ae9656 100644 --- a/libkcal/incidence.h +++ b/libkcal/incidence.h | |||
@@ -266,24 +266,25 @@ class Incidence : public IncidenceBase | |||
266 | 266 | ||
267 | bool hasRecurrenceID() const; | 267 | bool hasRecurrenceID() const; |
268 | void setHasRecurrenceID( bool b ); | 268 | void setHasRecurrenceID( bool b ); |
269 | 269 | ||
270 | void setRecurrenceID(QDateTime); | 270 | void setRecurrenceID(QDateTime); |
271 | QDateTime recurrenceID () const; | 271 | QDateTime recurrenceID () const; |
272 | QDateTime dtStart() const; | ||
272 | 273 | ||
273 | 274 | ||
274 | protected: | 275 | protected: |
275 | QPtrList<Alarm> mAlarms; | 276 | QPtrList<Alarm> mAlarms; |
276 | QPtrList<Incidence> mRelations; | 277 | QPtrList<Incidence> mRelations; |
278 | QDateTime mRecurrenceID; | ||
279 | bool mHasRecurrenceID; | ||
277 | private: | 280 | private: |
278 | int mRevision; | 281 | int mRevision; |
279 | bool mCancelled; | 282 | bool mCancelled; |
280 | 283 | ||
281 | // base components of jounal, event and todo | 284 | // base components of jounal, event and todo |
282 | QDateTime mRecurrenceID; | ||
283 | bool mHasRecurrenceID; | ||
284 | QDateTime mCreated; | 285 | QDateTime mCreated; |
285 | QString mDescription; | 286 | QString mDescription; |
286 | QString mSummary; | 287 | QString mSummary; |
287 | QStringList mCategories; | 288 | QStringList mCategories; |
288 | Incidence *mRelatedTo; | 289 | Incidence *mRelatedTo; |
289 | QString mRelatedToUid; | 290 | QString mRelatedToUid; |
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 7525a4a..51f2e9d 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp | |||
@@ -176,12 +176,13 @@ void IncidenceBase::setDtStart(const QDateTime &dtStart) | |||
176 | { | 176 | { |
177 | // if (mReadOnly) return; | 177 | // if (mReadOnly) return; |
178 | mDtStart = getEvenTime(dtStart); | 178 | mDtStart = getEvenTime(dtStart); |
179 | updated(); | 179 | updated(); |
180 | } | 180 | } |
181 | 181 | ||
182 | |||
182 | QDateTime IncidenceBase::dtStart() const | 183 | QDateTime IncidenceBase::dtStart() const |
183 | { | 184 | { |
184 | return mDtStart; | 185 | return mDtStart; |
185 | } | 186 | } |
186 | 187 | ||
187 | QString IncidenceBase::dtStartTimeStr() const | 188 | QString IncidenceBase::dtStartTimeStr() const |
diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index f9a6558..8624786 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h | |||
@@ -71,13 +71,13 @@ class IncidenceBase : public CustomProperties | |||
71 | /** Return if the object is read-only. */ | 71 | /** Return if the object is read-only. */ |
72 | bool isReadOnly() const { return mReadOnly; } | 72 | bool isReadOnly() const { return mReadOnly; } |
73 | 73 | ||
74 | /** for setting the event's starting date/time with a QDateTime. */ | 74 | /** for setting the event's starting date/time with a QDateTime. */ |
75 | virtual void setDtStart(const QDateTime &dtStart); | 75 | virtual void setDtStart(const QDateTime &dtStart); |
76 | /** returns an event's starting date/time as a QDateTime. */ | 76 | /** returns an event's starting date/time as a QDateTime. */ |
77 | QDateTime dtStart() const; | 77 | virtual QDateTime dtStart() const; |
78 | /** returns an event's starting time as a string formatted according to the | 78 | /** returns an event's starting time as a string formatted according to the |
79 | users locale settings */ | 79 | users locale settings */ |
80 | QString dtStartTimeStr() const; | 80 | QString dtStartTimeStr() const; |
81 | /** returns an event's starting date as a string formatted according to the | 81 | /** returns an event's starting date as a string formatted according to the |
82 | users locale settings */ | 82 | users locale settings */ |
83 | QString dtStartDateStr(bool shortfmt=true) const; | 83 | QString dtStartDateStr(bool shortfmt=true) const; |
@@ -138,18 +138,18 @@ class IncidenceBase : public CustomProperties | |||
138 | 138 | ||
139 | void registerObserver( Observer * ); | 139 | void registerObserver( Observer * ); |
140 | void unRegisterObserver( Observer * ); | 140 | void unRegisterObserver( Observer * ); |
141 | void updated(); | 141 | void updated(); |
142 | 142 | ||
143 | protected: | 143 | protected: |
144 | QDateTime mDtStart; | ||
144 | bool mReadOnly; | 145 | bool mReadOnly; |
145 | QDateTime getEvenTime( QDateTime ); | 146 | QDateTime getEvenTime( QDateTime ); |
146 | 147 | ||
147 | private: | 148 | private: |
148 | // base components | 149 | // base components |
149 | QDateTime mDtStart; | ||
150 | QString mOrganizer; | 150 | QString mOrganizer; |
151 | QString mUid; | 151 | QString mUid; |
152 | QDateTime mLastModified; | 152 | QDateTime mLastModified; |
153 | QPtrList<Attendee> mAttendees; | 153 | QPtrList<Attendee> mAttendees; |
154 | 154 | ||
155 | bool mFloats; | 155 | bool mFloats; |
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp index 9c04a7e..1f54c2f 100644 --- a/libkcal/todo.cpp +++ b/libkcal/todo.cpp | |||
@@ -308,18 +308,24 @@ QString Todo::statusStr() const | |||
308 | return QString(""); | 308 | return QString(""); |
309 | } | 309 | } |
310 | #endif | 310 | #endif |
311 | 311 | ||
312 | bool Todo::isCompleted() const | 312 | bool Todo::isCompleted() const |
313 | { | 313 | { |
314 | if (mPercentComplete == 100) return true; | 314 | if (mPercentComplete == 100) { |
315 | else return false; | 315 | return true; |
316 | } | ||
317 | else return false; | ||
316 | } | 318 | } |
317 | 319 | ||
318 | void Todo::setCompleted(bool completed) | 320 | void Todo::setCompleted(bool completed) |
319 | { | 321 | { |
322 | if ( mHasRecurrenceID && completed && mPercentComplete != 100 ) { | ||
323 | if ( !setRecurDates() ) | ||
324 | completed = false; | ||
325 | } | ||
320 | if (completed) mPercentComplete = 100; | 326 | if (completed) mPercentComplete = 100; |
321 | else { | 327 | else { |
322 | mPercentComplete = 0; | 328 | mPercentComplete = 0; |
323 | mHasCompletedDate = false; | 329 | mHasCompletedDate = false; |
324 | } | 330 | } |
325 | updated(); | 331 | updated(); |
@@ -354,15 +360,39 @@ bool Todo::hasCompletedDate() const | |||
354 | } | 360 | } |
355 | 361 | ||
356 | int Todo::percentComplete() const | 362 | int Todo::percentComplete() const |
357 | { | 363 | { |
358 | return mPercentComplete; | 364 | return mPercentComplete; |
359 | } | 365 | } |
360 | 366 | bool Todo::setRecurDates() | |
361 | void Todo::setPercentComplete(int v) | ||
362 | { | 367 | { |
368 | if ( !mHasRecurrenceID ) | ||
369 | return true; | ||
370 | int secs = mDtStart.secsTo( dtDue() ); | ||
371 | bool ok; | ||
372 | qDebug("--------------------setRecurDates() "); | ||
373 | //qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() ); | ||
374 | QDateTime next = getNextOccurence( mRecurrenceID, &ok ); | ||
375 | if ( ok ) { | ||
376 | mRecurrenceID = next; | ||
377 | mDtStart = next; | ||
378 | setDtDue( next.addSecs( secs ) ); | ||
379 | if ( QDateTime::currentDateTime() > next) | ||
380 | return false; | ||
381 | } else { | ||
382 | setHasRecurrenceID( false ); | ||
383 | recurrence()->unsetRecurs(); | ||
384 | } | ||
385 | return true; | ||
386 | } | ||
387 | void Todo::setPercentComplete(int v) | ||
388 | { | ||
389 | if ( mHasRecurrenceID && v == 100 && mPercentComplete != 100 ) { | ||
390 | if ( !setRecurDates() ) | ||
391 | v = 0; | ||
392 | } | ||
363 | mPercentComplete = v; | 393 | mPercentComplete = v; |
364 | if ( v != 100 ) | 394 | if ( v != 100 ) |
365 | mHasCompletedDate = false; | 395 | mHasCompletedDate = false; |
366 | updated(); | 396 | updated(); |
367 | } | 397 | } |
368 | QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const | 398 | QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const |
@@ -409,6 +439,19 @@ QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const | |||
409 | } | 439 | } |
410 | *ok = false; | 440 | *ok = false; |
411 | return QDateTime (); | 441 | return QDateTime (); |
412 | 442 | ||
413 | } | 443 | } |
414 | 444 | ||
445 | void Todo::checkSetCompletedFalse() | ||
446 | { | ||
447 | if ( !hasRecurrenceID() ) { | ||
448 | qDebug("ERROR 1 in Todo::checkSetCompletedFalse"); | ||
449 | } | ||
450 | // qDebug("Todo::checkSetCompletedFalse()"); | ||
451 | //qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() ); | ||
452 | if ( mPercentComplete == 100 && mDtStart == mRecurrenceID && QDateTime::currentDateTime() > mDtStart) { | ||
453 | qDebug("%s %s %s ",mDtStart.toString().latin1(), dtDue().toString().latin1(),mRecurrenceID.toString().latin1() ); | ||
454 | setCompleted( false ); | ||
455 | qDebug("Todo::checkSetCompletedFalse++++++++++++++++++++++++++++ "); | ||
456 | } | ||
457 | } | ||
diff --git a/libkcal/todo.h b/libkcal/todo.h index 137b252..a22d4b7 100644 --- a/libkcal/todo.h +++ b/libkcal/todo.h | |||
@@ -109,12 +109,14 @@ class Todo : public Incidence | |||
109 | /** set date and time of completion */ | 109 | /** set date and time of completion */ |
110 | void setCompleted(const QDateTime &completed); | 110 | void setCompleted(const QDateTime &completed); |
111 | 111 | ||
112 | /** Return true, if todo has a date associated with completion */ | 112 | /** Return true, if todo has a date associated with completion */ |
113 | bool hasCompletedDate() const; | 113 | bool hasCompletedDate() const; |
114 | bool contains ( Todo*); | 114 | bool contains ( Todo*); |
115 | void checkSetCompletedFalse(); | ||
116 | bool setRecurDates(); | ||
115 | 117 | ||
116 | private: | 118 | private: |
117 | bool accept(Visitor &v) { return v.visit(this); } | 119 | bool accept(Visitor &v) { return v.visit(this); } |
118 | 120 | ||
119 | QDateTime mDtDue; // due date of todo | 121 | QDateTime mDtDue; // due date of todo |
120 | 122 | ||