00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <qtooltip.h>
00026 #include <qfiledialog.h>
00027 #include <qlayout.h>
00028 #include <qvbox.h>
00029 #include <qbuttongroup.h>
00030 #include <qvgroupbox.h>
00031 #include <qwidgetstack.h>
00032 #include <qdatetime.h>
00033 #include <qcheckbox.h>
00034 #include <qlabel.h>
00035 #include <qspinbox.h>
00036 #include <qpushbutton.h>
00037 #include <qwhatsthis.h>
00038
00039 #include <kglobal.h>
00040 #include <klocale.h>
00041 #include <kmessagebox.h>
00042 #include <kdebug.h>
00043 #include <kstandarddirs.h>
00044 #include <kfiledialog.h>
00045 #include <ktextedit.h>
00046
00047 #include <libkcal/incidenceformatter.h>
00048 #include <libkcal/todo.h>
00049
00050 #include <libkdepim/kdateedit.h>
00051
00052 #include "koprefs.h"
00053 #include "koglobals.h"
00054 #include "ktimeedit.h"
00055
00056 #include "koeditorgeneraltodo.h"
00057 #include "koeditorgeneraltodo.moc"
00058
00059 KOEditorGeneralTodo::KOEditorGeneralTodo(QObject* parent,
00060 const char* name)
00061 : KOEditorGeneral( parent, name)
00062 {
00063 setType( "Todo" );
00064 }
00065
00066 KOEditorGeneralTodo::~KOEditorGeneralTodo()
00067 {
00068 }
00069
00070 void KOEditorGeneralTodo::finishSetup()
00071 {
00072 QWidget::setTabOrder( mSummaryEdit, mLocationEdit );
00073 QWidget::setTabOrder( mLocationEdit, mStartCheck );
00074 QWidget::setTabOrder( mStartCheck, mStartDateEdit );
00075 QWidget::setTabOrder( mStartDateEdit, mStartTimeEdit );
00076 QWidget::setTabOrder( mStartTimeEdit, mDueCheck );
00077 QWidget::setTabOrder( mDueCheck, mDueDateEdit );
00078 QWidget::setTabOrder( mDueDateEdit, mDueTimeEdit );
00079 QWidget::setTabOrder( mDueTimeEdit, mTimeButton );
00080 QWidget::setTabOrder( mTimeButton, mRecEditButton );
00081 QWidget::setTabOrder( mRecEditButton, mCompletedCombo );
00082 QWidget::setTabOrder( mCompletedCombo, mPriorityCombo );
00083 QWidget::setTabOrder( mPriorityCombo, mAlarmButton );
00084 QWidget::setTabOrder( mAlarmButton, mAlarmTimeEdit );
00085 QWidget::setTabOrder( mAlarmTimeEdit, mAlarmIncrCombo );
00086
00087 QWidget::setTabOrder( mAlarmIncrCombo, mAlarmEditButton );
00088
00089
00090 QWidget::setTabOrder( mAlarmEditButton, mDescriptionEdit );
00091 QWidget::setTabOrder( mDescriptionEdit, mCategoriesButton );
00092 QWidget::setTabOrder( mCategoriesButton, mSecrecyCombo );
00093
00094
00095 mSummaryEdit->setFocus();
00096 }
00097
00098 void KOEditorGeneralTodo::initTime(QWidget *parent,QBoxLayout *topLayout)
00099 {
00100 kdDebug(5850) << k_funcinfo << endl;
00101 QBoxLayout *timeLayout = new QVBoxLayout(topLayout);
00102
00103 QGroupBox *timeGroupBox = new QGroupBox(1,QGroupBox::Horizontal,
00104 i18n("Date && Time"),parent);
00105 timeLayout->addWidget(timeGroupBox);
00106
00107 QFrame *timeBoxFrame = new QFrame(timeGroupBox);
00108 QWhatsThis::add( timeBoxFrame,
00109 i18n("Sets options for due and start dates and times "
00110 "for this to-do.") );
00111
00112 QGridLayout *layoutTimeBox = new QGridLayout(timeBoxFrame,1,1);
00113 layoutTimeBox->setSpacing(topLayout->spacing());
00114
00115
00116 QString whatsThis = i18n("Sets the start date for this to-do");
00117 mStartCheck = new QCheckBox(i18n("Sta&rt:"),timeBoxFrame);
00118 QWhatsThis::add( mStartCheck, whatsThis );
00119 layoutTimeBox->addWidget(mStartCheck,0,0);
00120 connect(mStartCheck,SIGNAL(toggled(bool)),SLOT(enableStartEdit(bool)));
00121 connect(mStartCheck,SIGNAL(toggled(bool)),SLOT(startDateModified()));
00122
00123 mStartDateEdit = new KDateEdit(timeBoxFrame);
00124 QWhatsThis::add( mStartDateEdit, whatsThis );
00125 layoutTimeBox->addWidget(mStartDateEdit,0,1);
00126 connect(mStartDateEdit,SIGNAL(dateChanged(const QDate&)),SLOT(startDateModified()));
00127
00128 mStartTimeEdit = new KTimeEdit(timeBoxFrame);
00129 QWhatsThis::add( mStartTimeEdit,
00130 i18n("Sets the start time for this to-do.") );
00131 layoutTimeBox->addWidget(mStartTimeEdit,0,2);
00132 connect(mStartTimeEdit,SIGNAL(timeChanged(QTime)),SLOT(startDateModified()));
00133
00134 whatsThis = i18n("Sets the due date for this to-do.");
00135 mDueCheck = new QCheckBox(i18n("&Due:"),timeBoxFrame);
00136 QWhatsThis::add( mDueCheck, whatsThis );
00137 layoutTimeBox->addWidget(mDueCheck,1,0);
00138 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(enableDueEdit(bool)));
00139 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(showAlarm()));
00140 connect(mDueCheck,SIGNAL(toggled(bool)),SIGNAL(dueDateEditToggle(bool)));
00141 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(dateChanged()));
00142
00143 mDueDateEdit = new KDateEdit(timeBoxFrame);
00144 QWhatsThis::add( mDueDateEdit, whatsThis );
00145 layoutTimeBox->addWidget(mDueDateEdit,1,1);
00146 connect(mDueDateEdit,SIGNAL(dateChanged(const QDate&)),SLOT(dateChanged()));
00147
00148 mDueTimeEdit = new KTimeEdit(timeBoxFrame);
00149 QWhatsThis::add( mDueTimeEdit,
00150 i18n("Sets the due time for this to-do.") );
00151 layoutTimeBox->addWidget(mDueTimeEdit,1,2);
00152 connect(mDueTimeEdit,SIGNAL(timeChanged( QTime )),SLOT(dateChanged()));
00153
00154 mTimeButton = new QCheckBox(i18n("Ti&me associated"),timeBoxFrame);
00155 QWhatsThis::add( mTimeButton,
00156 i18n("Sets whether or not this to-do's start and due dates "
00157 "have times associated with them.") );
00158 layoutTimeBox->addWidget( mTimeButton, 0, 3 );
00159 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(enableTimeEdits(bool)));
00160 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(dateChanged()));
00161
00162 QLabel *label = new QLabel( i18n( "Recurrence:" ), timeBoxFrame );
00163 layoutTimeBox->addWidget( label, 3, 0 );
00164 QBoxLayout *recLayout = new QHBoxLayout();
00165 layoutTimeBox->addMultiCellLayout( recLayout, 3, 3, 1, 4 );
00166 mRecEditButton = new QPushButton( timeBoxFrame );
00167 mRecEditButton->setIconSet( KOGlobals::self()->smallIconSet( "recur", 16 ) );
00168 recLayout->addWidget( mRecEditButton );
00169 connect( mRecEditButton, SIGNAL(clicked()), SIGNAL(editRecurrence()) );
00170 mRecEditLabel = new QLabel( QString(), timeBoxFrame );
00171 recLayout->addWidget( mRecEditLabel );
00172 recLayout->addStretch( 1 );
00173
00174
00175 layoutTimeBox->setColStretch( 3, 1 );
00176
00177 QBoxLayout *secLayout = new QHBoxLayout();
00178 layoutTimeBox->addLayout( secLayout, 0, 4 );
00179 initSecrecy( timeBoxFrame, secLayout );
00180 }
00181
00182
00183 void KOEditorGeneralTodo::initCompletion(QWidget *parent, QBoxLayout *topLayout)
00184 {
00185 QString whatsThis = i18n("Sets the current completion status of this to-do "
00186 "as a percentage.");
00187 mCompletedCombo = new QComboBox(parent);
00188 QWhatsThis::add( mCompletedCombo, whatsThis );
00189 for (int i = 0; i <= 100; i+=10) {
00190
00191 QString label = i18n("Percent complete", "%1 %").arg (i);
00192 mCompletedCombo->insertItem(label);
00193 }
00194 connect(mCompletedCombo,SIGNAL(activated(int)),SLOT(completedChanged(int)));
00195 topLayout->addWidget(mCompletedCombo);
00196
00197 mCompletedLabel = new QLabel(i18n("co&mpleted"),parent);
00198 topLayout->addWidget(mCompletedLabel);
00199 mCompletedLabel->setBuddy( mCompletedCombo );
00200 mCompletionDateEdit = new KDateEdit( parent );
00201 mCompletionDateEdit->hide();
00202 topLayout->addWidget( mCompletionDateEdit );
00203 mCompletionTimeEdit = new KTimeEdit( parent, QTime() );
00204 mCompletionTimeEdit->hide();
00205 topLayout->addWidget( mCompletionTimeEdit );
00206 }
00207
00208 void KOEditorGeneralTodo::initPriority(QWidget *parent, QBoxLayout *topLayout)
00209 {
00210 QString whatsThis = i18n("Sets the priority of this to-do on a scale "
00211 "from one to nine, with one being the highest "
00212 "priority, five being a medium priority, and "
00213 "nine being the lowest. In programs that have a "
00214 "different scale, the numbers will be adjusted "
00215 "to match the appropriate scale.");
00216 QLabel *priorityLabel = new QLabel(i18n("&Priority:"),parent);
00217 topLayout->addWidget(priorityLabel);
00218
00219 mPriorityCombo = new QComboBox(parent);
00220 mPriorityCombo->insertItem(i18n("unspecified"));
00221 mPriorityCombo->insertItem(i18n("1 (highest)"));
00222 mPriorityCombo->insertItem(i18n("2"));
00223 mPriorityCombo->insertItem(i18n("3"));
00224 mPriorityCombo->insertItem(i18n("4"));
00225 mPriorityCombo->insertItem(i18n("5 (medium)"));
00226 mPriorityCombo->insertItem(i18n("6"));
00227 mPriorityCombo->insertItem(i18n("7"));
00228 mPriorityCombo->insertItem(i18n("8"));
00229 mPriorityCombo->insertItem(i18n("9 (lowest)"));
00230 topLayout->addWidget(mPriorityCombo);
00231 priorityLabel->setBuddy( mPriorityCombo );
00232 }
00233
00234 void KOEditorGeneralTodo::initStatus(QWidget *parent,QBoxLayout *topLayout)
00235 {
00236 QBoxLayout *statusLayout = new QHBoxLayout(topLayout);
00237
00238 initCompletion( parent, statusLayout );
00239
00240 statusLayout->addStretch( 1 );
00241
00242 initPriority( parent, statusLayout );
00243 }
00244
00245 void KOEditorGeneralTodo::setDefaults( const QDateTime &due, bool allDay )
00246 {
00247 kdDebug(5850) << k_funcinfo << due <<endl;
00248 KOEditorGeneral::setDefaults(allDay);
00249
00250 mTimeButton->setChecked( !allDay );
00251 mTimeButton->setEnabled( mTimeButton->isChecked() );
00252
00253 enableTimeEdits( !allDay );
00254
00255 mDueCheck->setChecked( due.isValid() );
00256 enableDueEdit( due.isValid() );
00257
00258 mStartCheck->setChecked(false);
00259 enableStartEdit(false);
00260
00261 if ( due.isValid() ) {
00262 mDueDateEdit->setDate( due.date() );
00263 mDueTimeEdit->setTime( due.time() );
00264 } else {
00265
00266 mDueDateEdit->setDate( QDate::currentDate().addDays(1) );
00267 mDueTimeEdit->setTime( QTime::currentTime() );
00268 }
00269
00270 if ( !due.isValid() || (QDateTime::currentDateTime() < due) ) {
00271 mStartDateEdit->setDate( QDate::currentDate() );
00272 mStartTimeEdit->setTime( QTime::currentTime() );
00273 } else {
00274 mStartDateEdit->setDate( due.date().addDays( -1 ) );
00275 mStartTimeEdit->setTime( due.time() );
00276 }
00277 mStartDateModified = false;
00278
00279 mPriorityCombo->setCurrentItem(5);
00280
00281 mCompletedCombo->setCurrentItem(0);
00282 }
00283
00284 void KOEditorGeneralTodo::readTodo(Todo *todo, Calendar *calendar, const QDate &date )
00285 {
00286 KOEditorGeneral::readIncidence(todo, calendar);
00287
00288 QDateTime dueDT;
00289
00290 if (todo->hasDueDate()) {
00291 enableAlarm( true );
00292 dueDT = todo->dtDue();
00293 if ( todo->doesRecur() && date.isValid() ) {
00294 dueDT.addDays( todo->dtDue().date().daysTo( date ) );
00295 }
00296 mDueDateEdit->setDate(dueDT.date());
00297 mDueTimeEdit->setTime(dueDT.time());
00298 mDueCheck->setChecked(true);
00299 } else {
00300 enableAlarm( false );
00301 mDueDateEdit->setEnabled(false);
00302 mDueTimeEdit->setEnabled(false);
00303 mDueDateEdit->setDate(QDate::currentDate());
00304 mDueTimeEdit->setTime(QTime::currentTime());
00305 mDueCheck->setChecked(false);
00306 }
00307
00308 if (todo->hasStartDate()) {
00309 QDateTime startDT = todo->dtStart();
00310 if ( todo->doesRecur() && date.isValid() ) {
00311 startDT.setDate( date );
00312 }
00313 mStartDateEdit->setDate(startDT.date());
00314 mStartTimeEdit->setTime(startDT.time());
00315 mStartCheck->setChecked(true);
00316 } else {
00317 mStartDateEdit->setEnabled(false);
00318 mStartTimeEdit->setEnabled(false);
00319 mStartDateEdit->setDate(QDate::currentDate());
00320 mStartTimeEdit->setTime(QTime::currentTime());
00321 mStartCheck->setChecked(false);
00322 }
00323
00324 mTimeButton->setChecked( !todo->doesFloat() &&
00325 todo->dtDue().time() != QTime( 0, 0 ) );
00326
00327 updateRecurrenceSummary( todo );
00328
00329 mAlreadyComplete = false;
00330 mCompletedCombo->setCurrentItem(todo->percentComplete() / 10);
00331 if (todo->isCompleted() && todo->hasCompletedDate()) {
00332 mCompleted = todo->completed();
00333 mAlreadyComplete = true;
00334 }
00335 setCompletedDate();
00336
00337 mPriorityCombo->setCurrentItem( todo->priority() );
00338 mStartDateModified = false;
00339 }
00340
00341 void KOEditorGeneralTodo::writeTodo(Todo *todo)
00342 {
00343 KOEditorGeneral::writeIncidence(todo);
00344
00345
00346 QString tmpStr;
00347
00348 todo->setHasDueDate(mDueCheck->isChecked());
00349 todo->setHasStartDate(mStartCheck->isChecked());
00350
00351 QDate tmpSDate, tmpDDate;
00352 QTime tmpSTime, tmpDTime;
00353 QDateTime tmpStartDT, tmpDueDT;
00354 if ( mTimeButton->isChecked() ) {
00355 todo->setFloats(false);
00356
00357
00358 tmpDDate = mDueDateEdit->date();
00359 tmpDTime = mDueTimeEdit->getTime();
00360 tmpDueDT.setDate(tmpDDate);
00361 tmpDueDT.setTime(tmpDTime);
00362
00363
00364 if ( mStartCheck->isChecked() ) {
00365 tmpSDate = mStartDateEdit->date();
00366 tmpSTime = mStartTimeEdit->getTime();
00367 tmpStartDT.setDate(tmpSDate);
00368 tmpStartDT.setTime(tmpSTime);
00369 } else {
00370 tmpStartDT = tmpDueDT;
00371 }
00372 } else {
00373 todo->setFloats(true);
00374
00375
00376 tmpDDate = mDueDateEdit->date();
00377 tmpDTime.setHMS(0,0,0);
00378 tmpDueDT.setDate(tmpDDate);
00379 tmpDueDT.setTime(tmpDTime);
00380
00381 if ( mStartCheck->isChecked() ) {
00382 tmpSDate = mStartDateEdit->date();
00383 tmpSTime.setHMS(0,0,0);
00384 tmpStartDT.setDate(tmpSDate);
00385 tmpStartDT.setTime(tmpSTime);
00386 } else {
00387 tmpStartDT = tmpDueDT;
00388 }
00389 }
00390
00391
00392 if ( todo->doesRecur() && !mStartDateModified ) {
00393 todo->setDtDue( tmpDueDT );
00394 } else {
00395 todo->setDtDue( tmpDueDT, true );
00396 todo->setDtStart( tmpStartDT );
00397 todo->setDtRecurrence( tmpDueDT );
00398 }
00399
00400 todo->setPriority( mPriorityCombo->currentItem() );
00401
00402
00403 todo->setPercentComplete(mCompletedCombo->currentItem() * 10);
00404
00405 if (mCompletedCombo->currentItem() == 10 && mCompleted.isValid()) {
00406 QDateTime completed( mCompletionDateEdit->date(),
00407 mCompletionTimeEdit->getTime() );
00408 int difference = mCompleted.secsTo( completed );
00409 if ( (difference < 60) && (difference > -60) &&
00410 (completed.time().minute() == mCompleted.time().minute() ) ) {
00411
00412
00413 completed = mCompleted;
00414 }
00415 todo->setCompleted( completed );
00416 }
00417 }
00418
00419 void KOEditorGeneralTodo::enableDueEdit(bool enable)
00420 {
00421 mDueDateEdit->setEnabled( enable );
00422
00423 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
00424 mTimeButton->setEnabled(true);
00425 } else {
00426 mTimeButton->setEnabled(false);
00427 }
00428
00429 if (enable) {
00430 mDueTimeEdit->setEnabled( mTimeButton->isChecked() );
00431 } else {
00432 mDueTimeEdit->setEnabled( false );
00433 }
00434 }
00435
00436 void KOEditorGeneralTodo::enableStartEdit( bool enable )
00437 {
00438 mStartDateEdit->setEnabled( enable );
00439
00440 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
00441 mTimeButton->setEnabled(true);
00442 }
00443 else {
00444 mTimeButton->setEnabled(false);
00445 mTimeButton->setChecked(false);
00446 }
00447
00448 if (enable) {
00449 mStartTimeEdit->setEnabled( mTimeButton->isChecked() );
00450 } else {
00451 mStartTimeEdit->setEnabled( false );
00452 }
00453 }
00454
00455 void KOEditorGeneralTodo::enableTimeEdits(bool enable)
00456 {
00457 if(mStartCheck->isChecked()) {
00458 mStartTimeEdit->setEnabled( enable );
00459 }
00460 if(mDueCheck->isChecked()) {
00461 mDueTimeEdit->setEnabled( enable );
00462 }
00463 }
00464
00465 void KOEditorGeneralTodo::showAlarm()
00466 {
00467 enableAlarm( mDueCheck->isChecked() );
00468 }
00469
00470 bool KOEditorGeneralTodo::validateInput()
00471 {
00472 if (mDueCheck->isChecked()) {
00473 if (!mDueDateEdit->date().isValid()) {
00474 KMessageBox::sorry(0,i18n("Please specify a valid due date."));
00475 return false;
00476 }
00477 if (mTimeButton->isChecked()) {
00478 if (!mDueTimeEdit->inputIsValid()) {
00479 KMessageBox::sorry(0,i18n("Please specify a valid due time."));
00480 return false;
00481 }
00482 }
00483 }
00484
00485 if (mStartCheck->isChecked()) {
00486 if (!mStartDateEdit->date().isValid()) {
00487 KMessageBox::sorry(0,i18n("Please specify a valid start date."));
00488 return false;
00489 }
00490 if (mTimeButton->isChecked()) {
00491 if (!mStartTimeEdit->inputIsValid()) {
00492 KMessageBox::sorry(0,i18n("Please specify a valid start time."));
00493 return false;
00494 }
00495 }
00496 }
00497
00498 if (mStartCheck->isChecked() && mDueCheck->isChecked()) {
00499 QDateTime startDate;
00500 QDateTime dueDate;
00501 startDate.setDate(mStartDateEdit->date());
00502 dueDate.setDate(mDueDateEdit->date());
00503 if (mTimeButton->isChecked()) {
00504 startDate.setTime(mStartTimeEdit->getTime());
00505 dueDate.setTime(mDueTimeEdit->getTime());
00506 }
00507 if (startDate > dueDate) {
00508 KMessageBox::sorry(0,
00509 i18n("The start date cannot be after the due date."));
00510 return false;
00511 }
00512 }
00513
00514 return KOEditorGeneral::validateInput();
00515 }
00516
00517 void KOEditorGeneralTodo::updateRecurrenceSummary( Todo *todo )
00518 {
00519 if ( todo->doesRecur() ) {
00520 mRecEditLabel->setText( IncidenceFormatter::recurrenceString( todo ) );
00521 } else {
00522 mRecEditLabel->setText( QString() );
00523 }
00524 }
00525
00526 void KOEditorGeneralTodo::completedChanged(int index)
00527 {
00528 if (index == 10) {
00529 mCompleted = QDateTime::currentDateTime();
00530 }
00531 setCompletedDate();
00532 }
00533
00534 void KOEditorGeneralTodo::dateChanged()
00535 {
00536 KLocale *l = KGlobal::locale();
00537 QString dateTimeStr = "";
00538
00539 if ( mStartCheck->isChecked() ) {
00540 dateTimeStr += i18n("Start: %1").arg(
00541 l->formatDate( mStartDateEdit->date() ) );
00542 if ( mTimeButton->isChecked() )
00543 dateTimeStr += QString(" %1").arg(
00544 l->formatTime( mStartTimeEdit->getTime() ) );
00545 }
00546
00547 if ( mDueCheck->isChecked() ) {
00548 dateTimeStr += i18n(" Due: %1").arg(
00549 l->formatDate( mDueDateEdit->date() ) );
00550 if ( mTimeButton->isChecked() )
00551 dateTimeStr += QString(" %1").arg(
00552 l->formatTime( mDueTimeEdit->getTime() ) );
00553 }
00554
00555 emit dateTimeStrChanged( dateTimeStr );
00556 QDateTime endDt( mDueDateEdit->date(), mDueTimeEdit->getTime() );
00557 emit signalDateTimeChanged( endDt, endDt );
00558 }
00559
00560 void KOEditorGeneralTodo::startDateModified()
00561 {
00562 mStartDateModified = true;
00563 dateChanged();
00564 }
00565
00566 void KOEditorGeneralTodo::setCompletedDate()
00567 {
00568 if (mCompletedCombo->currentItem() == 10 && mCompleted.isValid()) {
00569 mCompletedLabel->setText(i18n("co&mpleted on"));
00570
00571 mCompletionDateEdit->show();
00572 mCompletionTimeEdit->show();
00573 mCompletionDateEdit->setDate( mCompleted.date() );
00574 mCompletionTimeEdit->setTime( mCompleted.time() );
00575 } else {
00576 mCompletedLabel->setText(i18n("co&mpleted"));
00577 mCompletionDateEdit->hide();
00578 mCompletionTimeEdit->hide();
00579 }
00580 }
00581
00582 void KOEditorGeneralTodo::modified (Todo* todo, KOGlobals::HowChanged modification)
00583 {
00584 switch (modification) {
00585 case KOGlobals::PRIORITY_MODIFIED:
00586 mPriorityCombo->setCurrentItem( todo->priority() );
00587 break;
00588 case KOGlobals::COMPLETION_MODIFIED:
00589 mCompletedCombo->setCurrentItem(todo->percentComplete() / 10);
00590 if (todo->isCompleted() && todo->hasCompletedDate()) {
00591 mCompleted = todo->completed();
00592 }
00593 setCompletedDate();
00594 break;
00595 case KOGlobals::CATEGORY_MODIFIED:
00596 setCategories( todo->categories() );
00597 break;
00598 case KOGlobals::UNKNOWN_MODIFIED:
00599 default:
00600 readTodo( todo, 0, QDate() );
00601 break;
00602 }
00603 }