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, mAlarmAdvancedButton );
00087 QWidget::setTabOrder( mAlarmAdvancedButton, 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
00329 updateRecurrenceSummary( todo );
00330
00331 mAlreadyComplete = false;
00332 mCompletedCombo->setCurrentItem(todo->percentComplete() / 10);
00333 if (todo->isCompleted() && todo->hasCompletedDate()) {
00334 mCompleted = todo->completed();
00335 mAlreadyComplete = true;
00336 }
00337 setCompletedDate();
00338
00339 mPriorityCombo->setCurrentItem( todo->priority() );
00340 mStartDateModified = false;
00341 }
00342
00343 void KOEditorGeneralTodo::writeTodo(Todo *todo)
00344 {
00345 KOEditorGeneral::writeIncidence(todo);
00346
00347
00348 QString tmpStr;
00349
00350 todo->setHasDueDate(mDueCheck->isChecked());
00351 todo->setHasStartDate(mStartCheck->isChecked());
00352
00353 QDate tmpSDate, tmpDDate;
00354 QTime tmpSTime, tmpDTime;
00355 QDateTime tmpStartDT, tmpDueDT;
00356 if ( mTimeButton->isChecked() ) {
00357 todo->setFloats(false);
00358
00359
00360 tmpDDate = mDueDateEdit->date();
00361 tmpDTime = mDueTimeEdit->getTime();
00362 tmpDueDT.setDate(tmpDDate);
00363 tmpDueDT.setTime(tmpDTime);
00364
00365
00366 if ( mStartCheck->isChecked() ) {
00367 tmpSDate = mStartDateEdit->date();
00368 tmpSTime = mStartTimeEdit->getTime();
00369 tmpStartDT.setDate(tmpSDate);
00370 tmpStartDT.setTime(tmpSTime);
00371 } else {
00372 tmpStartDT = tmpDueDT;
00373 }
00374 } else {
00375 todo->setFloats(true);
00376
00377
00378 tmpDDate = mDueDateEdit->date();
00379 tmpDTime.setHMS(0,0,0);
00380 tmpDueDT.setDate(tmpDDate);
00381 tmpDueDT.setTime(tmpDTime);
00382
00383 if ( mStartCheck->isChecked() ) {
00384 tmpSDate = mStartDateEdit->date();
00385 tmpSTime.setHMS(0,0,0);
00386 tmpStartDT.setDate(tmpSDate);
00387 tmpStartDT.setTime(tmpSTime);
00388 } else {
00389 tmpStartDT = tmpDueDT;
00390 }
00391 }
00392
00393
00394 if ( todo->doesRecur() && !mStartDateModified ) {
00395 todo->setDtDue( tmpDueDT );
00396 } else {
00397 todo->setDtDue( tmpDueDT, true );
00398 todo->setDtStart( tmpStartDT );
00399 todo->setDtRecurrence( tmpDueDT );
00400 }
00401
00402 todo->setPriority( mPriorityCombo->currentItem() );
00403
00404
00405 todo->setPercentComplete(mCompletedCombo->currentItem() * 10);
00406
00407 if (mCompletedCombo->currentItem() == 10 && mCompleted.isValid()) {
00408 QDateTime completed( mCompletionDateEdit->date(),
00409 mCompletionTimeEdit->getTime() );
00410 int difference = mCompleted.secsTo( completed );
00411 if ( (difference < 60) && (difference > -60) &&
00412 (completed.time().minute() == mCompleted.time().minute() ) ) {
00413
00414
00415 completed = mCompleted;
00416 }
00417 todo->setCompleted( completed );
00418 }
00419 }
00420
00421 void KOEditorGeneralTodo::enableDueEdit(bool enable)
00422 {
00423 mDueDateEdit->setEnabled( enable );
00424
00425 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
00426 mTimeButton->setEnabled(true);
00427 } else {
00428 mTimeButton->setEnabled(false);
00429 }
00430
00431 if (enable) {
00432 mDueTimeEdit->setEnabled( mTimeButton->isChecked() );
00433 } else {
00434 mDueTimeEdit->setEnabled( false );
00435 }
00436 }
00437
00438 void KOEditorGeneralTodo::enableStartEdit( bool enable )
00439 {
00440 mStartDateEdit->setEnabled( enable );
00441
00442 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
00443 mTimeButton->setEnabled(true);
00444 }
00445 else {
00446 mTimeButton->setEnabled(false);
00447 mTimeButton->setChecked(false);
00448 }
00449
00450 if (enable) {
00451 mStartTimeEdit->setEnabled( mTimeButton->isChecked() );
00452 } else {
00453 mStartTimeEdit->setEnabled( false );
00454 }
00455 }
00456
00457 void KOEditorGeneralTodo::enableTimeEdits(bool enable)
00458 {
00459 if(mStartCheck->isChecked()) {
00460 mStartTimeEdit->setEnabled( enable );
00461 }
00462 if(mDueCheck->isChecked()) {
00463 mDueTimeEdit->setEnabled( enable );
00464 }
00465 }
00466
00467 bool KOEditorGeneralTodo::validateInput()
00468 {
00469 if (mDueCheck->isChecked()) {
00470 if (!mDueDateEdit->date().isValid()) {
00471 KMessageBox::sorry(0,i18n("Please specify a valid due date."));
00472 return false;
00473 }
00474 if (mTimeButton->isChecked()) {
00475 if (!mDueTimeEdit->inputIsValid()) {
00476 KMessageBox::sorry(0,i18n("Please specify a valid due time."));
00477 return false;
00478 }
00479 }
00480 }
00481
00482 if (mStartCheck->isChecked()) {
00483 if (!mStartDateEdit->date().isValid()) {
00484 KMessageBox::sorry(0,i18n("Please specify a valid start date."));
00485 return false;
00486 }
00487 if (mTimeButton->isChecked()) {
00488 if (!mStartTimeEdit->inputIsValid()) {
00489 KMessageBox::sorry(0,i18n("Please specify a valid start time."));
00490 return false;
00491 }
00492 }
00493 }
00494
00495 if (mStartCheck->isChecked() && mDueCheck->isChecked()) {
00496 QDateTime startDate;
00497 QDateTime dueDate;
00498 startDate.setDate(mStartDateEdit->date());
00499 dueDate.setDate(mDueDateEdit->date());
00500 if (mTimeButton->isChecked()) {
00501 startDate.setTime(mStartTimeEdit->getTime());
00502 dueDate.setTime(mDueTimeEdit->getTime());
00503 }
00504 if (startDate > dueDate) {
00505 KMessageBox::sorry(0,
00506 i18n("The start date cannot be after the due date."));
00507 return false;
00508 }
00509 }
00510
00511 return KOEditorGeneral::validateInput();
00512 }
00513
00514 void KOEditorGeneralTodo::updateRecurrenceSummary( Todo *todo )
00515 {
00516 if ( todo->doesRecur() ) {
00517 mRecEditLabel->setText( IncidenceFormatter::recurrenceString( todo ) );
00518 } else {
00519 mRecEditLabel->setText( QString() );
00520 }
00521 }
00522
00523 void KOEditorGeneralTodo::completedChanged(int index)
00524 {
00525 if (index == 10) {
00526 mCompleted = QDateTime::currentDateTime();
00527 }
00528 setCompletedDate();
00529 }
00530
00531 void KOEditorGeneralTodo::dateChanged()
00532 {
00533 KLocale *l = KGlobal::locale();
00534 QString dateTimeStr = "";
00535
00536 if ( mStartCheck->isChecked() ) {
00537 dateTimeStr += i18n("Start: %1").arg(
00538 l->formatDate( mStartDateEdit->date() ) );
00539 if ( mTimeButton->isChecked() )
00540 dateTimeStr += QString(" %1").arg(
00541 l->formatTime( mStartTimeEdit->getTime() ) );
00542 }
00543
00544 if ( mDueCheck->isChecked() ) {
00545 dateTimeStr += i18n(" Due: %1").arg(
00546 l->formatDate( mDueDateEdit->date() ) );
00547 if ( mTimeButton->isChecked() )
00548 dateTimeStr += QString(" %1").arg(
00549 l->formatTime( mDueTimeEdit->getTime() ) );
00550 }
00551
00552 emit dateTimeStrChanged( dateTimeStr );
00553 QDateTime endDt( mDueDateEdit->date(), mDueTimeEdit->getTime() );
00554 emit signalDateTimeChanged( endDt, endDt );
00555 }
00556
00557 void KOEditorGeneralTodo::startDateModified()
00558 {
00559 mStartDateModified = true;
00560 dateChanged();
00561 }
00562
00563 void KOEditorGeneralTodo::setCompletedDate()
00564 {
00565 if (mCompletedCombo->currentItem() == 10 && mCompleted.isValid()) {
00566 mCompletedLabel->setText(i18n("co&mpleted on"));
00567
00568 mCompletionDateEdit->show();
00569 mCompletionTimeEdit->show();
00570 mCompletionDateEdit->setDate( mCompleted.date() );
00571 mCompletionTimeEdit->setTime( mCompleted.time() );
00572 } else {
00573 mCompletedLabel->setText(i18n("co&mpleted"));
00574 mCompletionDateEdit->hide();
00575 mCompletionTimeEdit->hide();
00576 }
00577 }
00578
00579 void KOEditorGeneralTodo::modified (Todo* todo, KOGlobals::HowChanged modification)
00580 {
00581 switch (modification) {
00582 case KOGlobals::PRIORITY_MODIFIED:
00583 mPriorityCombo->setCurrentItem( todo->priority() );
00584 break;
00585 case KOGlobals::COMPLETION_MODIFIED:
00586 mCompletedCombo->setCurrentItem(todo->percentComplete() / 10);
00587 if (todo->isCompleted() && todo->hasCompletedDate()) {
00588 mCompleted = todo->completed();
00589 }
00590 setCompletedDate();
00591 break;
00592 case KOGlobals::CATEGORY_MODIFIED:
00593 setCategories( todo->categories() );
00594 break;
00595 case KOGlobals::UNKNOWN_MODIFIED:
00596 default:
00597 readTodo( todo, 0, QDate() );
00598 break;
00599 }
00600 }