summaryrefslogtreecommitdiffabout
path: root/libkcal
Unidiff
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/alarm.cpp2
-rw-r--r--libkcal/calendar.cpp54
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/calendarlocal.cpp56
-rw-r--r--libkcal/calendarlocal.h1
5 files changed, 87 insertions, 27 deletions
diff --git a/libkcal/alarm.cpp b/libkcal/alarm.cpp
index 0afa0a7..79e0464 100644
--- a/libkcal/alarm.cpp
+++ b/libkcal/alarm.cpp
@@ -278,192 +278,194 @@ void Alarm::setMailAttachments(const QStringList &mailAttachFiles)
278{ 278{
279 if (mType == Email) { 279 if (mType == Email) {
280 mMailAttachFiles = mailAttachFiles; 280 mMailAttachFiles = mailAttachFiles;
281 mParent->updated(); 281 mParent->updated();
282 } 282 }
283} 283}
284 284
285void Alarm::addMailAttachment(const QString &mailAttachFile) 285void Alarm::addMailAttachment(const QString &mailAttachFile)
286{ 286{
287 if (mType == Email) { 287 if (mType == Email) {
288 mMailAttachFiles += mailAttachFile; 288 mMailAttachFiles += mailAttachFile;
289 mParent->updated(); 289 mParent->updated();
290 } 290 }
291} 291}
292 292
293QStringList Alarm::mailAttachments() const 293QStringList Alarm::mailAttachments() const
294{ 294{
295 return (mType == Email) ? mMailAttachFiles : QStringList(); 295 return (mType == Email) ? mMailAttachFiles : QStringList();
296} 296}
297 297
298void Alarm::setMailText(const QString &text) 298void Alarm::setMailText(const QString &text)
299{ 299{
300 if (mType == Email) { 300 if (mType == Email) {
301 mDescription = text; 301 mDescription = text;
302 mParent->updated(); 302 mParent->updated();
303 } 303 }
304} 304}
305 305
306QString Alarm::mailText() const 306QString Alarm::mailText() const
307{ 307{
308 return (mType == Email) ? mDescription : QString::null; 308 return (mType == Email) ? mDescription : QString::null;
309} 309}
310 310
311void Alarm::setDisplayAlarm(const QString &text) 311void Alarm::setDisplayAlarm(const QString &text)
312{ 312{
313 mType = Display; 313 mType = Display;
314 mDescription = text; 314 mDescription = text;
315 mParent->updated(); 315 mParent->updated();
316} 316}
317 317
318void Alarm::setText(const QString &text) 318void Alarm::setText(const QString &text)
319{ 319{
320 if (mType == Display) { 320 if (mType == Display) {
321 mDescription = text; 321 mDescription = text;
322 mParent->updated(); 322 mParent->updated();
323 } 323 }
324} 324}
325 325
326QString Alarm::text() const 326QString Alarm::text() const
327{ 327{
328 return (mType == Display) ? mDescription : QString::null; 328 return (mType == Display) ? mDescription : QString::null;
329} 329}
330 330
331void Alarm::setTime(const QDateTime &alarmTime) 331void Alarm::setTime(const QDateTime &alarmTime)
332{ 332{
333 mAlarmTime = alarmTime; 333 mAlarmTime = alarmTime;
334 mHasTime = true; 334 mHasTime = true;
335 335
336 mParent->updated(); 336 mParent->updated();
337} 337}
338int Alarm::offset() 338int Alarm::offset()
339{ 339{
340 if ( hasTime() ) { 340 if ( hasTime() ) {
341 if (mParent->typeID() == todoID ) { 341 if (mParent->typeID() == todoID ) {
342 Todo *t = static_cast<Todo*>(mParent); 342 Todo *t = static_cast<Todo*>(mParent);
343 return t->dtDue().secsTo( mAlarmTime ) ; 343 return t->dtDue().secsTo( mAlarmTime ) ;
344 } else 344 } else
345 return mParent->dtStart().secsTo( mAlarmTime ) ; 345 return mParent->dtStart().secsTo( mAlarmTime ) ;
346 } 346 }
347 else 347 else
348 { 348 {
349 return mOffset.asSeconds(); 349 return mOffset.asSeconds();
350 } 350 }
351 351
352} 352}
353QString Alarm::offsetText() 353QString Alarm::offsetText()
354{ 354{
355 int min = -offset()/60; 355 int min = -offset()/60;
356 int hours = min /60; 356 int hours = min /60;
357 min = min % 60; 357 min = min % 60;
358 int days = hours /24; 358 int days = hours /24;
359 hours = hours % 24; 359 hours = hours % 24;
360 QString message; 360 QString message;
361 //qDebug("%d %d %d ", days, hours, min ); 361 //qDebug("%d %d %d ", days, hours, min );
362 if ( days > 0 ) 362 if ( days > 0 )
363 message += i18n("%1d").arg( days ); 363 message += i18n("%1d").arg( days );
364 if ( hours > 0 ) { 364 if ( hours > 0 ) {
365 if ( !message.isEmpty() ) message += "/"; 365 if ( !message.isEmpty() ) message += "/";
366 message += i18n("%1h").arg( hours ); 366 message += i18n("%1h").arg( hours );
367 } 367 }
368 if ( min > 0 ) { 368 if ( min > 0 ) {
369 if ( !message.isEmpty() ) message += "/"; 369 if ( !message.isEmpty() ) message += "/";
370 message += i18n("%1min").arg( min ); 370 message += i18n("%1min").arg( min );
371 } 371 }
372 if ( message.isEmpty() ) 372 if ( message.isEmpty() )
373 message = i18n("%1min").arg( 0 ); 373 message = i18n("%1min").arg( 0 );
374 if ( !mParent->alarmEnabled() )
375 return "!"+message + i18n("(disabled)");
374 return message; 376 return message;
375} 377}
376 378
377 379
378QDateTime Alarm::time() const 380QDateTime Alarm::time() const
379{ 381{
380 if ( hasTime() ) 382 if ( hasTime() )
381 return mAlarmTime; 383 return mAlarmTime;
382 else 384 else
383 { 385 {
384 if (mParent->typeID() == todoID ) { 386 if (mParent->typeID() == todoID ) {
385 Todo *t = static_cast<Todo*>(mParent); 387 Todo *t = static_cast<Todo*>(mParent);
386 return mOffset.end( t->dtDue() ); 388 return mOffset.end( t->dtDue() );
387 } else if (mEndOffset) { 389 } else if (mEndOffset) {
388 return mOffset.end( mParent->dtEnd() ); 390 return mOffset.end( mParent->dtEnd() );
389 } else { 391 } else {
390 return mOffset.end( mParent->dtStart() ); 392 return mOffset.end( mParent->dtStart() );
391 } 393 }
392 } 394 }
393} 395}
394 396
395bool Alarm::hasTime() const 397bool Alarm::hasTime() const
396{ 398{
397 return mHasTime; 399 return mHasTime;
398} 400}
399 401
400void Alarm::setSnoozeTime(int alarmSnoozeTime) 402void Alarm::setSnoozeTime(int alarmSnoozeTime)
401{ 403{
402 mAlarmSnoozeTime = alarmSnoozeTime; 404 mAlarmSnoozeTime = alarmSnoozeTime;
403 mParent->updated(); 405 mParent->updated();
404} 406}
405 407
406int Alarm::snoozeTime() const 408int Alarm::snoozeTime() const
407{ 409{
408 return mAlarmSnoozeTime; 410 return mAlarmSnoozeTime;
409} 411}
410 412
411void Alarm::setRepeatCount(int alarmRepeatCount) 413void Alarm::setRepeatCount(int alarmRepeatCount)
412{ 414{
413 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl; 415 kdDebug(5800) << "Alarm::setRepeatCount(): " << alarmRepeatCount << endl;
414 416
415 mAlarmRepeatCount = alarmRepeatCount; 417 mAlarmRepeatCount = alarmRepeatCount;
416 mParent->updated(); 418 mParent->updated();
417} 419}
418 420
419int Alarm::repeatCount() const 421int Alarm::repeatCount() const
420{ 422{
421 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl; 423 kdDebug(5800) << "Alarm::repeatCount(): " << mAlarmRepeatCount << endl;
422 return mAlarmRepeatCount; 424 return mAlarmRepeatCount;
423} 425}
424 426
425void Alarm::toggleAlarm() 427void Alarm::toggleAlarm()
426{ 428{
427 mAlarmEnabled = !mAlarmEnabled; 429 mAlarmEnabled = !mAlarmEnabled;
428 mParent->updated(); 430 mParent->updated();
429} 431}
430 432
431void Alarm::setEnabled(bool enable) 433void Alarm::setEnabled(bool enable)
432{ 434{
433 mAlarmEnabled = enable; 435 mAlarmEnabled = enable;
434 mParent->updated(); 436 mParent->updated();
435} 437}
436 438
437bool Alarm::enabled() const 439bool Alarm::enabled() const
438{ 440{
439 return mAlarmEnabled; 441 return mAlarmEnabled;
440} 442}
441 443
442void Alarm::setStartOffset( const Duration &offset ) 444void Alarm::setStartOffset( const Duration &offset )
443{ 445{
444 mOffset = offset; 446 mOffset = offset;
445 mEndOffset = false; 447 mEndOffset = false;
446 mHasTime = false; 448 mHasTime = false;
447 mParent->updated(); 449 mParent->updated();
448} 450}
449 451
450Duration Alarm::startOffset() const 452Duration Alarm::startOffset() const
451{ 453{
452 return (mHasTime || mEndOffset) ? 0 : mOffset; 454 return (mHasTime || mEndOffset) ? 0 : mOffset;
453} 455}
454 456
455bool Alarm::hasStartOffset() const 457bool Alarm::hasStartOffset() const
456{ 458{
457 return !mHasTime && !mEndOffset; 459 return !mHasTime && !mEndOffset;
458} 460}
459 461
460bool Alarm::hasEndOffset() const 462bool Alarm::hasEndOffset() const
461{ 463{
462 return !mHasTime && mEndOffset; 464 return !mHasTime && mEndOffset;
463} 465}
464 466
465void Alarm::setEndOffset( const Duration &offset ) 467void Alarm::setEndOffset( const Duration &offset )
466{ 468{
467 mOffset = offset; 469 mOffset = offset;
468 mEndOffset = true; 470 mEndOffset = true;
469 mHasTime = false; 471 mHasTime = false;
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index 5092d1a..a662eeb 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -337,152 +337,152 @@ QPtrList<Event> Calendar::events( const QDate &start, const QDate &end,
337 bool inclusive) 337 bool inclusive)
338{ 338{
339 QPtrList<Event> el = rawEvents(start,end,inclusive); 339 QPtrList<Event> el = rawEvents(start,end,inclusive);
340 mFilter->apply(&el); 340 mFilter->apply(&el);
341 return el; 341 return el;
342} 342}
343 343
344QPtrList<Event> Calendar::events() 344QPtrList<Event> Calendar::events()
345{ 345{
346 QPtrList<Event> el = rawEvents(); 346 QPtrList<Event> el = rawEvents();
347 mFilter->apply(&el); 347 mFilter->apply(&el);
348 return el; 348 return el;
349} 349}
350void Calendar::addIncidenceBranch(Incidence *i) 350void Calendar::addIncidenceBranch(Incidence *i)
351{ 351{
352 addIncidence( i ); 352 addIncidence( i );
353 Incidence * inc; 353 Incidence * inc;
354 QPtrList<Incidence> Relations = i->relations(); 354 QPtrList<Incidence> Relations = i->relations();
355 for (inc=Relations.first();inc;inc=Relations.next()) { 355 for (inc=Relations.first();inc;inc=Relations.next()) {
356 addIncidenceBranch( inc ); 356 addIncidenceBranch( inc );
357 } 357 }
358} 358}
359 359
360bool Calendar::addIncidence(Incidence *i) 360bool Calendar::addIncidence(Incidence *i)
361{ 361{
362 Incidence::AddVisitor<Calendar> v(this); 362 Incidence::AddVisitor<Calendar> v(this);
363 i->setCalID( mDefaultCalendar ); 363 i->setCalID( mDefaultCalendar );
364 i->setCalEnabled( true ); 364 i->setCalEnabled( true );
365 return i->accept(v); 365 return i->accept(v);
366} 366}
367void Calendar::deleteIncidence(Incidence *in) 367void Calendar::deleteIncidence(Incidence *in)
368{ 368{
369 if ( in->typeID() == eventID ) 369 if ( in->typeID() == eventID )
370 deleteEvent( (Event*) in ); 370 deleteEvent( (Event*) in );
371 else if ( in->typeID() == todoID ) 371 else if ( in->typeID() == todoID )
372 deleteTodo( (Todo*) in); 372 deleteTodo( (Todo*) in);
373 else if ( in->typeID() == journalID ) 373 else if ( in->typeID() == journalID )
374 deleteJournal( (Journal*) in ); 374 deleteJournal( (Journal*) in );
375} 375}
376 376
377Incidence* Calendar::incidence( const QString& uid ) 377Incidence* Calendar::incidence( const QString& uid )
378{ 378{
379 Incidence* i; 379 Incidence* i;
380 380
381 if( (i = todo( uid )) != 0 ) 381 if( (i = todo( uid )) != 0 )
382 return i; 382 return i;
383 if( (i = event( uid )) != 0 ) 383 if( (i = event( uid )) != 0 )
384 return i; 384 return i;
385 if( (i = journal( uid )) != 0 ) 385 if( (i = journal( uid )) != 0 )
386 return i; 386 return i;
387 387
388 return 0; 388 return 0;
389} 389}
390 390
391QPtrList<Todo> Calendar::todos() 391QPtrList<Todo> Calendar::todos()
392{ 392{
393 QPtrList<Todo> tl = rawTodos(); 393 QPtrList<Todo> tl = rawTodos();
394 mFilter->apply( &tl ); 394 mFilter->apply( &tl );
395 return tl; 395 return tl;
396} 396}
397 397
398// When this is called, the todo have already been added to the calendar. 398// When this is called, the todo have already been added to the calendar.
399// This method is only about linking related todos 399// This method is only about linking related todos
400void Calendar::setupRelations( Incidence *incidence ) 400void Calendar::setupRelations( Incidence *incidence )
401{ 401{
402 QString uid = incidence->uid(); 402 QString uid = incidence->uid();
403 //qDebug("Calendar::setupRelations "); 403 //qDebug("Calendar::setupRelations ");
404 // First, go over the list of orphans and see if this is their parent 404 // First, go over the list of orphans and see if this is their parent
405 while( Incidence* i = mOrphans[ uid ] ) { 405 while( Incidence* i = mOrphans[ uid ] ) {
406 mOrphans.remove( uid ); 406 mOrphans.remove( uid );
407 i->setRelatedTo( incidence ); 407 i->setRelatedTo( incidence );
408 incidence->addRelation( i ); 408 incidence->addRelation( i );
409 mOrphanUids.remove( i->uid() ); 409 mOrphanUids.remove( i->uid() );
410 } 410 }
411 411
412 // Now see about this incidences parent 412 // Now see about this incidences parent
413 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) { 413 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) {
414 // This incidence has a uid it is related to, but is not registered to it yet 414 // This incidence has a uid it is related to, but is not registered to it yet
415 // Try to find it 415 // Try to find it
416 Incidence* parent = this->incidence( incidence->relatedToUid() ); 416 Incidence* parent = this->incidence( incidence->relatedToUid() );
417 if( parent ) { 417 if( parent ) {
418 // Found it 418 // Found it
419 incidence->setRelatedTo( parent ); 419 incidence->setRelatedTo( parent );
420 parent->addRelation( incidence ); 420 parent->addRelation( incidence );
421 } else { 421 } else {
422 // Not found, put this in the mOrphans list 422 // Not found, put this in the mOrphans list
423 mOrphans.insert( incidence->relatedToUid(), incidence ); 423 mOrphans.insert( incidence->relatedToUid(), incidence );
424 mOrphanUids.insert( incidence->uid(), incidence ); 424 mOrphanUids.insert( incidence->uid(), incidence );
425 } 425 }
426 } 426 }
427} 427}
428 428
429// If a task with subtasks is deleted, move it's subtasks to the orphans list 429// If a task with subtasks is deleted, move it's subtasks to the orphans list
430void Calendar::removeRelations( Incidence *incidence ) 430void Calendar::removeRelations( Incidence *incidence )
431{ 431{
432 // qDebug("Calendar::removeRelations "); 432 // qDebug("Calendar::removeRelations ");
433 QString uid = incidence->uid(); 433 QString uid = incidence->uid();
434 434
435 QPtrList<Incidence> relations = incidence->relations(); 435 QPtrList<Incidence> relations = incidence->relations();
436 for( Incidence* i = relations.first(); i; i = relations.next() ) 436 for( Incidence* i = relations.first(); i; i = relations.next() )
437 if( !mOrphanUids.find( i->uid() ) ) { 437 if( !mOrphanUids.find( i->uid() ) ) {
438 mOrphans.insert( uid, i ); 438 mOrphans.insert( uid, i );
439 mOrphanUids.insert( i->uid(), i ); 439 mOrphanUids.insert( i->uid(), i );
440 i->setRelatedTo( 0 ); 440 i->setRelatedTo( 0 );
441 i->setRelatedToUid( uid ); 441 i->setRelatedToUid( uid );
442 } 442 }
443 443
444 // If this incidence is related to something else, tell that about it 444 // If this incidence is related to something else, tell that about it
445 if( incidence->relatedTo() ) 445 if( incidence->relatedTo() )
446 incidence->relatedTo()->removeRelation( incidence ); 446 incidence->relatedTo()->removeRelation( incidence );
447 447
448 // Remove this one from the orphans list 448 // Remove this one from the orphans list
449 if( mOrphanUids.remove( uid ) ) 449 if( mOrphanUids.remove( uid ) )
450 // This incidence is located in the orphans list - it should be removed 450 // This incidence is located in the orphans list - it should be removed
451 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) { 451 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) {
452 // Removing wasn't that easy 452 // Removing wasn't that easy
453 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) { 453 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) {
454 if( it.current()->uid() == uid ) { 454 if( it.current()->uid() == uid ) {
455 mOrphans.remove( it.currentKey() ); 455 mOrphans.remove( it.currentKey() );
456 break; 456 break;
457 } 457 }
458 } 458 }
459 } 459 }
460} 460}
461 461
462void Calendar::registerObserver( Observer *observer ) 462void Calendar::registerObserver( Observer *observer )
463{ 463{
464 mObserver = observer; 464 mObserver = observer;
465 mNewObserver = true; 465 mNewObserver = true;
466} 466}
467 467
468void Calendar::setModified( bool modified ) 468void Calendar::setModified( bool modified )
469{ 469{
470 if ( mObserver ) mObserver->calendarModified( modified, this ); 470 if ( mObserver ) mObserver->calendarModified( modified, this );
471 if ( modified != mModified || mNewObserver ) { 471 if ( modified != mModified || mNewObserver ) {
472 mNewObserver = false; 472 mNewObserver = false;
473 // if ( mObserver ) mObserver->calendarModified( modified, this ); 473 // if ( mObserver ) mObserver->calendarModified( modified, this );
474 mModified = modified; 474 mModified = modified;
475 } 475 }
476} 476}
477 477
478void Calendar::setLoadedProductId( const QString &id ) 478void Calendar::setLoadedProductId( const QString &id )
479{ 479{
480 mLoadedProductId = id; 480 mLoadedProductId = id;
481} 481}
482 482
483QString Calendar::loadedProductId() 483QString Calendar::loadedProductId()
484{ 484{
485 return mLoadedProductId; 485 return mLoadedProductId;
486} 486}
487 487
488//#include "calendar.moc" 488//#include "calendar.moc"
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 73f82bb..2243e28 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -219,155 +219,156 @@ public:
219 /** 219 /**
220 Searches todolist for an event with this unique string identifier, 220 Searches todolist for an event with this unique string identifier,
221 returns a pointer or null. 221 returns a pointer or null.
222 */ 222 */
223 virtual Todo *todo( const QString &uid ) = 0; 223 virtual Todo *todo( const QString &uid ) = 0;
224 virtual Todo *todo( QString, QString ) = 0; 224 virtual Todo *todo( QString, QString ) = 0;
225 /** 225 /**
226 Returns list of todos due on the specified date. 226 Returns list of todos due on the specified date.
227 */ 227 */
228 virtual QPtrList<Todo> todos( const QDate &date ) = 0; 228 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
229 /** 229 /**
230 Return unfiltered list of todos. 230 Return unfiltered list of todos.
231 */ 231 */
232 virtual QPtrList<Todo> rawTodos() = 0; 232 virtual QPtrList<Todo> rawTodos() = 0;
233 233
234 /** 234 /**
235 Add a Journal entry to calendar. 235 Add a Journal entry to calendar.
236 236
237 @return true on success, false on error. 237 @return true on success, false on error.
238 */ 238 */
239 virtual bool addJournal( Journal * ) = 0; 239 virtual bool addJournal( Journal * ) = 0;
240 /** 240 /**
241 Return Journal for given date. 241 Return Journal for given date.
242 */ 242 */
243 virtual Journal *journal( const QDate & ) = 0; 243 virtual Journal *journal( const QDate & ) = 0;
244 /** 244 /**
245 Return Journal with given UID. 245 Return Journal with given UID.
246 */ 246 */
247 virtual Journal *journal( const QString &UID ) = 0; 247 virtual Journal *journal( const QString &UID ) = 0;
248 /** 248 /**
249 Return list of all Journal entries. 249 Return list of all Journal entries.
250 */ 250 */
251 virtual QPtrList<Journal> journals() = 0; 251 virtual QPtrList<Journal> journals() = 0;
252 252
253 /** 253 /**
254 Searches all incidence types for an incidence with this unique 254 Searches all incidence types for an incidence with this unique
255 string identifier, returns a pointer or null. 255 string identifier, returns a pointer or null.
256 */ 256 */
257 Incidence* incidence( const QString&UID ); 257 Incidence* incidence( const QString&UID );
258 258
259 /** 259 /**
260 Setup relations for an incidence. 260 Setup relations for an incidence.
261 */ 261 */
262 virtual void setupRelations( Incidence * ); 262 virtual void setupRelations( Incidence * );
263 /** 263 /**
264 Remove all relations to an incidence 264 Remove all relations to an incidence
265 */ 265 */
266 virtual void removeRelations( Incidence * ); 266 virtual void removeRelations( Incidence * );
267 267
268 /** 268 /**
269 Set calendar filter, which filters events for the events() functions. 269 Set calendar filter, which filters events for the events() functions.
270 The Filter object is owned by the caller. 270 The Filter object is owned by the caller.
271 */ 271 */
272 void setFilter( CalFilter * ); 272 void setFilter( CalFilter * );
273 /** 273 /**
274 Return calendar filter. 274 Return calendar filter.
275 */ 275 */
276 CalFilter *filter(); 276 CalFilter *filter();
277 virtual QDateTime nextAlarm( int daysTo ) = 0; 277 virtual QDateTime nextAlarm( int daysTo ) = 0;
278 virtual QString nextSummary( ) const = 0; 278 virtual QString nextSummary( ) const = 0;
279 virtual void reInitAlarmSettings() = 0; 279 virtual void reInitAlarmSettings() = 0;
280 virtual QDateTime nextAlarmEventDateTime() const = 0; 280 virtual QDateTime nextAlarmEventDateTime() const = 0;
281 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0; 281 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
282 /** 282 /**
283 Return all alarms, which ocur in the given time interval. 283 Return all alarms, which ocur in the given time interval.
284 */ 284 */
285 virtual Alarm::List alarms( const QDateTime &from, 285 virtual Alarm::List alarms( const QDateTime &from,
286 const QDateTime &to ) = 0; 286 const QDateTime &to ) = 0;
287 287
288 class Observer { 288 class Observer {
289 public: 289 public:
290 virtual void calendarModified( bool, Calendar * ) = 0; 290 virtual void calendarModified( bool, Calendar * ) = 0;
291 }; 291 };
292 292
293 void registerObserver( Observer * ); 293 void registerObserver( Observer * );
294 294
295 void setModified( bool ); 295 void setModified( bool );
296 296
297 /** 297 /**
298 Set product id returned by loadedProductId(). This function is only 298 Set product id returned by loadedProductId(). This function is only
299 useful for the calendar loading code. 299 useful for the calendar loading code.
300 */ 300 */
301 void setLoadedProductId( const QString & ); 301 void setLoadedProductId( const QString & );
302 /** 302 /**
303 Return product id taken from file that has been loaded. Returns 303 Return product id taken from file that has been loaded. Returns
304 QString::null, if no calendar has been loaded. 304 QString::null, if no calendar has been loaded.
305 */ 305 */
306 QString loadedProductId(); 306 QString loadedProductId();
307 int defaultCalendar(); 307 int defaultCalendar();
308 void setDontDeleteIncidencesOnClose (); 308 void setDontDeleteIncidencesOnClose ();
309 public slots: 309 public slots:
310 void setDefaultCalendar( int ); 310 void setDefaultCalendar( int );
311 virtual void setCalendarEnabled( int id, bool enable ) = 0; 311 virtual void setCalendarEnabled( int id, bool enable ) = 0;
312 virtual void setAlarmEnabled( int id, bool enable ) = 0; 312 virtual void setAlarmEnabled( int id, bool enable ) = 0;
313 virtual void setReadOnly( int id, bool enable ) = 0; 313 virtual void setReadOnly( int id, bool enable ) = 0;
314 virtual void setDefaultCalendarEnabledOnly() = 0; 314 virtual void setDefaultCalendarEnabledOnly() = 0;
315 virtual void setCalendarRemove( int id ) = 0;
315 signals: 316 signals:
316 void calendarChanged(); 317 void calendarChanged();
317 void calendarSaved(); 318 void calendarSaved();
318 void calendarLoaded(); 319 void calendarLoaded();
319 void addAlarm(const QDateTime &qdt, const QString &noti ); 320 void addAlarm(const QDateTime &qdt, const QString &noti );
320 void removeAlarm(const QDateTime &qdt, const QString &noti ); 321 void removeAlarm(const QDateTime &qdt, const QString &noti );
321 322
322 protected: 323 protected:
323 /** 324 /**
324 Get unfiltered events, which occur on the given date. 325 Get unfiltered events, which occur on the given date.
325 */ 326 */
326 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0; 327 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
327 /** 328 /**
328 Get unfiltered events, which occur on the given date. 329 Get unfiltered events, which occur on the given date.
329 */ 330 */
330 virtual QPtrList<Event> rawEventsForDate( const QDate &date, 331 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
331 bool sorted = false ) = 0; 332 bool sorted = false ) = 0;
332 /** 333 /**
333 Get events in a range of dates. If inclusive is set to true, only events 334 Get events in a range of dates. If inclusive is set to true, only events
334 are returned, which are completely included in the range. 335 are returned, which are completely included in the range.
335 */ 336 */
336 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 337 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
337 bool inclusive = false ) = 0; 338 bool inclusive = false ) = 0;
338 339
339 Incidence *mNextAlarmIncidence; 340 Incidence *mNextAlarmIncidence;
340 Incidence *mUndoIncidence; 341 Incidence *mUndoIncidence;
341 int mDefaultCalendar; 342 int mDefaultCalendar;
342 bool mDeleteIncidencesOnClose; 343 bool mDeleteIncidencesOnClose;
343 344
344private: 345private:
345 void init(); 346 void init();
346 347
347 QString mOwner; // who the calendar belongs to 348 QString mOwner; // who the calendar belongs to
348 QString mOwnerEmail; // email address of the owner 349 QString mOwnerEmail; // email address of the owner
349 int mTimeZone; // timezone OFFSET from GMT (MINUTES) 350 int mTimeZone; // timezone OFFSET from GMT (MINUTES)
350 bool mLocalTime; // use local time, not UTC or a time zone 351 bool mLocalTime; // use local time, not UTC or a time zone
351 352
352 353
353 CalFilter *mFilter; 354 CalFilter *mFilter;
354 CalFilter *mDefaultFilter; 355 CalFilter *mDefaultFilter;
355 356
356 357
357 QString mTimeZoneId; 358 QString mTimeZoneId;
358 359
359 Observer *mObserver; 360 Observer *mObserver;
360 bool mNewObserver; 361 bool mNewObserver;
361 362
362 bool mModified; 363 bool mModified;
363 364
364 QString mLoadedProductId; 365 QString mLoadedProductId;
365 366
366 // This list is used to put together related todos 367 // This list is used to put together related todos
367 QDict<Incidence> mOrphans; 368 QDict<Incidence> mOrphans;
368 QDict<Incidence> mOrphanUids; 369 QDict<Incidence> mOrphanUids;
369}; 370};
370 371
371} 372}
372 373
373#endif 374#endif
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index e48122a..749d9f6 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,203 +1,222 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 if ( mDeleteIncidencesOnClose ) 68 if ( mDeleteIncidencesOnClose )
69 close(); 69 close();
70} 70}
71bool CalendarLocal::addCalendarFile( QString name, int id ) 71bool CalendarLocal::addCalendarFile( QString name, int id )
72{ 72{
73 CalendarLocal calendar( timeZoneId() ); 73 CalendarLocal calendar( timeZoneId() );
74 calendar.setDefaultCalendar( id ); 74 calendar.setDefaultCalendar( id );
75 if ( calendar.load( name ) ) { 75 if ( calendar.load( name ) ) {
76 addCalendar( &calendar ); 76 addCalendar( &calendar );
77 return true; 77 return true;
78 } 78 }
79 return false; 79 return false;
80} 80}
81void CalendarLocal::addCalendar( Calendar* cal ) 81void CalendarLocal::addCalendar( Calendar* cal )
82{ 82{
83 cal->setDontDeleteIncidencesOnClose(); 83 cal->setDontDeleteIncidencesOnClose();
84 { 84 {
85 QPtrList<Event> EventList = cal->rawEvents(); 85 QPtrList<Event> EventList = cal->rawEvents();
86 Event * ev = EventList.first(); 86 Event * ev = EventList.first();
87 while ( ev ) { 87 while ( ev ) {
88 ev->unRegisterObserver( cal );
89 ev->registerObserver( this );
88 mEventList.append( ev ); 90 mEventList.append( ev );
89 ev = EventList.next(); 91 ev = EventList.next();
90 } 92 }
91 } 93 }
92 { 94 {
95
93 QPtrList<Todo> TodoList = cal->rawTodos(); 96 QPtrList<Todo> TodoList = cal->rawTodos();
94 Todo * ev = TodoList.first(); 97 Todo * ev = TodoList.first();
95 while ( ev ) { 98 while ( ev ) {
99 QString rel = ev->relatedToUid();
100 if ( !rel.isEmpty() ){
101 ev->setRelatedTo ( 0 );
102 ev->setRelatedToUid( rel );
103 }
104 ev = TodoList.next();
105 }
106 //TodoList = cal->rawTodos();
107 ev = TodoList.first();
108 while ( ev ) {
109 ev->unRegisterObserver( cal );
110 ev->registerObserver( this );
96 mTodoList.append( ev ); 111 mTodoList.append( ev );
112 setupRelations( ev );
97 ev = TodoList.next(); 113 ev = TodoList.next();
98 } 114 }
99 } 115 }
100 { 116 {
101 QPtrList<Journal> JournalList = cal->journals(); 117 QPtrList<Journal> JournalList = cal->journals();
102 Journal * ev = JournalList.first(); 118 Journal * ev = JournalList.first();
103 while ( ev ) { 119 while ( ev ) {
120 ev->unRegisterObserver( cal );
121 ev->registerObserver( this );
104 mJournalList.append( ev ); 122 mJournalList.append( ev );
105 ev = JournalList.next(); 123 ev = JournalList.next();
106 } 124 }
107 } 125 }
126 setModified( true );
108} 127}
109bool CalendarLocal::load( const QString &fileName ) 128bool CalendarLocal::load( const QString &fileName )
110{ 129{
111 FileStorage storage( this, fileName ); 130 FileStorage storage( this, fileName );
112 return storage.load(); 131 return storage.load();
113} 132}
114 133
115bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 134bool CalendarLocal::save( const QString &fileName, CalFormat *format )
116{ 135{
117 FileStorage storage( this, fileName, format ); 136 FileStorage storage( this, fileName, format );
118 return storage.save(); 137 return storage.save();
119} 138}
120 139
121void CalendarLocal::close() 140void CalendarLocal::close()
122{ 141{
123 142
124 Todo * i; 143 Todo * i;
125 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 144 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
126 145
127 mEventList.setAutoDelete( true ); 146 mEventList.setAutoDelete( true );
128 mTodoList.setAutoDelete( true ); 147 mTodoList.setAutoDelete( true );
129 mJournalList.setAutoDelete( false ); 148 mJournalList.setAutoDelete( false );
130 149
131 mEventList.clear(); 150 mEventList.clear();
132 mTodoList.clear(); 151 mTodoList.clear();
133 mJournalList.clear(); 152 mJournalList.clear();
134 153
135 mEventList.setAutoDelete( false ); 154 mEventList.setAutoDelete( false );
136 mTodoList.setAutoDelete( false ); 155 mTodoList.setAutoDelete( false );
137 mJournalList.setAutoDelete( false ); 156 mJournalList.setAutoDelete( false );
138 157
139 setModified( false ); 158 setModified( false );
140} 159}
141 160
142bool CalendarLocal::addAnniversaryNoDup( Event *event ) 161bool CalendarLocal::addAnniversaryNoDup( Event *event )
143{ 162{
144 QString cat; 163 QString cat;
145 bool isBirthday = true; 164 bool isBirthday = true;
146 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 165 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
147 isBirthday = false; 166 isBirthday = false;
148 cat = i18n( "Anniversary" ); 167 cat = i18n( "Anniversary" );
149 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 168 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
150 isBirthday = true; 169 isBirthday = true;
151 cat = i18n( "Birthday" ); 170 cat = i18n( "Birthday" );
152 } else { 171 } else {
153 qDebug("addAnniversaryNoDup called without fitting category! "); 172 qDebug("addAnniversaryNoDup called without fitting category! ");
154 return false; 173 return false;
155 } 174 }
156 Event * eve; 175 Event * eve;
157 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 176 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
158 if ( !(eve->categories().contains( cat ) )) 177 if ( !(eve->categories().contains( cat ) ))
159 continue; 178 continue;
160 // now we have an event with fitting category 179 // now we have an event with fitting category
161 if ( eve->dtStart().date() != event->dtStart().date() ) 180 if ( eve->dtStart().date() != event->dtStart().date() )
162 continue; 181 continue;
163 // now we have an event with fitting category+date 182 // now we have an event with fitting category+date
164 if ( eve->summary() != event->summary() ) 183 if ( eve->summary() != event->summary() )
165 continue; 184 continue;
166 // now we have an event with fitting category+date+summary 185 // now we have an event with fitting category+date+summary
167 return false; 186 return false;
168 } 187 }
169 return addEvent( event ); 188 return addEvent( event );
170 189
171} 190}
172bool CalendarLocal::addEventNoDup( Event *event ) 191bool CalendarLocal::addEventNoDup( Event *event )
173{ 192{
174 Event * eve; 193 Event * eve;
175 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 194 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
176 if ( *eve == *event ) { 195 if ( *eve == *event ) {
177 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 196 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
178 return false; 197 return false;
179 } 198 }
180 } 199 }
181 return addEvent( event ); 200 return addEvent( event );
182} 201}
183 202
184bool CalendarLocal::addEvent( Event *event ) 203bool CalendarLocal::addEvent( Event *event )
185{ 204{
186 insertEvent( event ); 205 insertEvent( event );
187 206
188 event->registerObserver( this ); 207 event->registerObserver( this );
189 208
190 setModified( true ); 209 setModified( true );
191 event->setCalID( mDefaultCalendar ); 210 event->setCalID( mDefaultCalendar );
192 event->setCalEnabled( true ); 211 event->setCalEnabled( true );
193 212
194 return true; 213 return true;
195} 214}
196 215
197void CalendarLocal::deleteEvent( Event *event ) 216void CalendarLocal::deleteEvent( Event *event )
198{ 217{
199 if ( mUndoIncidence ) delete mUndoIncidence; 218 if ( mUndoIncidence ) delete mUndoIncidence;
200 mUndoIncidence = event->clone(); 219 mUndoIncidence = event->clone();
201 if ( mEventList.removeRef( event ) ) { 220 if ( mEventList.removeRef( event ) ) {
202 setModified( true ); 221 setModified( true );
203 } 222 }
@@ -688,147 +707,184 @@ QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
688 // TODO: Calculate end date from duration. Should be done in Event 707 // TODO: Calculate end date from duration. Should be done in Event
689 // For now include all events with a duration. 708 // For now include all events with a duration.
690 found = true; 709 found = true;
691 } 710 }
692 } 711 }
693 */ 712 */
694 713
695 } 714 }
696 715
697 if ( found ) eventList.append( event ); 716 if ( found ) eventList.append( event );
698 } else { 717 } else {
699 QDate s = event->dtStart().date(); 718 QDate s = event->dtStart().date();
700 QDate e = event->dtEnd().date(); 719 QDate e = event->dtEnd().date();
701 720
702 if ( inclusive ) { 721 if ( inclusive ) {
703 if ( s >= start && e <= end ) { 722 if ( s >= start && e <= end ) {
704 eventList.append( event ); 723 eventList.append( event );
705 } 724 }
706 } else { 725 } else {
707 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { 726 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) {
708 eventList.append( event ); 727 eventList.append( event );
709 } 728 }
710 } 729 }
711 } 730 }
712 } 731 }
713 732
714 return eventList; 733 return eventList;
715} 734}
716 735
717QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 736QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
718{ 737{
719 return rawEventsForDate( qdt.date() ); 738 return rawEventsForDate( qdt.date() );
720} 739}
721 740
722QPtrList<Event> CalendarLocal::rawEvents() 741QPtrList<Event> CalendarLocal::rawEvents()
723{ 742{
724 QPtrList<Event> el; 743 QPtrList<Event> el;
725 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 744 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
726 if ( it->calEnabled() ) el.append( it ); 745 if ( it->calEnabled() ) el.append( it );
727 return el; 746 return el;
728} 747}
729 748
730bool CalendarLocal::addJournal(Journal *journal) 749bool CalendarLocal::addJournal(Journal *journal)
731{ 750{
732 if ( journal->dtStart().isValid()) 751 if ( journal->dtStart().isValid())
733 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; 752 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl;
734 else 753 else
735 kdDebug(5800) << "Adding Journal without a DTSTART" << endl; 754 kdDebug(5800) << "Adding Journal without a DTSTART" << endl;
736 755
737 mJournalList.append(journal); 756 mJournalList.append(journal);
738 757
739 journal->registerObserver( this ); 758 journal->registerObserver( this );
740 759
741 setModified( true ); 760 setModified( true );
742 journal->setCalID( mDefaultCalendar ); 761 journal->setCalID( mDefaultCalendar );
743 journal->setCalEnabled( true ); 762 journal->setCalEnabled( true );
744 return true; 763 return true;
745} 764}
746 765
747void CalendarLocal::deleteJournal( Journal *journal ) 766void CalendarLocal::deleteJournal( Journal *journal )
748{ 767{
749 if ( mUndoIncidence ) delete mUndoIncidence; 768 if ( mUndoIncidence ) delete mUndoIncidence;
750 mUndoIncidence = journal->clone(); 769 mUndoIncidence = journal->clone();
751 mUndoIncidence->setSummary( mUndoIncidence->description().left(25)); 770 mUndoIncidence->setSummary( mUndoIncidence->description().left(25));
752 if ( mJournalList.removeRef(journal) ) { 771 if ( mJournalList.removeRef(journal) ) {
753 setModified( true ); 772 setModified( true );
754 } 773 }
755} 774}
756 775
757Journal *CalendarLocal::journal( const QDate &date ) 776Journal *CalendarLocal::journal( const QDate &date )
758{ 777{
759// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 778// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
760 779
761 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 780 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
762 if ( it->calEnabled() && it->dtStart().date() == date ) 781 if ( it->calEnabled() && it->dtStart().date() == date )
763 return it; 782 return it;
764 783
765 return 0; 784 return 0;
766} 785}
767 786
768Journal *CalendarLocal::journal( const QString &uid ) 787Journal *CalendarLocal::journal( const QString &uid )
769{ 788{
770 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 789 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
771 if ( it->calEnabled() && it->uid() == uid ) 790 if ( it->calEnabled() && it->uid() == uid )
772 return it; 791 return it;
773 792
774 return 0; 793 return 0;
775} 794}
776 795
777QPtrList<Journal> CalendarLocal::journals() 796QPtrList<Journal> CalendarLocal::journals()
778{ 797{
779 QPtrList<Journal> el; 798 QPtrList<Journal> el;
780 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 799 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
781 if ( it->calEnabled() ) el.append( it ); 800 if ( it->calEnabled() ) el.append( it );
782 return el; 801 return el;
783} 802}
803void CalendarLocal::setCalendarRemove( int id )
804{
805
806 {
807 QPtrList<Event> EventList = mEventList;
808 Event * ev = EventList.first();
809 while ( ev ) {
810 if ( ev->calID() == id )
811 deleteEvent( ev );
812 ev = EventList.next();
813 }
814 }
815 {
816
817 QPtrList<Todo> TodoList = mTodoList;
818 Todo * ev = TodoList.first();
819 while ( ev ) {
820 if ( ev->calID() == id )
821 deleteTodo( ev );
822 ev = TodoList.next();
823 }
824 }
825 {
826 QPtrList<Journal> JournalList = mJournalList;
827 Journal * ev = JournalList.first();
828 while ( ev ) {
829 if ( ev->calID() == id )
830 deleteJournal( ev );
831 ev = JournalList.next();
832 }
833 }
834
835 if ( mUndoIncidence ) delete mUndoIncidence;
836 mUndoIncidence = 0;
837
838}
784 839
785void CalendarLocal::setCalendarEnabled( int id, bool enable ) 840void CalendarLocal::setCalendarEnabled( int id, bool enable )
786{ 841{
787 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 842 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
788 if ( it->calID() == id ) it->setCalEnabled( enable ); 843 if ( it->calID() == id ) it->setCalEnabled( enable );
789 844
790 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 845 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
791 if ( it->calID() == id ) it->setCalEnabled( enable ); 846 if ( it->calID() == id ) it->setCalEnabled( enable );
792 847
793 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 848 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
794 if ( it->calID() == id ) it->setCalEnabled( enable ); 849 if ( it->calID() == id ) it->setCalEnabled( enable );
795 850
796} 851}
797 852
798void CalendarLocal::setReadOnly( int id, bool enable ) 853void CalendarLocal::setReadOnly( int id, bool enable )
799{ 854{
800 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 855 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
801 if ( it->calID() == id ) it->setReadOnly( enable ); 856 if ( it->calID() == id ) it->setReadOnly( enable );
802 857
803 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 858 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
804 if ( it->calID() == id ) it->setReadOnly( enable ); 859 if ( it->calID() == id ) it->setReadOnly( enable );
805 860
806 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 861 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
807 if ( it->calID() == id ) it->setReadOnly( enable ); 862 if ( it->calID() == id ) it->setReadOnly( enable );
808 863
809} 864}
810 865
811void CalendarLocal::setAlarmEnabled( int id, bool enable ) 866void CalendarLocal::setAlarmEnabled( int id, bool enable )
812{ 867{
813 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 868 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
814 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 869 if ( it->calID() == id ) it->setAlarmEnabled( enable );
815 870
816 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 871 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
817 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 872 if ( it->calID() == id ) it->setAlarmEnabled( enable );
818 873
819 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 874 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
820 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 875 if ( it->calID() == id ) it->setAlarmEnabled( enable );
876 reInitAlarmSettings();
821 877
822} 878}
823void CalendarLocal::setDefaultCalendarEnabledOnly() 879void CalendarLocal::setDefaultCalendarEnabledOnly()
824{ 880{
825 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 881 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
826 it->setCalEnabled( it->calID() == mDefaultCalendar ); 882 it->setCalEnabled( it->calID() == mDefaultCalendar );
827 883
828 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 884 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
829 it->setCalEnabled( it->calID() == mDefaultCalendar); 885 it->setCalEnabled( it->calID() == mDefaultCalendar);
830 886
831 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 887 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
832 it->setCalEnabled( it->calID() == mDefaultCalendar); 888 it->setCalEnabled( it->calID() == mDefaultCalendar);
833 889
834} 890}
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index 65f6aa7..5bbe55f 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -92,132 +92,133 @@ class CalendarLocal : public Calendar
92 Add a todo to the todolist. 92 Add a todo to the todolist.
93 */ 93 */
94 bool addTodo( Todo *todo ); 94 bool addTodo( Todo *todo );
95 bool addTodoNoDup( Todo *todo ); 95 bool addTodoNoDup( Todo *todo );
96 /** 96 /**
97 Remove a todo from the todolist. 97 Remove a todo from the todolist.
98 */ 98 */
99 void deleteTodo( Todo * ); 99 void deleteTodo( Todo * );
100 /** 100 /**
101 Searches todolist for an event with this unique string identifier, 101 Searches todolist for an event with this unique string identifier,
102 returns a pointer or null. 102 returns a pointer or null.
103 */ 103 */
104 Todo *todo( const QString &uid ); 104 Todo *todo( const QString &uid );
105 /** 105 /**
106 Return list of all todos. 106 Return list of all todos.
107 */ 107 */
108 QPtrList<Todo> rawTodos(); 108 QPtrList<Todo> rawTodos();
109 /** 109 /**
110 Returns list of todos due on the specified date. 110 Returns list of todos due on the specified date.
111 */ 111 */
112 QPtrList<Todo> todos( const QDate &date ); 112 QPtrList<Todo> todos( const QDate &date );
113 /** 113 /**
114 Return list of all todos. 114 Return list of all todos.
115 115
116 Workaround because compiler does not recognize function of base class. 116 Workaround because compiler does not recognize function of base class.
117 */ 117 */
118 QPtrList<Todo> todos() { return Calendar::todos(); } 118 QPtrList<Todo> todos() { return Calendar::todos(); }
119 119
120 /** 120 /**
121 Add a Journal entry to calendar. 121 Add a Journal entry to calendar.
122 */ 122 */
123 bool addJournal( Journal * ); 123 bool addJournal( Journal * );
124 /** 124 /**
125 Remove a Journal from the calendar. 125 Remove a Journal from the calendar.
126 */ 126 */
127 void deleteJournal( Journal * ); 127 void deleteJournal( Journal * );
128 /** 128 /**
129 Return Journal for given date. 129 Return Journal for given date.
130 */ 130 */
131 Journal *journal( const QDate & ); 131 Journal *journal( const QDate & );
132 /** 132 /**
133 Return Journal with given UID. 133 Return Journal with given UID.
134 */ 134 */
135 Journal *journal( const QString &uid ); 135 Journal *journal( const QString &uid );
136 /** 136 /**
137 Return list of all Journals stored in calendar. 137 Return list of all Journals stored in calendar.
138 */ 138 */
139 QPtrList<Journal> journals(); 139 QPtrList<Journal> journals();
140 140
141 /** 141 /**
142 Return all alarms, which ocur in the given time interval. 142 Return all alarms, which ocur in the given time interval.
143 */ 143 */
144 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 144 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
145 145
146 /** 146 /**
147 Return all alarms, which ocur before given date. 147 Return all alarms, which ocur before given date.
148 */ 148 */
149 Alarm::List alarmsTo( const QDateTime &to ); 149 Alarm::List alarmsTo( const QDateTime &to );
150 150
151 QDateTime nextAlarm( int daysTo ) ; 151 QDateTime nextAlarm( int daysTo ) ;
152 QDateTime nextAlarmEventDateTime() const; 152 QDateTime nextAlarmEventDateTime() const;
153 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 153 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
154 void registerAlarm(); 154 void registerAlarm();
155 void deRegisterAlarm(); 155 void deRegisterAlarm();
156 QString getAlarmNotification(); 156 QString getAlarmNotification();
157 QString nextSummary() const ; 157 QString nextSummary() const ;
158 /** 158 /**
159 This method should be called whenever a Event is modified directly 159 This method should be called whenever a Event is modified directly
160 via it's pointer. It makes sure that the calendar is internally 160 via it's pointer. It makes sure that the calendar is internally
161 consistent. 161 consistent.
162 */ 162 */
163 void update( IncidenceBase *incidence ); 163 void update( IncidenceBase *incidence );
164 164
165 /** 165 /**
166 Builds and then returns a list of all events that match for the 166 Builds and then returns a list of all events that match for the
167 date specified. useful for dayView, etc. etc. 167 date specified. useful for dayView, etc. etc.
168 */ 168 */
169 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false ); 169 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false );
170 /** 170 /**
171 Get unfiltered events for date \a qdt. 171 Get unfiltered events for date \a qdt.
172 */ 172 */
173 QPtrList<Event> rawEventsForDate( const QDateTime &qdt ); 173 QPtrList<Event> rawEventsForDate( const QDateTime &qdt );
174 /** 174 /**
175 Get unfiltered events in a range of dates. If inclusive is set to true, 175 Get unfiltered events in a range of dates. If inclusive is set to true,
176 only events are returned, which are completely included in the range. 176 only events are returned, which are completely included in the range.
177 */ 177 */
178 QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 178 QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
179 bool inclusive = false ); 179 bool inclusive = false );
180 Todo *todo( QString, QString ); 180 Todo *todo( QString, QString );
181 Event *event( QString, QString ); 181 Event *event( QString, QString );
182 182
183public slots: 183public slots:
184 void setCalendarEnabled( int id, bool enable ); 184 void setCalendarEnabled( int id, bool enable );
185 void setAlarmEnabled( int id, bool enable ); 185 void setAlarmEnabled( int id, bool enable );
186 void setReadOnly( int id, bool enable ); 186 void setReadOnly( int id, bool enable );
187 void setDefaultCalendarEnabledOnly(); 187 void setDefaultCalendarEnabledOnly();
188 void setCalendarRemove( int id );
188 189
189 protected: 190 protected:
190 191
191 // Event* mNextAlarmEvent; 192 // Event* mNextAlarmEvent;
192 QString mNextSummary; 193 QString mNextSummary;
193 QString mNextAlarmEventDateTimeString; 194 QString mNextAlarmEventDateTimeString;
194 QString mLastAlarmNotificationString; 195 QString mLastAlarmNotificationString;
195 QDateTime mNextAlarmEventDateTime; 196 QDateTime mNextAlarmEventDateTime;
196 QDateTime mNextAlarmDateTime; 197 QDateTime mNextAlarmDateTime;
197 void reInitAlarmSettings(); 198 void reInitAlarmSettings();
198 199
199 /** Notification function of IncidenceBase::Observer. */ 200 /** Notification function of IncidenceBase::Observer. */
200 void incidenceUpdated( IncidenceBase *i ) { update( i ); } 201 void incidenceUpdated( IncidenceBase *i ) { update( i ); }
201 202
202 /** inserts an event into its "proper place" in the calendar. */ 203 /** inserts an event into its "proper place" in the calendar. */
203 void insertEvent( Event *event ); 204 void insertEvent( Event *event );
204 205
205 /** Append alarms of incidence in interval to list of alarms. */ 206 /** Append alarms of incidence in interval to list of alarms. */
206 void appendAlarms( Alarm::List &alarms, Incidence *incidence, 207 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
207 const QDateTime &from, const QDateTime &to ); 208 const QDateTime &from, const QDateTime &to );
208 209
209 /** Append alarms of recurring events in interval to list of alarms. */ 210 /** Append alarms of recurring events in interval to list of alarms. */
210 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence, 211 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
211 const QDateTime &from, const QDateTime &to ); 212 const QDateTime &from, const QDateTime &to );
212 213
213 private: 214 private:
214 void init(); 215 void init();
215 216
216 QPtrList<Event> mEventList; 217 QPtrList<Event> mEventList;
217 QPtrList<Todo> mTodoList; 218 QPtrList<Todo> mTodoList;
218 QPtrList<Journal> mJournalList; 219 QPtrList<Journal> mJournalList;
219}; 220};
220 221
221} 222}
222 223
223#endif 224#endif