korganizer Library API Documentation

koeditorgeneraltodo.cpp

00001 /* 00002 This file is part of KOrganizer. 00003 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of Qt, and distribute the resulting executable, 00021 without including the source code for Qt in the source distribution. 00022 */ 00023 00024 #include <qtooltip.h> 00025 #include <qfiledialog.h> 00026 #include <qlayout.h> 00027 #include <qvbox.h> 00028 #include <qbuttongroup.h> 00029 #include <qvgroupbox.h> 00030 #include <qwidgetstack.h> 00031 #include <qdatetime.h> 00032 00033 #include <kglobal.h> 00034 #include <klocale.h> 00035 #include <kiconloader.h> 00036 #include <kmessagebox.h> 00037 #include <kdebug.h> 00038 #include <krestrictedline.h> 00039 #include <kstandarddirs.h> 00040 #include <kfiledialog.h> 00041 00042 #include <libkcal/todo.h> 00043 00044 #include <libkdepim/kdateedit.h> 00045 00046 #include "koprefs.h" 00047 #include "ktimeedit.h" 00048 00049 #include "koeditorgeneraltodo.h" 00050 #include "koeditorgeneraltodo.moc" 00051 00052 KOEditorGeneralTodo::KOEditorGeneralTodo(QObject* parent, 00053 const char* name) 00054 : KOEditorGeneral( parent, name) 00055 { 00056 } 00057 00058 KOEditorGeneralTodo::~KOEditorGeneralTodo() 00059 { 00060 } 00061 00062 void KOEditorGeneralTodo::finishSetup() 00063 { 00064 QWidget::setTabOrder( mSummaryEdit, mLocationEdit ); 00065 QWidget::setTabOrder( mLocationEdit, mDueCheck ); 00066 QWidget::setTabOrder( mDueCheck, mDueDateEdit ); 00067 QWidget::setTabOrder( mDueDateEdit, mDueTimeEdit ); 00068 QWidget::setTabOrder( mDueTimeEdit, mStartCheck ); 00069 QWidget::setTabOrder( mStartCheck, mStartDateEdit ); 00070 QWidget::setTabOrder( mStartDateEdit, mStartTimeEdit ); 00071 QWidget::setTabOrder( mStartTimeEdit, mTimeButton ); 00072 QWidget::setTabOrder( mTimeButton, mCompletedCombo ); 00073 QWidget::setTabOrder( mCompletedCombo, mPriorityCombo ); 00074 QWidget::setTabOrder( mPriorityCombo, mAlarmButton ); 00075 QWidget::setTabOrder( mAlarmButton, mAlarmTimeEdit ); 00076 QWidget::setTabOrder( mAlarmTimeEdit, mAlarmIncrCombo ); 00077 QWidget::setTabOrder( mAlarmIncrCombo, mAlarmSoundButton ); 00078 QWidget::setTabOrder( mAlarmSoundButton, mAlarmProgramButton ); 00079 QWidget::setTabOrder( mAlarmProgramButton, mDescriptionEdit ); 00080 QWidget::setTabOrder( mDescriptionEdit, mCategoriesButton ); 00081 QWidget::setTabOrder( mCategoriesButton, mSecrecyCombo ); 00082 // QWidget::setTabOrder( mSecrecyCombo, mDescriptionEdit ); 00083 00084 mSummaryEdit->setFocus(); 00085 } 00086 00087 void KOEditorGeneralTodo::initTime(QWidget *parent,QBoxLayout *topLayout) 00088 { 00089 QBoxLayout *timeLayout = new QVBoxLayout(topLayout); 00090 00091 QGroupBox *timeGroupBox = new QGroupBox(1,QGroupBox::Horizontal, 00092 i18n("Date && Time"),parent); 00093 timeLayout->addWidget(timeGroupBox); 00094 00095 QFrame *timeBoxFrame = new QFrame(timeGroupBox); 00096 00097 QGridLayout *layoutTimeBox = new QGridLayout(timeBoxFrame,1,1); 00098 layoutTimeBox->setSpacing(topLayout->spacing()); 00099 00100 00101 mDueCheck = new QCheckBox(i18n("&Due:"),timeBoxFrame); 00102 layoutTimeBox->addWidget(mDueCheck,0,0); 00103 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(enableDueEdit(bool))); 00104 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(showAlarm())); 00105 00106 00107 mDueDateEdit = new KDateEdit(timeBoxFrame); 00108 layoutTimeBox->addWidget(mDueDateEdit,0,1); 00109 00110 mDueTimeEdit = new KOTimeEdit(timeBoxFrame); 00111 layoutTimeBox->addWidget(mDueTimeEdit,0,2); 00112 00113 00114 mStartCheck = new QCheckBox(i18n("Sta&rt:"),timeBoxFrame); 00115 layoutTimeBox->addWidget(mStartCheck,1,0); 00116 connect(mStartCheck,SIGNAL(toggled(bool)),SLOT(enableStartEdit(bool))); 00117 00118 mStartDateEdit = new KDateEdit(timeBoxFrame); 00119 layoutTimeBox->addWidget(mStartDateEdit,1,1); 00120 00121 mStartTimeEdit = new KOTimeEdit(timeBoxFrame); 00122 layoutTimeBox->addWidget(mStartTimeEdit,1,2); 00123 00124 00125 mTimeButton = new QCheckBox(i18n("Ti&me associated"),timeBoxFrame); 00126 layoutTimeBox->addMultiCellWidget(mTimeButton,2,2,0,2); 00127 00128 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(enableTimeEdits(bool))); 00129 00130 // some more layouting 00131 layoutTimeBox->setColStretch(3,1); 00132 } 00133 00134 00135 void KOEditorGeneralTodo::initCompletion(QWidget *parent, QBoxLayout *topLayout) 00136 { 00137 mCompletedCombo = new QComboBox(parent); 00138 // xgettext:no-c-format 00139 mCompletedCombo->insertItem(i18n("0 %")); 00140 // xgettext:no-c-format 00141 mCompletedCombo->insertItem(i18n("20 %")); 00142 // xgettext:no-c-format 00143 mCompletedCombo->insertItem(i18n("40 %")); 00144 // xgettext:no-c-format 00145 mCompletedCombo->insertItem(i18n("60 %")); 00146 // xgettext:no-c-format 00147 mCompletedCombo->insertItem(i18n("80 %")); 00148 // xgettext:no-c-format 00149 mCompletedCombo->insertItem(i18n("100 %")); 00150 connect(mCompletedCombo,SIGNAL(activated(int)),SLOT(completedChanged(int))); 00151 topLayout->addWidget(mCompletedCombo); 00152 00153 mCompletedLabel = new QLabel(i18n("co&mpleted"),parent); 00154 topLayout->addWidget(mCompletedLabel); 00155 mCompletedLabel->setBuddy( mCompletedCombo ); 00156 } 00157 00158 void KOEditorGeneralTodo::initPriority(QWidget *parent, QBoxLayout *topLayout) 00159 { 00160 QLabel *priorityLabel = new QLabel(i18n("&Priority:"),parent); 00161 topLayout->addWidget(priorityLabel); 00162 00163 mPriorityCombo = new QComboBox(parent); 00164 mPriorityCombo->insertItem(i18n("1 (Highest)")); 00165 mPriorityCombo->insertItem(i18n("2")); 00166 mPriorityCombo->insertItem(i18n("3")); 00167 mPriorityCombo->insertItem(i18n("4")); 00168 mPriorityCombo->insertItem(i18n("5 (lowest)")); 00169 topLayout->addWidget(mPriorityCombo); 00170 priorityLabel->setBuddy( mPriorityCombo ); 00171 } 00172 00173 void KOEditorGeneralTodo::initStatus(QWidget *parent,QBoxLayout *topLayout) 00174 { 00175 QBoxLayout *statusLayout = new QHBoxLayout(topLayout); 00176 00177 initCompletion( parent, statusLayout ); 00178 00179 statusLayout->addStretch( 1 ); 00180 00181 initPriority( parent, statusLayout ); 00182 } 00183 00184 void KOEditorGeneralTodo::setDefaults(QDateTime due,bool allDay) 00185 { 00186 KOEditorGeneral::setDefaults(allDay); 00187 00188 mTimeButton->setChecked( !allDay ); 00189 if(mTimeButton->isChecked()) { 00190 mTimeButton->setEnabled(true); 00191 } 00192 else { 00193 mTimeButton->setEnabled(false); 00194 } 00195 00196 enableTimeEdits( !allDay ); 00197 00198 mDueCheck->setChecked(false); 00199 enableDueEdit(false); 00200 00201 alarmDisable(true); 00202 00203 mStartCheck->setChecked(false); 00204 enableStartEdit(false); 00205 00206 mDueDateEdit->setDate(due.date()); 00207 mDueTimeEdit->setTime(due.time()); 00208 00209 mStartDateEdit->setDate(QDate::currentDate()); 00210 mStartTimeEdit->setTime(QTime::currentTime()); 00211 00212 mPriorityCombo->setCurrentItem(2); 00213 00214 mCompletedCombo->setCurrentItem(0); 00215 } 00216 00217 void KOEditorGeneralTodo::readTodo(Todo *todo) 00218 { 00219 KOEditorGeneral::readIncidence(todo); 00220 00221 QDateTime dueDT; 00222 00223 if (todo->hasDueDate()) { 00224 enableAlarmEdit(true); 00225 dueDT = todo->dtDue(); 00226 mDueDateEdit->setDate(todo->dtDue().date()); 00227 mDueTimeEdit->setTime(todo->dtDue().time()); 00228 mDueCheck->setChecked(true); 00229 } else { 00230 alarmDisable(true); 00231 mDueDateEdit->setEnabled(false); 00232 mDueTimeEdit->setEnabled(false); 00233 mDueDateEdit->setDate(QDate::currentDate()); 00234 mDueTimeEdit->setTime(QTime::currentTime()); 00235 mDueCheck->setChecked(false); 00236 } 00237 00238 if (todo->hasStartDate()) { 00239 mStartDateEdit->setDate(todo->dtStart().date()); 00240 mStartTimeEdit->setTime(todo->dtStart().time()); 00241 mStartCheck->setChecked(true); 00242 } else { 00243 mStartDateEdit->setEnabled(false); 00244 mStartTimeEdit->setEnabled(false); 00245 mStartDateEdit->setDate(QDate::currentDate()); 00246 mStartTimeEdit->setTime(QTime::currentTime()); 00247 mStartCheck->setChecked(false); 00248 } 00249 00250 mTimeButton->setChecked( !todo->doesFloat() ); 00251 00252 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20); 00253 if (todo->isCompleted() && todo->hasCompletedDate()) { 00254 mCompleted = todo->completed(); 00255 } 00256 setCompletedDate(); 00257 00258 mPriorityCombo->setCurrentItem(todo->priority()-1); 00259 } 00260 00261 void KOEditorGeneralTodo::writeTodo(Todo *todo) 00262 { 00263 KOEditorGeneral::writeIncidence(todo); 00264 00265 // temp. until something better happens. 00266 QString tmpStr; 00267 00268 todo->setHasDueDate(mDueCheck->isChecked()); 00269 todo->setHasStartDate(mStartCheck->isChecked()); 00270 00271 QDate tmpDate; 00272 QTime tmpTime; 00273 QDateTime tmpDT; 00274 if ( mTimeButton->isChecked() ) { 00275 todo->setFloats(false); 00276 00277 // set due date/time 00278 tmpDate = mDueDateEdit->date(); 00279 tmpTime = mDueTimeEdit->getTime(); 00280 tmpDT.setDate(tmpDate); 00281 tmpDT.setTime(tmpTime); 00282 todo->setDtDue(tmpDT); 00283 00284 // set start date/time 00285 tmpDate = mStartDateEdit->date(); 00286 tmpTime = mStartTimeEdit->getTime(); 00287 tmpDT.setDate(tmpDate); 00288 tmpDT.setTime(tmpTime); 00289 todo->setDtStart(tmpDT); 00290 } else { 00291 todo->setFloats(true); 00292 00293 // need to change this. 00294 tmpDate = mDueDateEdit->date(); 00295 tmpTime.setHMS(0,0,0); 00296 tmpDT.setDate(tmpDate); 00297 tmpDT.setTime(tmpTime); 00298 todo->setDtDue(tmpDT); 00299 00300 tmpDate = mStartDateEdit->date(); 00301 tmpTime.setHMS(0,0,0); 00302 tmpDT.setDate(tmpDate); 00303 tmpDT.setTime(tmpTime); 00304 todo->setDtStart(tmpDT); 00305 } 00306 00307 todo->setPriority(mPriorityCombo->currentItem()+1); 00308 00309 // set completion state 00310 todo->setPercentComplete(mCompletedCombo->currentItem() * 20); 00311 00312 if (mCompletedCombo->currentItem() == 5 && mCompleted.isValid()) { 00313 todo->setCompleted(mCompleted); 00314 } 00315 } 00316 00317 void KOEditorGeneralTodo::enableDueEdit(bool enable) 00318 { 00319 mDueDateEdit->setEnabled( enable ); 00320 00321 if(mDueCheck->isChecked() || mStartCheck->isChecked()) { 00322 mTimeButton->setEnabled(true); 00323 } 00324 else { 00325 mTimeButton->setEnabled(false); 00326 mTimeButton->setChecked(false); 00327 } 00328 00329 if (enable) { 00330 mDueTimeEdit->setEnabled( mTimeButton->isChecked() ); 00331 } else { 00332 mDueTimeEdit->setEnabled( false ); 00333 } 00334 } 00335 00336 void KOEditorGeneralTodo::enableStartEdit( bool enable ) 00337 { 00338 mStartDateEdit->setEnabled( enable ); 00339 00340 if(mDueCheck->isChecked() || mStartCheck->isChecked()) { 00341 mTimeButton->setEnabled(true); 00342 } 00343 else { 00344 mTimeButton->setEnabled(false); 00345 mTimeButton->setChecked(false); 00346 } 00347 00348 if (enable) { 00349 mStartTimeEdit->setEnabled( mTimeButton->isChecked() ); 00350 } else { 00351 mStartTimeEdit->setEnabled( false ); 00352 } 00353 } 00354 00355 void KOEditorGeneralTodo::enableTimeEdits(bool enable) 00356 { 00357 if(mStartCheck->isChecked()) { 00358 mStartTimeEdit->setEnabled( enable ); 00359 } 00360 if(mDueCheck->isChecked()) { 00361 mDueTimeEdit->setEnabled( enable ); 00362 } 00363 } 00364 00365 void KOEditorGeneralTodo::showAlarm() 00366 { 00367 if ( mDueCheck->isChecked() ) { 00368 alarmDisable(false); 00369 } 00370 else { 00371 alarmDisable(true); 00372 } 00373 } 00374 00375 bool KOEditorGeneralTodo::validateInput() 00376 { 00377 if (mDueCheck->isChecked()) { 00378 if (!mDueDateEdit->inputIsValid()) { 00379 KMessageBox::sorry(0,i18n("Please specify a valid due date.")); 00380 return false; 00381 } 00382 if (mTimeButton->isChecked()) { 00383 if (!mDueTimeEdit->inputIsValid()) { 00384 KMessageBox::sorry(0,i18n("Please specify a valid due time.")); 00385 return false; 00386 } 00387 } 00388 } 00389 00390 if (mStartCheck->isChecked()) { 00391 if (!mStartDateEdit->inputIsValid()) { 00392 KMessageBox::sorry(0,i18n("Please specify a valid start date.")); 00393 return false; 00394 } 00395 if (mTimeButton->isChecked()) { 00396 if (!mStartTimeEdit->inputIsValid()) { 00397 KMessageBox::sorry(0,i18n("Please specify a valid start time.")); 00398 return false; 00399 } 00400 } 00401 } 00402 00403 if (mStartCheck->isChecked() && mDueCheck->isChecked()) { 00404 QDateTime startDate; 00405 QDateTime dueDate; 00406 startDate.setDate(mStartDateEdit->date()); 00407 dueDate.setDate(mDueDateEdit->date()); 00408 if (mTimeButton->isChecked()) { 00409 startDate.setTime(mStartTimeEdit->getTime()); 00410 dueDate.setTime(mDueTimeEdit->getTime()); 00411 } 00412 if (startDate > dueDate) { 00413 KMessageBox::sorry(0, 00414 i18n("The start date cannot be after the due date.")); 00415 return false; 00416 } 00417 } 00418 00419 return KOEditorGeneral::validateInput(); 00420 } 00421 00422 void KOEditorGeneralTodo::completedChanged(int index) 00423 { 00424 if (index == 5) { 00425 mCompleted = QDateTime::currentDateTime(); 00426 } 00427 setCompletedDate(); 00428 } 00429 00430 void KOEditorGeneralTodo::setCompletedDate() 00431 { 00432 if (mCompletedCombo->currentItem() == 5 && mCompleted.isValid()) { 00433 mCompletedLabel->setText(i18n("co&mpleted on %1") 00434 .arg(KGlobal::locale()->formatDateTime(mCompleted))); 00435 } else { 00436 mCompletedLabel->setText(i18n("co&mpleted")); 00437 } 00438 } 00439 00440 void KOEditorGeneralTodo::modified (Todo* todo, int modification) 00441 { 00442 switch (modification) { 00443 case KOGlobals::PRIORITY_MODIFIED: 00444 mPriorityCombo->setCurrentItem(todo->priority()-1); 00445 break; 00446 case KOGlobals::COMPLETION_MODIFIED: 00447 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20); 00448 if (todo->isCompleted() && todo->hasCompletedDate()) { 00449 mCompleted = todo->completed(); 00450 } 00451 setCompletedDate(); 00452 break; 00453 case KOGlobals::CATEGORY_MODIFIED: 00454 setCategories (todo->categoriesStr ()); 00455 break; 00456 case KOGlobals::UNKNOWN_MODIFIED: // fall through 00457 default: 00458 readTodo( todo ); 00459 break; 00460 } 00461 }
KDE Logo
This file is part of the documentation for korganizer Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:13 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003