kotodoeditor.cpp
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
00026 #include <qtooltip.h>
00027 #include <qframe.h>
00028 #include <qpixmap.h>
00029 #include <qlayout.h>
00030 #include <qdatetime.h>
00031
00032 #include <kiconloader.h>
00033 #include <klocale.h>
00034 #include <kmessagebox.h>
00035
00036 #include <libkdepim/categoryselectdialog.h>
00037 #include <libkcal/calendarlocal.h>
00038 #include <libkcal/calendarresources.h>
00039 #include <libkcal/resourcecalendar.h>
00040
00041 #include "koprefs.h"
00042 #include "koeditorattachments.h"
00043 #include "kodialogmanager.h"
00044
00045 #include "kotodoeditor.h"
00046
00047 KOTodoEditor::KOTodoEditor( Calendar *calendar, QWidget *parent ) :
00048 KOIncidenceEditor( i18n("Edit To-Do"), calendar, parent )
00049 {
00050 mTodo = 0;
00051 mRelatedTodo = 0;
00052 }
00053
00054 KOTodoEditor::~KOTodoEditor()
00055 {
00056 emit dialogClose( mTodo );
00057 }
00058
00059 void KOTodoEditor::init()
00060 {
00061 setupGeneral();
00062 setupAttendeesTab();
00063 setupAttachmentsTab();
00064 }
00065
00066 void KOTodoEditor::reload()
00067 {
00068 if ( mTodo ) readTodo( mTodo );
00069 }
00070
00071 void KOTodoEditor::setupGeneral()
00072 {
00073 mGeneral = new KOEditorGeneralTodo(this);
00074
00075 connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show()));
00076 connect(mCategoryDialog, SIGNAL(categoriesSelected(const QString &)),
00077 mGeneral,SLOT(setCategories(const QString &)));
00078
00079 if (KOPrefs::instance()->mCompactDialogs) {
00080 QFrame *topFrame = addPage(i18n("General"));
00081
00082 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
00083 topLayout->setMargin(marginHint());
00084 topLayout->setSpacing(spacingHint());
00085
00086 mGeneral->initHeader(topFrame,topLayout);
00087 mGeneral->initTime(topFrame,topLayout);
00088 QHBoxLayout *priorityLayout = new QHBoxLayout( topLayout );
00089 mGeneral->initPriority(topFrame,priorityLayout);
00090 mGeneral->initCategories( topFrame, topLayout );
00091 topLayout->addStretch(1);
00092
00093 QFrame *topFrame2 = addPage(i18n("Details"));
00094
00095 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2);
00096 topLayout2->setMargin(marginHint());
00097 topLayout2->setSpacing(spacingHint());
00098
00099 QHBoxLayout *completionLayout = new QHBoxLayout( topLayout2 );
00100 mGeneral->initCompletion(topFrame2,completionLayout);
00101
00102 mGeneral->initAlarm(topFrame,topLayout);
00103 mGeneral->enableAlarm( false );
00104
00105 mGeneral->initSecrecy( topFrame2, topLayout2 );
00106 mGeneral->initDescription(topFrame2,topLayout2);
00107 } else {
00108 QFrame *topFrame = addPage(i18n("&General"));
00109
00110 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
00111 topLayout->setSpacing(spacingHint());
00112
00113 mGeneral->initHeader(topFrame,topLayout);
00114 mGeneral->initTime(topFrame,topLayout);
00115 mGeneral->initStatus(topFrame,topLayout);
00116 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
00117 mGeneral->initAlarm(topFrame,alarmLineLayout);
00118 mGeneral->initDescription(topFrame,topLayout);
00119 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout);
00120 mGeneral->initCategories( topFrame, detailsLayout );
00121 mGeneral->initSecrecy( topFrame, detailsLayout );
00122 }
00123
00124 mGeneral->finishSetup();
00125 }
00126
00127 void KOTodoEditor::editTodo(Todo *todo)
00128 {
00129 init();
00130
00131 mTodo = todo;
00132 readTodo(mTodo);
00133 }
00134
00135 void KOTodoEditor::newTodo(QDateTime due,Todo *relatedTodo,bool allDay)
00136 {
00137 init();
00138
00139 mTodo = 0;
00140 setDefaults(due,relatedTodo,allDay);
00141 }
00142
00143 void KOTodoEditor::newTodo( const QString &text )
00144 {
00145 init();
00146
00147 mTodo = 0;
00148
00149 loadDefaults();
00150
00151 mGeneral->setDescription( text );
00152
00153 int pos = text.find( "\n" );
00154 if ( pos > 0 ) {
00155 mGeneral->setSummary( text.left( pos ) );
00156 mGeneral->setDescription( text );
00157 } else {
00158 mGeneral->setSummary( text );
00159 }
00160 }
00161
00162 void KOTodoEditor::newTodo( const QString &summary,
00163 const QString &description,
00164 const QString &attachment )
00165 {
00166 init();
00167
00168 mTodo = 0;
00169
00170 loadDefaults();
00171
00172 mGeneral->setSummary( summary );
00173 mGeneral->setDescription( description );
00174
00175 if ( !attachment.isEmpty() ) {
00176 mAttachments->addAttachment( attachment );
00177 }
00178 }
00179
00180 void KOTodoEditor::loadDefaults()
00181 {
00182 setDefaults(QDateTime::currentDateTime().addDays(7),0,false);
00183 }
00184
00185 bool KOTodoEditor::processInput()
00186 {
00187 if ( !validateInput() ) return false;
00188
00189 if ( mTodo ) {
00190 Todo *oldTodo = mTodo->clone();
00191
00192 writeTodo( mTodo );
00193
00194 mTodo->setRevision( mTodo->revision() + 1 );
00195
00196 emit todoChanged( oldTodo, mTodo );
00197
00198 delete oldTodo;
00199 } else {
00200 mTodo = new Todo;
00201 mTodo->setOrganizer( KOPrefs::instance()->email() );
00202
00203 writeTodo( mTodo );
00204
00205 if ( !mCalendar->addTodo( mTodo ) ) {
00206 KODialogManager::errorSaveTodo( this );
00207 delete mTodo;
00208 mTodo = 0;
00209 return false;
00210 }
00211
00212 emit todoAdded( mTodo );
00213 }
00214
00215 return true;
00216 }
00217
00218 void KOTodoEditor::processCancel()
00219 {
00220 if ( mTodo ) {
00221 emit editCanceled( mTodo );
00222 }
00223 }
00224
00225 void KOTodoEditor::deleteTodo()
00226 {
00227 if (mTodo) {
00228 if (KOPrefs::instance()->mConfirm) {
00229 switch (msgItemDelete()) {
00230 case KMessageBox::Continue:
00231 emit todoToBeDeleted(mTodo);
00232 emit dialogClose(mTodo);
00233 mCalendar->deleteTodo(mTodo);
00234 emit todoDeleted();
00235 reject();
00236 break;
00237 }
00238 }
00239 else {
00240 emit todoToBeDeleted(mTodo);
00241 emit dialogClose(mTodo);
00242 mCalendar->deleteTodo(mTodo);
00243 emit todoDeleted();
00244 reject();
00245 }
00246 } else {
00247 reject();
00248 }
00249 }
00250
00251 void KOTodoEditor::setDefaults( QDateTime due, Todo *relatedEvent, bool allDay )
00252 {
00253 mRelatedTodo = relatedEvent;
00254
00255 mGeneral->setDefaults( due, allDay );
00256 mDetails->setDefaults();
00257 mAttachments->setDefaults();
00258 }
00259
00260 void KOTodoEditor::readTodo( Todo *todo )
00261 {
00262 mGeneral->readTodo( todo );
00263 mDetails->readEvent( todo );
00264 mAttachments->readIncidence( todo );
00265
00266
00267 mCategoryDialog->setSelected( todo->categories() );
00268
00269
00270 }
00271
00272 void KOTodoEditor::writeTodo( Todo *todo )
00273 {
00274 mGeneral->writeTodo( todo );
00275 mDetails->writeEvent( todo );
00276 mAttachments->writeIncidence( todo );
00277
00278
00279 if ( mRelatedTodo ) {
00280 todo->setRelatedTo( mRelatedTodo );
00281 }
00282 }
00283
00284 bool KOTodoEditor::validateInput()
00285 {
00286 if ( !mGeneral->validateInput() ) return false;
00287 if ( !mDetails->validateInput() ) return false;
00288 return true;
00289 }
00290
00291 int KOTodoEditor::msgItemDelete()
00292 {
00293 return KMessageBox::warningContinueCancel(this,
00294 i18n("This item will be permanently deleted."),
00295 i18n("KOrganizer Confirmation"),i18n("Delete"));
00296 }
00297
00298 void KOTodoEditor::modified (int modification)
00299 {
00300 if (modification == KOGlobals::CATEGORY_MODIFIED ||
00301 KOGlobals::UNKNOWN_MODIFIED == modification )
00302 mCategoryDialog->setSelected (mTodo->categories ());
00303 mGeneral->modified (mTodo, modification);
00304
00305 }
00306
00307 void KOTodoEditor::slotLoadTemplate()
00308 {
00309 CalendarLocal cal( KOPrefs::instance()->mTimeZoneId );
00310 Todo *todo = new Todo;
00311 QString templateName = loadTemplate( &cal, todo->type(),
00312 KOPrefs::instance()->mTodoTemplates );
00313 delete todo;
00314 if ( templateName.isEmpty() ) {
00315 return;
00316 }
00317
00318 Todo::List todos = cal.todos();
00319 if ( todos.count() == 0 ) {
00320 KMessageBox::error( this,
00321 i18n("Template '%1' does not contain a valid todo.")
00322 .arg( templateName ) );
00323 } else {
00324 readTodo( todos.first() );
00325 }
00326 }
00327
00328 void KOTodoEditor::saveTemplate( const QString &templateName )
00329 {
00330 Todo *todo = new Todo;
00331 writeTodo( todo );
00332 saveAsTemplate( todo, templateName );
00333 }
00334
00335 #include "kotodoeditor.moc"
This file is part of the documentation for korganizer Library Version 3.2.2.