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