summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-07-30 14:43:57 (UTC)
committer zautrix <zautrix>2005-07-30 14:43:57 (UTC)
commit9ca2cd947f22d33543e065f54c6487e86d80befa (patch) (unidiff)
tree549192e9e27e8972e2b48cf40e1599118df12da5
parent055928e26613f4ab249bd82be86890ed278372f6 (diff)
downloadkdepimpi-9ca2cd947f22d33543e065f54c6487e86d80befa.zip
kdepimpi-9ca2cd947f22d33543e065f54c6487e86d80befa.tar.gz
kdepimpi-9ca2cd947f22d33543e065f54c6487e86d80befa.tar.bz2
fixxx
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendar.cpp42
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/calendarlocal.cpp26
-rw-r--r--libkcal/calendarlocal.h1
-rw-r--r--libkcal/incidence.cpp6
-rw-r--r--libkcal/incidence.h1
6 files changed, 50 insertions, 27 deletions
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index b7990d4..b1806ee 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -17,195 +17,214 @@
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <stdlib.h> 22#include <stdlib.h>
23#include <time.h> 23#include <time.h>
24 24
25#include <kdebug.h> 25#include <kdebug.h>
26#include <kglobal.h> 26#include <kglobal.h>
27#include <klocale.h> 27#include <klocale.h>
28 28
29#include "exceptions.h" 29#include "exceptions.h"
30#include "calfilter.h" 30#include "calfilter.h"
31 31
32#include "calendar.h" 32#include "calendar.h"
33#include "syncdefines.h" 33#include "syncdefines.h"
34 34
35using namespace KCal; 35using namespace KCal;
36 36
37Calendar::Calendar() 37Calendar::Calendar()
38{ 38{
39 39
40 init(); 40 init();
41 setTimeZoneId( " 00:00 Europe/London(UTC)" ); 41 setTimeZoneId( " 00:00 Europe/London(UTC)" );
42} 42}
43 43
44Calendar::Calendar( const QString &timeZoneId ) 44Calendar::Calendar( const QString &timeZoneId )
45{ 45{
46 46
47 init(); 47 init();
48 setTimeZoneId(timeZoneId); 48 setTimeZoneId(timeZoneId);
49} 49}
50 50
51void Calendar::init() 51void Calendar::init()
52{ 52{
53 mObserver = 0; 53 mObserver = 0;
54 mNewObserver = false; 54 mNewObserver = false;
55 mUndoIncidence = 0; 55 mUndoIncidence = 0;
56 mDeleteIncidencesOnClose = true; 56 mDeleteIncidencesOnClose = true;
57 mModified = false; 57 mModified = false;
58 mDefaultCalendar = 1; 58 mDefaultCalendar = 1;
59 // Setup default filter, which does nothing 59 // Setup default filter, which does nothing
60 mDefaultFilter = new CalFilter; 60 mDefaultFilter = new CalFilter;
61 mFilter = mDefaultFilter; 61 mFilter = mDefaultFilter;
62 mFilter->setEnabled(false); 62 mFilter->setEnabled(false);
63 63
64 // initialize random numbers. This is a hack, and not 64 // initialize random numbers. This is a hack, and not
65 // even that good of one at that. 65 // even that good of one at that.
66// srandom(time(0)); 66// srandom(time(0));
67 67
68 // user information... 68 // user information...
69 setOwner(i18n("Unknown Name")); 69 setOwner(i18n("Unknown Name"));
70 setEmail(i18n("unknown@nowhere")); 70 setEmail(i18n("unknown@nowhere"));
71 71
72#if 0 72#if 0
73 tmpStr = KOPrefs::instance()->mTimeZone; 73 tmpStr = KOPrefs::instance()->mTimeZone;
74// kdDebug(5800) << "Calendar::Calendar(): TimeZone: " << tmpStr << endl; 74// kdDebug(5800) << "Calendar::Calendar(): TimeZone: " << tmpStr << endl;
75 int dstSetting = KOPrefs::instance()->mDaylightSavings; 75 int dstSetting = KOPrefs::instance()->mDaylightSavings;
76 extern long int timezone; 76 extern long int timezone;
77 struct tm *now; 77 struct tm *now;
78 time_t curtime; 78 time_t curtime;
79 curtime = time(0); 79 curtime = time(0);
80 now = localtime(&curtime); 80 now = localtime(&curtime);
81 int hourOff = - ((timezone / 60) / 60); 81 int hourOff = - ((timezone / 60) / 60);
82 if (now->tm_isdst) 82 if (now->tm_isdst)
83 hourOff += 1; 83 hourOff += 1;
84 QString tzStr; 84 QString tzStr;
85 tzStr.sprintf("%.2d%.2d", 85 tzStr.sprintf("%.2d%.2d",
86 hourOff, 86 hourOff,
87 abs((timezone / 60) % 60)); 87 abs((timezone / 60) % 60));
88 88
89 // if no time zone was in the config file, write what we just discovered. 89 // if no time zone was in the config file, write what we just discovered.
90 if (tmpStr.isEmpty()) { 90 if (tmpStr.isEmpty()) {
91// KOPrefs::instance()->mTimeZone = tzStr; 91// KOPrefs::instance()->mTimeZone = tzStr;
92 } else { 92 } else {
93 tzStr = tmpStr; 93 tzStr = tmpStr;
94 } 94 }
95 95
96 // if daylight savings has changed since last load time, we need 96 // if daylight savings has changed since last load time, we need
97 // to rewrite these settings to the config file. 97 // to rewrite these settings to the config file.
98 if ((now->tm_isdst && !dstSetting) || 98 if ((now->tm_isdst && !dstSetting) ||
99 (!now->tm_isdst && dstSetting)) { 99 (!now->tm_isdst && dstSetting)) {
100 KOPrefs::instance()->mTimeZone = tzStr; 100 KOPrefs::instance()->mTimeZone = tzStr;
101 KOPrefs::instance()->mDaylightSavings = now->tm_isdst; 101 KOPrefs::instance()->mDaylightSavings = now->tm_isdst;
102 } 102 }
103 103
104 setTimeZone(tzStr); 104 setTimeZone(tzStr);
105#endif 105#endif
106 106
107// KOPrefs::instance()->writeConfig(); 107// KOPrefs::instance()->writeConfig();
108} 108}
109 109
110Calendar::~Calendar() 110Calendar::~Calendar()
111{ 111{
112 delete mDefaultFilter; 112 delete mDefaultFilter;
113 if ( mUndoIncidence ) 113 clearUndo( 0 );
114 delete mUndoIncidence; 114}
115} 115void Calendar::clearUndo( Incidence * newUndo )
116{
117
118 if ( mUndoIncidence ) {
119 if ( mUndoIncidence->typeID() == eventID )
120 delete ((Event*) mUndoIncidence) ;
121 else if ( mUndoIncidence->typeID() == todoID )
122 delete ( (Todo*) mUndoIncidence );
123 else if ( mUndoIncidence->typeID() == journalID )
124 delete ( (Journal*) mUndoIncidence );
125 else
126 delete mUndoIncidence;
127 }
128 mUndoIncidence = newUndo;
129 if ( mUndoIncidence ) {
130 mUndoIncidence->clearRelations();
131 }
132
133}
134
116void Calendar::setDontDeleteIncidencesOnClose () 135void Calendar::setDontDeleteIncidencesOnClose ()
117{ 136{
118 mDeleteIncidencesOnClose = false; 137 mDeleteIncidencesOnClose = false;
119} 138}
120void Calendar::setDefaultCalendar( int d ) 139void Calendar::setDefaultCalendar( int d )
121{ 140{
122 mDefaultCalendar = d; 141 mDefaultCalendar = d;
123} 142}
124int Calendar::defaultCalendar() 143int Calendar::defaultCalendar()
125{ 144{
126 return mDefaultCalendar; 145 return mDefaultCalendar;
127} 146}
128const QString &Calendar::getOwner() const 147const QString &Calendar::getOwner() const
129{ 148{
130 return mOwner; 149 return mOwner;
131} 150}
132 151
133bool Calendar::undoDeleteIncidence() 152bool Calendar::undoDeleteIncidence()
134{ 153{
135 if (!mUndoIncidence) 154 if (!mUndoIncidence)
136 return false; 155 return false;
137 addIncidence(mUndoIncidence); 156 addIncidence(mUndoIncidence);
138 mUndoIncidence = 0; 157 mUndoIncidence = 0;
139 return true; 158 return true;
140} 159}
141void Calendar::setOwner(const QString &os) 160void Calendar::setOwner(const QString &os)
142{ 161{
143 int i; 162 int i;
144 mOwner = os; 163 mOwner = os;
145 i = mOwner.find(','); 164 i = mOwner.find(',');
146 if (i != -1) 165 if (i != -1)
147 mOwner = mOwner.left(i); 166 mOwner = mOwner.left(i);
148 167
149 setModified( true ); 168 setModified( true );
150} 169}
151 170
152void Calendar::setTimeZone(const QString & tz) 171void Calendar::setTimeZone(const QString & tz)
153{ 172{
154 bool neg = FALSE; 173 bool neg = FALSE;
155 int hours, minutes; 174 int hours, minutes;
156 QString tmpStr(tz); 175 QString tmpStr(tz);
157 176
158 if (tmpStr.left(1) == "-") 177 if (tmpStr.left(1) == "-")
159 neg = TRUE; 178 neg = TRUE;
160 if (tmpStr.left(1) == "-" || tmpStr.left(1) == "+") 179 if (tmpStr.left(1) == "-" || tmpStr.left(1) == "+")
161 tmpStr.remove(0, 1); 180 tmpStr.remove(0, 1);
162 hours = tmpStr.left(2).toInt(); 181 hours = tmpStr.left(2).toInt();
163 if (tmpStr.length() > 2) 182 if (tmpStr.length() > 2)
164 minutes = tmpStr.right(2).toInt(); 183 minutes = tmpStr.right(2).toInt();
165 else 184 else
166 minutes = 0; 185 minutes = 0;
167 mTimeZone = (60*hours+minutes); 186 mTimeZone = (60*hours+minutes);
168 if (neg) 187 if (neg)
169 mTimeZone = -mTimeZone; 188 mTimeZone = -mTimeZone;
170 mLocalTime = false; 189 mLocalTime = false;
171 190
172 setModified( true ); 191 setModified( true );
173} 192}
174 193
175QString Calendar::getTimeZoneStr() const 194QString Calendar::getTimeZoneStr() const
176{ 195{
177 if (mLocalTime) 196 if (mLocalTime)
178 return ""; 197 return "";
179 QString tmpStr; 198 QString tmpStr;
180 int hours = abs(mTimeZone / 60); 199 int hours = abs(mTimeZone / 60);
181 int minutes = abs(mTimeZone % 60); 200 int minutes = abs(mTimeZone % 60);
182 bool neg = mTimeZone < 0; 201 bool neg = mTimeZone < 0;
183 202
184 tmpStr.sprintf("%c%.2d%.2d", 203 tmpStr.sprintf("%c%.2d%.2d",
185 (neg ? '-' : '+'), 204 (neg ? '-' : '+'),
186 hours, minutes); 205 hours, minutes);
187 return tmpStr; 206 return tmpStr;
188} 207}
189 208
190void Calendar::setTimeZone(int tz) 209void Calendar::setTimeZone(int tz)
191{ 210{
192 mTimeZone = tz; 211 mTimeZone = tz;
193 mLocalTime = false; 212 mLocalTime = false;
194 213
195 setModified( true ); 214 setModified( true );
196} 215}
197 216
198int Calendar::getTimeZone() const 217int Calendar::getTimeZone() const
199{ 218{
200 return mTimeZone; 219 return mTimeZone;
201} 220}
202 221
203void Calendar::setTimeZoneId(const QString &id) 222void Calendar::setTimeZoneId(const QString &id)
204{ 223{
205 mTimeZoneId = id; 224 mTimeZoneId = id;
206 mLocalTime = false; 225 mLocalTime = false;
207 mTimeZone = KGlobal::locale()->timezoneOffset(mTimeZoneId); 226 mTimeZone = KGlobal::locale()->timezoneOffset(mTimeZoneId);
208 if ( mTimeZone > 1000) 227 if ( mTimeZone > 1000)
209 setLocalTime(); 228 setLocalTime();
210 //qDebug("Calendar::setTimeZoneOffset %s %d ",mTimeZoneId.latin1(), mTimeZone); 229 //qDebug("Calendar::setTimeZoneOffset %s %d ",mTimeZoneId.latin1(), mTimeZone);
211 setModified( true ); 230 setModified( true );
@@ -354,136 +373,151 @@ void Calendar::addIncidenceBranch(Incidence *i)
354 QPtrList<Incidence> Relations = i->relations(); 373 QPtrList<Incidence> Relations = i->relations();
355 for (inc=Relations.first();inc;inc=Relations.next()) { 374 for (inc=Relations.first();inc;inc=Relations.next()) {
356 addIncidenceBranch( inc ); 375 addIncidenceBranch( inc );
357 } 376 }
358} 377}
359 378
360bool Calendar::addIncidence(Incidence *i) 379bool Calendar::addIncidence(Incidence *i)
361{ 380{
362 Incidence::AddVisitor<Calendar> v(this); 381 Incidence::AddVisitor<Calendar> v(this);
363 if ( i->calID() == 0 ) 382 if ( i->calID() == 0 )
364 i->setCalID( mDefaultCalendar ); 383 i->setCalID( mDefaultCalendar );
365 i->setCalEnabled( true ); 384 i->setCalEnabled( true );
366 return i->accept(v); 385 return i->accept(v);
367} 386}
368void Calendar::deleteIncidence(Incidence *in) 387void Calendar::deleteIncidence(Incidence *in)
369{ 388{
370 if ( in->typeID() == eventID ) 389 if ( in->typeID() == eventID )
371 deleteEvent( (Event*) in ); 390 deleteEvent( (Event*) in );
372 else if ( in->typeID() == todoID ) 391 else if ( in->typeID() == todoID )
373 deleteTodo( (Todo*) in); 392 deleteTodo( (Todo*) in);
374 else if ( in->typeID() == journalID ) 393 else if ( in->typeID() == journalID )
375 deleteJournal( (Journal*) in ); 394 deleteJournal( (Journal*) in );
376} 395}
377 396
378Incidence* Calendar::incidence( const QString& uid ) 397Incidence* Calendar::incidence( const QString& uid )
379{ 398{
380 Incidence* i; 399 Incidence* i;
381 400
382 if( (i = todo( uid )) != 0 ) 401 if( (i = todo( uid )) != 0 )
383 return i; 402 return i;
384 if( (i = event( uid )) != 0 ) 403 if( (i = event( uid )) != 0 )
385 return i; 404 return i;
386 if( (i = journal( uid )) != 0 ) 405 if( (i = journal( uid )) != 0 )
387 return i; 406 return i;
388 407
389 return 0; 408 return 0;
390} 409}
391 410
392QPtrList<Todo> Calendar::todos() 411QPtrList<Todo> Calendar::todos()
393{ 412{
394 QPtrList<Todo> tl = rawTodos(); 413 QPtrList<Todo> tl = rawTodos();
395 mFilter->apply( &tl ); 414 mFilter->apply( &tl );
396 return tl; 415 return tl;
397} 416}
398 417
399// When this is called, the todo have already been added to the calendar. 418// When this is called, the todo have already been added to the calendar.
400// This method is only about linking related todos 419// This method is only about linking related todos
401void Calendar::setupRelations( Incidence *incidence ) 420void Calendar::setupRelations( Incidence *incidence )
402{ 421{
403 QString uid = incidence->uid(); 422 QString uid = incidence->uid();
404 //qDebug("Calendar::setupRelations "); 423 //qDebug("Calendar::setupRelations ");
405 // First, go over the list of orphans and see if this is their parent 424 // First, go over the list of orphans and see if this is their parent
406 while( Incidence* i = mOrphans[ uid ] ) { 425 while( Incidence* i = mOrphans[ uid ] ) {
407 mOrphans.remove( uid ); 426 mOrphans.remove( uid );
408 i->setRelatedTo( incidence ); 427 i->setRelatedTo( incidence );
409 incidence->addRelation( i ); 428 incidence->addRelation( i );
410 mOrphanUids.remove( i->uid() ); 429 mOrphanUids.remove( i->uid() );
411 } 430 }
412 431
413 // Now see about this incidences parent 432 // Now see about this incidences parent
414 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) { 433 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) {
415 // This incidence has a uid it is related to, but is not registered to it yet 434 // This incidence has a uid it is related to, but is not registered to it yet
416 // Try to find it 435 // Try to find it
417 Incidence* parent = this->incidence( incidence->relatedToUid() ); 436 Incidence* parent = this->incidence( incidence->relatedToUid() );
418 if( parent ) { 437 if( parent ) {
419 // Found it 438 // Found it
420 incidence->setRelatedTo( parent ); 439 incidence->setRelatedTo( parent );
421 parent->addRelation( incidence ); 440 parent->addRelation( incidence );
422 } else { 441 } else {
423 // Not found, put this in the mOrphans list 442 // Not found, put this in the mOrphans list
424 mOrphans.insert( incidence->relatedToUid(), incidence ); 443 mOrphans.insert( incidence->relatedToUid(), incidence );
425 mOrphanUids.insert( incidence->uid(), incidence ); 444 mOrphanUids.insert( incidence->uid(), incidence );
426 } 445 }
427 } 446 }
428} 447}
429 448
430// If a task with subtasks is deleted, move it's subtasks to the orphans list 449// If a task with subtasks is deleted, move it's subtasks to the orphans list
431void Calendar::removeRelations( Incidence *incidence ) 450void Calendar::removeRelations( Incidence *incidence )
432{ 451{
433 // qDebug("Calendar::removeRelations "); 452 // qDebug("Calendar::removeRelations ");
434 QString uid = incidence->uid(); 453 QString uid = incidence->uid();
435 454
436 QPtrList<Incidence> relations = incidence->relations(); 455 QPtrList<Incidence> relations = incidence->relations();
437 for( Incidence* i = relations.first(); i; i = relations.next() ) 456 for( Incidence* i = relations.first(); i; i = relations.next() )
438 if( !mOrphanUids.find( i->uid() ) ) { 457 if( !mOrphanUids.find( i->uid() ) ) {
439 mOrphans.insert( uid, i ); 458 mOrphans.insert( uid, i );
440 mOrphanUids.insert( i->uid(), i ); 459 mOrphanUids.insert( i->uid(), i );
441 i->setRelatedTo( 0 ); 460 i->setRelatedTo( 0 );
442 i->setRelatedToUid( uid ); 461 i->setRelatedToUid( uid );
443 } 462 }
444 463
445 // If this incidence is related to something else, tell that about it 464 // If this incidence is related to something else, tell that about it
446 if( incidence->relatedTo() ) 465 if( incidence->relatedTo() )
447 incidence->relatedTo()->removeRelation( incidence ); 466 incidence->relatedTo()->removeRelation( incidence );
448 467
449 // Remove this one from the orphans list 468 // Remove this one from the orphans list
450 if( mOrphanUids.remove( uid ) ) 469 if( mOrphanUids.remove( uid ) ) {
470 QString r2uid = incidence->relatedToUid();
471 QPtrList<Incidence> tempList;
472 while( Incidence* i = mOrphans[ r2uid ] ) {
473 mOrphans.remove( r2uid );
474 if ( i != incidence ) tempList.append( i );
475 }
476 Incidence* inc = tempList.first();
477 while ( inc ) {
478 mOrphans.insert( r2uid, inc );
479 inc = tempList.next();
480 }
481 }
482 // LR: and another big bad bug found
483#if 0
451 // This incidence is located in the orphans list - it should be removed 484 // This incidence is located in the orphans list - it should be removed
452 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) { 485 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) {
453 // Removing wasn't that easy 486 // Removing wasn't that easy
454 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) { 487 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) {
455 if( it.current()->uid() == uid ) { 488 if( it.current()->uid() == uid ) {
456 mOrphans.remove( it.currentKey() ); 489 mOrphans.remove( it.currentKey() );
457 break; 490 break;
458 } 491 }
459 } 492 }
460 } 493 }
494#endif
461} 495}
462 496
463void Calendar::registerObserver( Observer *observer ) 497void Calendar::registerObserver( Observer *observer )
464{ 498{
465 mObserver = observer; 499 mObserver = observer;
466 mNewObserver = true; 500 mNewObserver = true;
467} 501}
468 502
469void Calendar::setModified( bool modified ) 503void Calendar::setModified( bool modified )
470{ 504{
471 if ( mObserver ) mObserver->calendarModified( modified, this ); 505 if ( mObserver ) mObserver->calendarModified( modified, this );
472 if ( modified != mModified || mNewObserver ) { 506 if ( modified != mModified || mNewObserver ) {
473 mNewObserver = false; 507 mNewObserver = false;
474 // if ( mObserver ) mObserver->calendarModified( modified, this ); 508 // if ( mObserver ) mObserver->calendarModified( modified, this );
475 mModified = modified; 509 mModified = modified;
476 } 510 }
477} 511}
478 512
479void Calendar::setLoadedProductId( const QString &id ) 513void Calendar::setLoadedProductId( const QString &id )
480{ 514{
481 mLoadedProductId = id; 515 mLoadedProductId = id;
482} 516}
483 517
484QString Calendar::loadedProductId() 518QString Calendar::loadedProductId()
485{ 519{
486 return mLoadedProductId; 520 return mLoadedProductId;
487} 521}
488 522
489//#include "calendar.moc" 523//#include "calendar.moc"
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 95477cd..3f6895d 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,178 +1,179 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35#include "calfilter.h" 35#include "calfilter.h"
36 36
37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
38 38
39class KConfig; 39class KConfig;
40 40
41namespace KCal { 41namespace KCal {
42 42
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 Incidence * undoIncidence() { return mUndoIncidence; }; 68 Incidence * undoIncidence() { return mUndoIncidence; };
69 bool undoDeleteIncidence(); 69 bool undoDeleteIncidence();
70 void deleteIncidence(Incidence *in); 70 void deleteIncidence(Incidence *in);
71 void resetTempSyncStat(); 71 void resetTempSyncStat();
72 void resetPilotStat(int id); 72 void resetPilotStat(int id);
73 /** 73 /**
74 Clears out the current calendar, freeing all used memory etc. 74 Clears out the current calendar, freeing all used memory etc.
75 */ 75 */
76 virtual void close() = 0; 76 virtual void close() = 0;
77 virtual void addCalendar( Calendar* ) = 0; 77 virtual void addCalendar( Calendar* ) = 0;
78 virtual bool addCalendarFile( QString name, int id ) = 0; 78 virtual bool addCalendarFile( QString name, int id ) = 0;
79 virtual bool mergeCalendarFile( QString name ) = 0; 79 virtual bool mergeCalendarFile( QString name ) = 0;
80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0; 80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0;
81 virtual void setSyncEventsReadOnly() = 0; 81 virtual void setSyncEventsReadOnly() = 0;
82 virtual void stopAllTodos() = 0; 82 virtual void stopAllTodos() = 0;
83 virtual void clearUndo( Incidence * newUndo );
83 84
84 /** 85 /**
85 Sync changes in memory to persistant storage. 86 Sync changes in memory to persistant storage.
86 */ 87 */
87 virtual void save() = 0; 88 virtual void save() = 0;
88 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 89 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
89 virtual void removeSyncInfo( QString syncProfile) = 0; 90 virtual void removeSyncInfo( QString syncProfile) = 0;
90 virtual bool isSaving() { return false; } 91 virtual bool isSaving() { return false; }
91 92
92 /** 93 /**
93 Return the owner of the calendar's full name. 94 Return the owner of the calendar's full name.
94 */ 95 */
95 const QString &getOwner() const; 96 const QString &getOwner() const;
96 /** 97 /**
97 Set the owner of the calendar. Should be owner's full name. 98 Set the owner of the calendar. Should be owner's full name.
98 */ 99 */
99 void setOwner( const QString &os ); 100 void setOwner( const QString &os );
100 /** 101 /**
101 Return the email address of the calendar owner. 102 Return the email address of the calendar owner.
102 */ 103 */
103 const QString &getEmail(); 104 const QString &getEmail();
104 /** 105 /**
105 Set the email address of the calendar owner. 106 Set the email address of the calendar owner.
106 */ 107 */
107 void setEmail( const QString & ); 108 void setEmail( const QString & );
108 109
109 /** 110 /**
110 Set time zone from a timezone string (e.g. -2:00) 111 Set time zone from a timezone string (e.g. -2:00)
111 */ 112 */
112 void setTimeZone( const QString &tz ); 113 void setTimeZone( const QString &tz );
113 /** 114 /**
114 Set time zone from a minutes value (e.g. -60) 115 Set time zone from a minutes value (e.g. -60)
115 */ 116 */
116 void setTimeZone( int tz ); 117 void setTimeZone( int tz );
117 /** 118 /**
118 Return time zone as offest in minutes. 119 Return time zone as offest in minutes.
119 */ 120 */
120 int getTimeZone() const; 121 int getTimeZone() const;
121 /** 122 /**
122 Compute an ISO 8601 format string from the time zone. 123 Compute an ISO 8601 format string from the time zone.
123 */ 124 */
124 QString getTimeZoneStr() const; 125 QString getTimeZoneStr() const;
125 /** 126 /**
126 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 127 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
127 values). 128 values).
128 */ 129 */
129 void setTimeZoneId( const QString & ); 130 void setTimeZoneId( const QString & );
130 /** 131 /**
131 Return time zone id. 132 Return time zone id.
132 */ 133 */
133 QString timeZoneId() const; 134 QString timeZoneId() const;
134 /** 135 /**
135 Use local time, not UTC or a time zone. 136 Use local time, not UTC or a time zone.
136 */ 137 */
137 void setLocalTime(); 138 void setLocalTime();
138 /** 139 /**
139 Return whether local time is being used. 140 Return whether local time is being used.
140 */ 141 */
141 bool isLocalTime() const; 142 bool isLocalTime() const;
142 143
143 /** 144 /**
144 Add an incidence to calendar. 145 Add an incidence to calendar.
145 146
146 @return true on success, false on error. 147 @return true on success, false on error.
147 */ 148 */
148 virtual bool addIncidence( Incidence * ); 149 virtual bool addIncidence( Incidence * );
149 150
150 // Adds an incidence and all relatedto incidences to the cal 151 // Adds an incidence and all relatedto incidences to the cal
151 void addIncidenceBranch( Incidence * ); 152 void addIncidenceBranch( Incidence * );
152 /** 153 /**
153 Return filtered list of all incidences of this calendar. 154 Return filtered list of all incidences of this calendar.
154 */ 155 */
155 virtual QPtrList<Incidence> incidences(); 156 virtual QPtrList<Incidence> incidences();
156 157
157 /** 158 /**
158 Return unfiltered list of all incidences of this calendar. 159 Return unfiltered list of all incidences of this calendar.
159 */ 160 */
160 virtual QPtrList<Incidence> rawIncidences(); 161 virtual QPtrList<Incidence> rawIncidences();
161 162
162 /** 163 /**
163 Adds a Event to this calendar object. 164 Adds a Event to this calendar object.
164 @param anEvent a pointer to the event to add 165 @param anEvent a pointer to the event to add
165 166
166 @return true on success, false on error. 167 @return true on success, false on error.
167 */ 168 */
168 virtual bool addEventNoDup( Event *event ) = 0; 169 virtual bool addEventNoDup( Event *event ) = 0;
169 virtual bool addAnniversaryNoDup( Event *event ) = 0; 170 virtual bool addAnniversaryNoDup( Event *event ) = 0;
170 virtual bool addEvent( Event *anEvent ) = 0; 171 virtual bool addEvent( Event *anEvent ) = 0;
171 /** 172 /**
172 Delete event from calendar. 173 Delete event from calendar.
173 */ 174 */
174 virtual void deleteEvent( Event * ) = 0; 175 virtual void deleteEvent( Event * ) = 0;
175 /** 176 /**
176 Retrieves an event on the basis of the unique string ID. 177 Retrieves an event on the basis of the unique string ID.
177 */ 178 */
178 virtual Event *event( const QString &UniqueStr ) = 0; 179 virtual Event *event( const QString &UniqueStr ) = 0;
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index e8c969f..1a1c6be 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -175,322 +175,307 @@ bool CalendarLocal::addCalendarFile( QString name, int id )
175} 175}
176void CalendarLocal::setSyncEventsReadOnly() 176void CalendarLocal::setSyncEventsReadOnly()
177{ 177{
178 Event * ev; 178 Event * ev;
179 ev = mEventList.first(); 179 ev = mEventList.first();
180 while ( ev ) { 180 while ( ev ) {
181 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 181 if ( ev->uid().left(15) == QString("last-syncEvent-") )
182 ev->setReadOnly( true ); 182 ev->setReadOnly( true );
183 ev = mEventList.next(); 183 ev = mEventList.next();
184 } 184 }
185} 185}
186void CalendarLocal::addCalendar( Calendar* cal ) 186void CalendarLocal::addCalendar( Calendar* cal )
187{ 187{
188 cal->setDontDeleteIncidencesOnClose(); 188 cal->setDontDeleteIncidencesOnClose();
189 { 189 {
190 QPtrList<Event> EventList = cal->rawEvents(); 190 QPtrList<Event> EventList = cal->rawEvents();
191 Event * ev = EventList.first(); 191 Event * ev = EventList.first();
192 while ( ev ) { 192 while ( ev ) {
193 ev->unRegisterObserver( cal ); 193 ev->unRegisterObserver( cal );
194 ev->registerObserver( this ); 194 ev->registerObserver( this );
195 mEventList.append( ev ); 195 mEventList.append( ev );
196 ev = EventList.next(); 196 ev = EventList.next();
197 } 197 }
198 } 198 }
199 { 199 {
200 200
201 QPtrList<Todo> TodoList = cal->rawTodos(); 201 QPtrList<Todo> TodoList = cal->rawTodos();
202 Todo * ev = TodoList.first(); 202 Todo * ev = TodoList.first();
203 while ( ev ) { 203 while ( ev ) {
204 QString rel = ev->relatedToUid(); 204 QString rel = ev->relatedToUid();
205 if ( !rel.isEmpty() ){ 205 if ( !rel.isEmpty() ){
206 ev->setRelatedTo ( 0 ); 206 ev->setRelatedTo ( 0 );
207 ev->setRelatedToUid( rel ); 207 ev->setRelatedToUid( rel );
208 } 208 }
209 ev = TodoList.next(); 209 ev = TodoList.next();
210 } 210 }
211 //TodoList = cal->rawTodos(); 211 //TodoList = cal->rawTodos();
212 ev = TodoList.first(); 212 ev = TodoList.first();
213 while ( ev ) { 213 while ( ev ) {
214 ev->unRegisterObserver( cal ); 214 ev->unRegisterObserver( cal );
215 ev->registerObserver( this ); 215 ev->registerObserver( this );
216 mTodoList.append( ev ); 216 mTodoList.append( ev );
217 setupRelations( ev ); 217 setupRelations( ev );
218 ev = TodoList.next(); 218 ev = TodoList.next();
219 } 219 }
220 } 220 }
221 { 221 {
222 QPtrList<Journal> JournalList = cal->journals(); 222 QPtrList<Journal> JournalList = cal->journals();
223 Journal * ev = JournalList.first(); 223 Journal * ev = JournalList.first();
224 while ( ev ) { 224 while ( ev ) {
225 ev->unRegisterObserver( cal ); 225 ev->unRegisterObserver( cal );
226 ev->registerObserver( this ); 226 ev->registerObserver( this );
227 mJournalList.append( ev ); 227 mJournalList.append( ev );
228 ev = JournalList.next(); 228 ev = JournalList.next();
229 } 229 }
230 } 230 }
231 setModified( true ); 231 setModified( true );
232} 232}
233bool CalendarLocal::load( const QString &fileName ) 233bool CalendarLocal::load( const QString &fileName )
234{ 234{
235 FileStorage storage( this, fileName ); 235 FileStorage storage( this, fileName );
236 return storage.load(); 236 return storage.load();
237} 237}
238 238
239bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 239bool CalendarLocal::save( const QString &fileName, CalFormat *format )
240{ 240{
241 FileStorage storage( this, fileName, format ); 241 FileStorage storage( this, fileName, format );
242 return storage.save(); 242 return storage.save();
243} 243}
244 244
245void CalendarLocal::stopAllTodos() 245void CalendarLocal::stopAllTodos()
246{ 246{
247 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 247 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
248 it->setRunning( false ); 248 it->setRunning( false );
249 249
250} 250}
251void CalendarLocal::close() 251void CalendarLocal::close()
252{ 252{
253 253
254 Todo * i; 254 Todo * i;
255 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 255 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
256 256
257 mEventList.setAutoDelete( true ); 257 mEventList.setAutoDelete( true );
258 mTodoList.setAutoDelete( true ); 258 mTodoList.setAutoDelete( true );
259 mJournalList.setAutoDelete( true ); 259 mJournalList.setAutoDelete( true );
260 260
261 mEventList.clear(); 261 mEventList.clear();
262 mTodoList.clear(); 262 mTodoList.clear();
263 mJournalList.clear(); 263 mJournalList.clear();
264 264
265 mEventList.setAutoDelete( false ); 265 mEventList.setAutoDelete( false );
266 mTodoList.setAutoDelete( false ); 266 mTodoList.setAutoDelete( false );
267 mJournalList.setAutoDelete( false ); 267 mJournalList.setAutoDelete( false );
268 268
269 setModified( false ); 269 setModified( false );
270} 270}
271 void CalendarLocal::clearUndo() 271
272{
273 if ( mUndoIncidence ) {
274 if ( mUndoIncidence->typeID() == eventID )
275 delete ((Event*) mUndoIncidence) ;
276 else if ( mUndoIncidence->typeID() == todoID )
277 delete ( (Todo*) mUndoIncidence );
278 else if ( mUndoIncidence->typeID() == journalID )
279 delete ( (Journal*) mUndoIncidence );
280 else
281 delete mUndoIncidence;
282 }
283 mUndoIncidence = 0;
284}
285bool CalendarLocal::addAnniversaryNoDup( Event *event ) 272bool CalendarLocal::addAnniversaryNoDup( Event *event )
286{ 273{
287 QString cat; 274 QString cat;
288 bool isBirthday = true; 275 bool isBirthday = true;
289 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 276 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
290 isBirthday = false; 277 isBirthday = false;
291 cat = i18n( "Anniversary" ); 278 cat = i18n( "Anniversary" );
292 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 279 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
293 isBirthday = true; 280 isBirthday = true;
294 cat = i18n( "Birthday" ); 281 cat = i18n( "Birthday" );
295 } else { 282 } else {
296 qDebug("addAnniversaryNoDup called without fitting category! "); 283 qDebug("addAnniversaryNoDup called without fitting category! ");
297 return false; 284 return false;
298 } 285 }
299 Event * eve; 286 Event * eve;
300 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 287 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
301 if ( !(eve->categories().contains( cat ) )) 288 if ( !(eve->categories().contains( cat ) ))
302 continue; 289 continue;
303 // now we have an event with fitting category 290 // now we have an event with fitting category
304 if ( eve->dtStart().date() != event->dtStart().date() ) 291 if ( eve->dtStart().date() != event->dtStart().date() )
305 continue; 292 continue;
306 // now we have an event with fitting category+date 293 // now we have an event with fitting category+date
307 if ( eve->summary() != event->summary() ) 294 if ( eve->summary() != event->summary() )
308 continue; 295 continue;
309 // now we have an event with fitting category+date+summary 296 // now we have an event with fitting category+date+summary
310 return false; 297 return false;
311 } 298 }
312 return addEvent( event ); 299 return addEvent( event );
313 300
314} 301}
315bool CalendarLocal::addEventNoDup( Event *event ) 302bool CalendarLocal::addEventNoDup( Event *event )
316{ 303{
317 Event * eve; 304 Event * eve;
318 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 305 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
319 if ( *eve == *event ) { 306 if ( *eve == *event ) {
320 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 307 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
321 return false; 308 return false;
322 } 309 }
323 } 310 }
324 return addEvent( event ); 311 return addEvent( event );
325} 312}
326 313
327bool CalendarLocal::addEvent( Event *event ) 314bool CalendarLocal::addEvent( Event *event )
328{ 315{
329 insertEvent( event ); 316 insertEvent( event );
330 317
331 event->registerObserver( this ); 318 event->registerObserver( this );
332 319
333 setModified( true ); 320 setModified( true );
334 if ( event->calID() == 0 ) 321 if ( event->calID() == 0 )
335 event->setCalID( mDefaultCalendar ); 322 event->setCalID( mDefaultCalendar );
336 event->setCalEnabled( true ); 323 event->setCalEnabled( true );
337 324
338 return true; 325 return true;
339} 326}
340 327
341void CalendarLocal::deleteEvent( Event *event ) 328void CalendarLocal::deleteEvent( Event *event )
342{ 329{
343 clearUndo(); 330 clearUndo(event);
344 mUndoIncidence = event;
345 if ( mEventList.removeRef( event ) ) { 331 if ( mEventList.removeRef( event ) ) {
346 setModified( true ); 332 setModified( true );
347 } 333 }
348} 334}
349 335
350 336
351Event *CalendarLocal::event( const QString &uid ) 337Event *CalendarLocal::event( const QString &uid )
352{ 338{
353 Event *event; 339 Event *event;
354 Event *retVal = 0; 340 Event *retVal = 0;
355 for ( event = mEventList.first(); event; event = mEventList.next() ) { 341 for ( event = mEventList.first(); event; event = mEventList.next() ) {
356 if ( event->calEnabled() && event->uid() == uid ) { 342 if ( event->calEnabled() && event->uid() == uid ) {
357 if ( retVal ) { 343 if ( retVal ) {
358 if ( retVal->calID() > event->calID() ) { 344 if ( retVal->calID() > event->calID() ) {
359 retVal = event; 345 retVal = event;
360 } 346 }
361 } else { 347 } else {
362 retVal = event; 348 retVal = event;
363 } 349 }
364 } 350 }
365 } 351 }
366 return retVal; 352 return retVal;
367} 353}
368bool CalendarLocal::addTodoNoDup( Todo *todo ) 354bool CalendarLocal::addTodoNoDup( Todo *todo )
369{ 355{
370 Todo * eve; 356 Todo * eve;
371 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 357 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
372 if ( *eve == *todo ) { 358 if ( *eve == *todo ) {
373 //qDebug("duplicate todo found! not inserted! "); 359 //qDebug("duplicate todo found! not inserted! ");
374 return false; 360 return false;
375 } 361 }
376 } 362 }
377 return addTodo( todo ); 363 return addTodo( todo );
378} 364}
379bool CalendarLocal::addTodo( Todo *todo ) 365bool CalendarLocal::addTodo( Todo *todo )
380{ 366{
381 mTodoList.append( todo ); 367 mTodoList.append( todo );
382 368
383 todo->registerObserver( this ); 369 todo->registerObserver( this );
384 370
385 // Set up subtask relations 371 // Set up subtask relations
386 setupRelations( todo ); 372 setupRelations( todo );
387 373
388 setModified( true ); 374 setModified( true );
389 if ( todo->calID() == 0 ) 375 if ( todo->calID() == 0 )
390 todo->setCalID( mDefaultCalendar ); 376 todo->setCalID( mDefaultCalendar );
391 todo->setCalEnabled( true ); 377 todo->setCalEnabled( true );
392 return true; 378 return true;
393} 379}
394 380
395void CalendarLocal::deleteTodo( Todo *todo ) 381void CalendarLocal::deleteTodo( Todo *todo )
396{ 382{
397 // Handle orphaned children 383 // Handle orphaned children
398 clearUndo();
399 removeRelations( todo ); 384 removeRelations( todo );
400 mUndoIncidence = todo; 385 clearUndo(todo);
401 386
402 if ( mTodoList.removeRef( todo ) ) { 387 if ( mTodoList.removeRef( todo ) ) {
403 setModified( true ); 388 setModified( true );
404 } 389 }
405} 390}
406 391
407QPtrList<Todo> CalendarLocal::rawTodos() 392QPtrList<Todo> CalendarLocal::rawTodos()
408{ 393{
409 QPtrList<Todo> el; 394 QPtrList<Todo> el;
410 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 395 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
411 if ( it->calEnabled() ) el.append( it ); 396 if ( it->calEnabled() ) el.append( it );
412 return el; 397 return el;
413} 398}
414Todo *CalendarLocal::todo( QString syncProf, QString id ) 399Todo *CalendarLocal::todo( QString syncProf, QString id )
415{ 400{
416 Todo *todo; 401 Todo *todo;
417 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 402 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
418 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 403 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
419 } 404 }
420 405
421 return 0; 406 return 0;
422} 407}
423void CalendarLocal::removeSyncInfo( QString syncProfile) 408void CalendarLocal::removeSyncInfo( QString syncProfile)
424{ 409{
425 QPtrList<Incidence> all = rawIncidences() ; 410 QPtrList<Incidence> all = rawIncidences() ;
426 Incidence *inc; 411 Incidence *inc;
427 for ( inc = all.first(); inc; inc = all.next() ) { 412 for ( inc = all.first(); inc; inc = all.next() ) {
428 inc->removeID( syncProfile ); 413 inc->removeID( syncProfile );
429 } 414 }
430 if ( syncProfile.isEmpty() ) { 415 if ( syncProfile.isEmpty() ) {
431 QPtrList<Event> el; 416 QPtrList<Event> el;
432 Event *todo; 417 Event *todo;
433 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 418 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
434 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 419 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
435 el.append( todo ); 420 el.append( todo );
436 } 421 }
437 for ( todo = el.first(); todo; todo = el.next() ) { 422 for ( todo = el.first(); todo; todo = el.next() ) {
438 deleteIncidence ( todo ); 423 deleteIncidence ( todo );
439 } 424 }
440 } else { 425 } else {
441 Event *lse = event( "last-syncEvent-"+ syncProfile); 426 Event *lse = event( "last-syncEvent-"+ syncProfile);
442 if ( lse ) 427 if ( lse )
443 deleteIncidence ( lse ); 428 deleteIncidence ( lse );
444 } 429 }
445} 430}
446QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 431QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
447{ 432{
448 QPtrList<Event> el; 433 QPtrList<Event> el;
449 Event *todo; 434 Event *todo;
450 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 435 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
451 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 436 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
452 if ( todo->summary().left(3) == "E: " ) 437 if ( todo->summary().left(3) == "E: " )
453 el.append( todo ); 438 el.append( todo );
454 } 439 }
455 440
456 return el; 441 return el;
457 442
458} 443}
459Event *CalendarLocal::event( QString syncProf, QString id ) 444Event *CalendarLocal::event( QString syncProf, QString id )
460{ 445{
461 Event *todo; 446 Event *todo;
462 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 447 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
463 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 448 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
464 } 449 }
465 450
466 return 0; 451 return 0;
467} 452}
468Todo *CalendarLocal::todo( const QString &uid ) 453Todo *CalendarLocal::todo( const QString &uid )
469{ 454{
470 Todo *todo;; 455 Todo *todo;;
471 Todo *retVal = 0; 456 Todo *retVal = 0;
472 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 457 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
473 if ( todo->calEnabled() && todo->uid() == uid ) { 458 if ( todo->calEnabled() && todo->uid() == uid ) {
474 if ( retVal ) { 459 if ( retVal ) {
475 if ( retVal->calID() > todo->calID() ) { 460 if ( retVal->calID() > todo->calID() ) {
476 retVal = todo; 461 retVal = todo;
477 } 462 }
478 } else { 463 } else {
479 retVal = todo; 464 retVal = todo;
480 } 465 }
481 } 466 }
482 } 467 }
483 return retVal; 468 return retVal;
484} 469}
485QString CalendarLocal::nextSummary() const 470QString CalendarLocal::nextSummary() const
486{ 471{
487 return mNextSummary; 472 return mNextSummary;
488} 473}
489QDateTime CalendarLocal::nextAlarmEventDateTime() const 474QDateTime CalendarLocal::nextAlarmEventDateTime() const
490{ 475{
491 return mNextAlarmEventDateTime; 476 return mNextAlarmEventDateTime;
492} 477}
493void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 478void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
494{ 479{
495 //mNextAlarmIncidence 480 //mNextAlarmIncidence
496 //mNextAlarmDateTime 481 //mNextAlarmDateTime
@@ -806,231 +791,230 @@ QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
806 if ( event->doesRecur() ) { 791 if ( event->doesRecur() ) {
807 QDate rStart = event->dtStart().date(); 792 QDate rStart = event->dtStart().date();
808 bool found = false; 793 bool found = false;
809 if ( inclusive ) { 794 if ( inclusive ) {
810 if ( rStart >= start && rStart <= end ) { 795 if ( rStart >= start && rStart <= end ) {
811 // Start date of event is in range. Now check for end date. 796 // Start date of event is in range. Now check for end date.
812 // if duration is negative, event recurs forever, so do not include it. 797 // if duration is negative, event recurs forever, so do not include it.
813 if ( event->recurrence()->duration() == 0 ) { // End date set 798 if ( event->recurrence()->duration() == 0 ) { // End date set
814 QDate rEnd = event->recurrence()->endDate(); 799 QDate rEnd = event->recurrence()->endDate();
815 if ( rEnd >= start && rEnd <= end ) { // End date within range 800 if ( rEnd >= start && rEnd <= end ) { // End date within range
816 found = true; 801 found = true;
817 } 802 }
818 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 803 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
819 // TODO: Calculate end date from duration. Should be done in Event 804 // TODO: Calculate end date from duration. Should be done in Event
820 // For now exclude all events with a duration. 805 // For now exclude all events with a duration.
821 } 806 }
822 } 807 }
823 } else { 808 } else {
824 bool founOne; 809 bool founOne;
825 QDate next = event->getNextOccurence( start, &founOne ).date(); 810 QDate next = event->getNextOccurence( start, &founOne ).date();
826 if ( founOne ) { 811 if ( founOne ) {
827 if ( next <= end ) { 812 if ( next <= end ) {
828 found = true; 813 found = true;
829 } 814 }
830 } 815 }
831 816
832 /* 817 /*
833 // crap !!! 818 // crap !!!
834 if ( rStart <= end ) { // Start date not after range 819 if ( rStart <= end ) { // Start date not after range
835 if ( rStart >= start ) { // Start date within range 820 if ( rStart >= start ) { // Start date within range
836 found = true; 821 found = true;
837 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 822 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
838 found = true; 823 found = true;
839 } else if ( event->recurrence()->duration() == 0 ) { // End date set 824 } else if ( event->recurrence()->duration() == 0 ) { // End date set
840 QDate rEnd = event->recurrence()->endDate(); 825 QDate rEnd = event->recurrence()->endDate();
841 if ( rEnd >= start && rEnd <= end ) { // End date within range 826 if ( rEnd >= start && rEnd <= end ) { // End date within range
842 found = true; 827 found = true;
843 } 828 }
844 } else { // Duration set 829 } else { // Duration set
845 // TODO: Calculate end date from duration. Should be done in Event 830 // TODO: Calculate end date from duration. Should be done in Event
846 // For now include all events with a duration. 831 // For now include all events with a duration.
847 found = true; 832 found = true;
848 } 833 }
849 } 834 }
850 */ 835 */
851 836
852 } 837 }
853 838
854 if ( found ) eventList.append( event ); 839 if ( found ) eventList.append( event );
855 } else { 840 } else {
856 QDate s = event->dtStart().date(); 841 QDate s = event->dtStart().date();
857 QDate e = event->dtEnd().date(); 842 QDate e = event->dtEnd().date();
858 843
859 if ( inclusive ) { 844 if ( inclusive ) {
860 if ( s >= start && e <= end ) { 845 if ( s >= start && e <= end ) {
861 eventList.append( event ); 846 eventList.append( event );
862 } 847 }
863 } else { 848 } else {
864 if ( ( e >= start && s <= end ) ) { 849 if ( ( e >= start && s <= end ) ) {
865 eventList.append( event ); 850 eventList.append( event );
866 } 851 }
867 } 852 }
868 } 853 }
869 } 854 }
870 855
871 return eventList; 856 return eventList;
872} 857}
873 858
874QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 859QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
875{ 860{
876 return rawEventsForDate( qdt.date() ); 861 return rawEventsForDate( qdt.date() );
877} 862}
878 863
879QPtrList<Event> CalendarLocal::rawEvents() 864QPtrList<Event> CalendarLocal::rawEvents()
880{ 865{
881 QPtrList<Event> el; 866 QPtrList<Event> el;
882 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 867 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
883 if ( it->calEnabled() ) el.append( it ); 868 if ( it->calEnabled() ) el.append( it );
884 return el; 869 return el;
885} 870}
886 871
887bool CalendarLocal::addJournal(Journal *journal) 872bool CalendarLocal::addJournal(Journal *journal)
888{ 873{
889 mJournalList.append(journal); 874 mJournalList.append(journal);
890 875
891 journal->registerObserver( this ); 876 journal->registerObserver( this );
892 877
893 setModified( true ); 878 setModified( true );
894 if ( journal->calID() == 0 ) 879 if ( journal->calID() == 0 )
895 journal->setCalID( mDefaultCalendar ); 880 journal->setCalID( mDefaultCalendar );
896 journal->setCalEnabled( true ); 881 journal->setCalEnabled( true );
897 return true; 882 return true;
898} 883}
899 884
900void CalendarLocal::deleteJournal( Journal *journal ) 885void CalendarLocal::deleteJournal( Journal *journal )
901{ 886{
902 clearUndo(); 887 clearUndo(journal);
903 mUndoIncidence = journal;
904 if ( mJournalList.removeRef(journal) ) { 888 if ( mJournalList.removeRef(journal) ) {
905 setModified( true ); 889 setModified( true );
906 } 890 }
907} 891}
908 892
909QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date ) 893QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date )
910{ 894{
911 QPtrList<Journal> el; 895 QPtrList<Journal> el;
912 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 896 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
913 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it ); 897 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it );
914 return el; 898 return el;
915} 899}
916Journal *CalendarLocal::journal( const QDate &date ) 900Journal *CalendarLocal::journal( const QDate &date )
917{ 901{
918// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 902// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
919 903
920 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 904 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
921 if ( it->calEnabled() && it->dtStart().date() == date ) 905 if ( it->calEnabled() && it->dtStart().date() == date )
922 return it; 906 return it;
923 907
924 return 0; 908 return 0;
925} 909}
926 910
927Journal *CalendarLocal::journal( const QString &uid ) 911Journal *CalendarLocal::journal( const QString &uid )
928{ 912{
929 Journal * retVal = 0; 913 Journal * retVal = 0;
930 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 914 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
931 if ( it->calEnabled() && it->uid() == uid ) { 915 if ( it->calEnabled() && it->uid() == uid ) {
932 if ( retVal ) { 916 if ( retVal ) {
933 if ( retVal->calID() > it->calID() ) { 917 if ( retVal->calID() > it->calID() ) {
934 retVal = it; 918 retVal = it;
935 } 919 }
936 } else { 920 } else {
937 retVal = it; 921 retVal = it;
938 } 922 }
939 } 923 }
940 return retVal; 924 return retVal;
941} 925}
942 926
943QPtrList<Journal> CalendarLocal::journals() 927QPtrList<Journal> CalendarLocal::journals()
944{ 928{
945 QPtrList<Journal> el; 929 QPtrList<Journal> el;
946 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 930 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
947 if ( it->calEnabled() ) el.append( it ); 931 if ( it->calEnabled() ) el.append( it );
948 return el; 932 return el;
949} 933}
950void CalendarLocal::setCalendarRemove( int id ) 934void CalendarLocal::setCalendarRemove( int id )
951{ 935{
952 936
953 { 937 {
954 QPtrList<Event> EventList = mEventList; 938 QPtrList<Event> EventList = mEventList;
955 Event * ev = EventList.first(); 939 Event * ev = EventList.first();
956 while ( ev ) { 940 while ( ev ) {
957 if ( ev->calID() == id ) 941 if ( ev->calID() == id )
958 deleteEvent( ev ); 942 deleteEvent( ev );
959 ev = EventList.next(); 943 ev = EventList.next();
960 } 944 }
961 } 945 }
962 { 946 {
963 947
964 QPtrList<Todo> TodoList = mTodoList; 948 QPtrList<Todo> TodoList = mTodoList;
965 Todo * ev = TodoList.first(); 949 Todo * ev = TodoList.first();
966 while ( ev ) { 950 while ( ev ) {
967 if ( ev->calID() == id ) 951 if ( ev->calID() == id )
968 deleteTodo( ev ); 952 deleteTodo( ev );
969 ev = TodoList.next(); 953 ev = TodoList.next();
970 } 954 }
971 } 955 }
972 { 956 {
973 QPtrList<Journal> JournalList = mJournalList; 957 QPtrList<Journal> JournalList = mJournalList;
974 Journal * ev = JournalList.first(); 958 Journal * ev = JournalList.first();
975 while ( ev ) { 959 while ( ev ) {
976 if ( ev->calID() == id ) 960 if ( ev->calID() == id )
977 deleteJournal( ev ); 961 deleteJournal( ev );
978 ev = JournalList.next(); 962 ev = JournalList.next();
979 } 963 }
980 } 964 }
981 965
982 clearUndo(); 966 clearUndo(0);
983 967
984} 968}
985 969
986void CalendarLocal::setCalendarEnabled( int id, bool enable ) 970void CalendarLocal::setCalendarEnabled( int id, bool enable )
987{ 971{
988 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 972 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
989 if ( it->calID() == id ) it->setCalEnabled( enable ); 973 if ( it->calID() == id ) it->setCalEnabled( enable );
990 974
991 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 975 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
992 if ( it->calID() == id ) it->setCalEnabled( enable ); 976 if ( it->calID() == id ) it->setCalEnabled( enable );
993 977
994 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 978 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
995 if ( it->calID() == id ) it->setCalEnabled( enable ); 979 if ( it->calID() == id ) it->setCalEnabled( enable );
996 980
997} 981}
998 982
999void CalendarLocal::setReadOnly( int id, bool enable ) 983void CalendarLocal::setReadOnly( int id, bool enable )
1000{ 984{
1001 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 985 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1002 if ( it->calID() == id ) it->setReadOnly( enable ); 986 if ( it->calID() == id ) it->setReadOnly( enable );
1003 987
1004 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 988 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1005 if ( it->calID() == id ) it->setReadOnly( enable ); 989 if ( it->calID() == id ) it->setReadOnly( enable );
1006 990
1007 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 991 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1008 if ( it->calID() == id ) it->setReadOnly( enable ); 992 if ( it->calID() == id ) it->setReadOnly( enable );
1009 993
1010} 994}
1011 995
1012void CalendarLocal::setAlarmEnabled( int id, bool enable ) 996void CalendarLocal::setAlarmEnabled( int id, bool enable )
1013{ 997{
1014 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 998 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1015 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 999 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1016 1000
1017 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1001 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1018 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1002 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1019 1003
1020 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1004 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1021 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1005 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1022 reInitAlarmSettings(); 1006 reInitAlarmSettings();
1023 1007
1024} 1008}
1025void CalendarLocal::setDefaultCalendarEnabledOnly() 1009void CalendarLocal::setDefaultCalendarEnabledOnly()
1026{ 1010{
1027 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1011 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1028 it->setCalEnabled( it->calID() == mDefaultCalendar ); 1012 it->setCalEnabled( it->calID() == mDefaultCalendar );
1029 1013
1030 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1014 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1031 it->setCalEnabled( it->calID() == mDefaultCalendar); 1015 it->setCalEnabled( it->calID() == mDefaultCalendar);
1032 1016
1033 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1017 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1034 it->setCalEnabled( it->calID() == mDefaultCalendar); 1018 it->setCalEnabled( it->calID() == mDefaultCalendar);
1035 1019
1036} 1020}
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index ae7e30c..a7a85c8 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,168 +1,167 @@
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#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 void addCalendar( Calendar* ); 46 void addCalendar( Calendar* );
47 bool addCalendarFile( QString name, int id ); 47 bool addCalendarFile( QString name, int id );
48 bool mergeCalendarFile( QString name ); 48 bool mergeCalendarFile( QString name );
49 bool mergeCalendar( Calendar* cal ); 49 bool mergeCalendar( Calendar* cal );
50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ); 50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates );
51 void setSyncEventsReadOnly(); 51 void setSyncEventsReadOnly();
52 void stopAllTodos(); 52 void stopAllTodos();
53 /** 53 /**
54 Loads a calendar on disk in vCalendar or iCalendar format into the current 54 Loads a calendar on disk in vCalendar or iCalendar format into the current
55 calendar. Any information already present is lost. 55 calendar. Any information already present is lost.
56 @return true, if successfull, false on error. 56 @return true, if successfull, false on error.
57 @param fileName the name of the calendar on disk. 57 @param fileName the name of the calendar on disk.
58 */ 58 */
59 bool load( const QString &fileName ); 59 bool load( const QString &fileName );
60 /** 60 /**
61 Writes out the calendar to disk in the specified \a format. 61 Writes out the calendar to disk in the specified \a format.
62 CalendarLocal takes ownership of the CalFormat object. 62 CalendarLocal takes ownership of the CalFormat object.
63 @return true, if successfull, false on error. 63 @return true, if successfull, false on error.
64 @param fileName the name of the file 64 @param fileName the name of the file
65 */ 65 */
66 bool save( const QString &fileName, CalFormat *format = 0 ); 66 bool save( const QString &fileName, CalFormat *format = 0 );
67 67
68 /** 68 /**
69 Clears out the current calendar, freeing all used memory etc. etc. 69 Clears out the current calendar, freeing all used memory etc. etc.
70 */ 70 */
71 void close(); 71 void close();
72 void clearUndo();
73 72
74 void save() {} 73 void save() {}
75 74
76 /** 75 /**
77 Add Event to calendar. 76 Add Event to calendar.
78 */ 77 */
79 void removeSyncInfo( QString syncProfile); 78 void removeSyncInfo( QString syncProfile);
80 bool addAnniversaryNoDup( Event *event ); 79 bool addAnniversaryNoDup( Event *event );
81 bool addEventNoDup( Event *event ); 80 bool addEventNoDup( Event *event );
82 bool addEvent( Event *event ); 81 bool addEvent( Event *event );
83 /** 82 /**
84 Deletes an event from this calendar. 83 Deletes an event from this calendar.
85 */ 84 */
86 void deleteEvent( Event *event ); 85 void deleteEvent( Event *event );
87 86
88 /** 87 /**
89 Retrieves an event on the basis of the unique string ID. 88 Retrieves an event on the basis of the unique string ID.
90 */ 89 */
91 Event *event( const QString &uid ); 90 Event *event( const QString &uid );
92 /** 91 /**
93 Return unfiltered list of all events in calendar. 92 Return unfiltered list of all events in calendar.
94 */ 93 */
95 QPtrList<Event> rawEvents(); 94 QPtrList<Event> rawEvents();
96 QPtrList<Event> getExternLastSyncEvents(); 95 QPtrList<Event> getExternLastSyncEvents();
97 /** 96 /**
98 Add a todo to the todolist. 97 Add a todo to the todolist.
99 */ 98 */
100 bool addTodo( Todo *todo ); 99 bool addTodo( Todo *todo );
101 bool addTodoNoDup( Todo *todo ); 100 bool addTodoNoDup( Todo *todo );
102 /** 101 /**
103 Remove a todo from the todolist. 102 Remove a todo from the todolist.
104 */ 103 */
105 void deleteTodo( Todo * ); 104 void deleteTodo( Todo * );
106 /** 105 /**
107 Searches todolist for an event with this unique string identifier, 106 Searches todolist for an event with this unique string identifier,
108 returns a pointer or null. 107 returns a pointer or null.
109 */ 108 */
110 Todo *todo( const QString &uid ); 109 Todo *todo( const QString &uid );
111 /** 110 /**
112 Return list of all todos. 111 Return list of all todos.
113 */ 112 */
114 QPtrList<Todo> rawTodos(); 113 QPtrList<Todo> rawTodos();
115 /** 114 /**
116 Returns list of todos due on the specified date. 115 Returns list of todos due on the specified date.
117 */ 116 */
118 QPtrList<Todo> todos( const QDate &date ); 117 QPtrList<Todo> todos( const QDate &date );
119 /** 118 /**
120 Return list of all todos. 119 Return list of all todos.
121 120
122 Workaround because compiler does not recognize function of base class. 121 Workaround because compiler does not recognize function of base class.
123 */ 122 */
124 QPtrList<Todo> todos() { return Calendar::todos(); } 123 QPtrList<Todo> todos() { return Calendar::todos(); }
125 124
126 /** 125 /**
127 Add a Journal entry to calendar. 126 Add a Journal entry to calendar.
128 */ 127 */
129 bool addJournal( Journal * ); 128 bool addJournal( Journal * );
130 /** 129 /**
131 Remove a Journal from the calendar. 130 Remove a Journal from the calendar.
132 */ 131 */
133 void deleteJournal( Journal * ); 132 void deleteJournal( Journal * );
134 /** 133 /**
135 Return Journal for given date. 134 Return Journal for given date.
136 */ 135 */
137 Journal *journal( const QDate & ); 136 Journal *journal( const QDate & );
138 QPtrList<Journal> journals4Date( const QDate & ); 137 QPtrList<Journal> journals4Date( const QDate & );
139 /** 138 /**
140 Return Journal with given UID. 139 Return Journal with given UID.
141 */ 140 */
142 Journal *journal( const QString &uid ); 141 Journal *journal( const QString &uid );
143 /** 142 /**
144 Return list of all Journals stored in calendar. 143 Return list of all Journals stored in calendar.
145 */ 144 */
146 QPtrList<Journal> journals(); 145 QPtrList<Journal> journals();
147 146
148 /** 147 /**
149 Return all alarms, which ocur in the given time interval. 148 Return all alarms, which ocur in the given time interval.
150 */ 149 */
151 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 150 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
152 151
153 /** 152 /**
154 Return all alarms, which ocur before given date. 153 Return all alarms, which ocur before given date.
155 */ 154 */
156 Alarm::List alarmsTo( const QDateTime &to ); 155 Alarm::List alarmsTo( const QDateTime &to );
157 156
158 QDateTime nextAlarm( int daysTo ) ; 157 QDateTime nextAlarm( int daysTo ) ;
159 QDateTime nextAlarmEventDateTime() const; 158 QDateTime nextAlarmEventDateTime() const;
160 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 159 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
161 void registerAlarm(); 160 void registerAlarm();
162 void deRegisterAlarm(); 161 void deRegisterAlarm();
163 QString getAlarmNotification(); 162 QString getAlarmNotification();
164 QString nextSummary() const ; 163 QString nextSummary() const ;
165 /** 164 /**
166 This method should be called whenever a Event is modified directly 165 This method should be called whenever a Event is modified directly
167 via it's pointer. It makes sure that the calendar is internally 166 via it's pointer. It makes sure that the calendar is internally
168 consistent. 167 consistent.
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 52d94fb..549014e 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -398,193 +398,197 @@ QString Incidence::description() const
398 398
399 399
400void Incidence::setSummary(const QString &summary) 400void Incidence::setSummary(const QString &summary)
401{ 401{
402 if (mReadOnly) return; 402 if (mReadOnly) return;
403 mSummary = summary; 403 mSummary = summary;
404 updated(); 404 updated();
405} 405}
406 406
407QString Incidence::summary() const 407QString Incidence::summary() const
408{ 408{
409 return mSummary; 409 return mSummary;
410} 410}
411void Incidence::checkCategories() 411void Incidence::checkCategories()
412{ 412{
413 mHoliday = mCategories.contains("Holiday") || mCategories.contains(i18n("Holiday")); 413 mHoliday = mCategories.contains("Holiday") || mCategories.contains(i18n("Holiday"));
414 mBirthday = mCategories.contains("Birthday") || mCategories.contains(i18n("Birthday")); 414 mBirthday = mCategories.contains("Birthday") || mCategories.contains(i18n("Birthday"));
415 mAnniversary = mCategories.contains("Anniversary") || mCategories.contains(i18n("Anniversary")); 415 mAnniversary = mCategories.contains("Anniversary") || mCategories.contains(i18n("Anniversary"));
416} 416}
417 417
418void Incidence::addCategories(const QStringList &categories, bool addToRelations ) //addToRelations = false 418void Incidence::addCategories(const QStringList &categories, bool addToRelations ) //addToRelations = false
419{ 419{
420 if (mReadOnly) return; 420 if (mReadOnly) return;
421 int i; 421 int i;
422 for( i = 0; i < categories.count(); ++i ) { 422 for( i = 0; i < categories.count(); ++i ) {
423 if ( !mCategories.contains (categories[i])) 423 if ( !mCategories.contains (categories[i]))
424 mCategories.append( categories[i] ); 424 mCategories.append( categories[i] );
425 } 425 }
426 checkCategories(); 426 checkCategories();
427 updated(); 427 updated();
428 if ( addToRelations ) { 428 if ( addToRelations ) {
429 Incidence * inc; 429 Incidence * inc;
430 QPtrList<Incidence> Relations = relations(); 430 QPtrList<Incidence> Relations = relations();
431 for (inc=Relations.first();inc;inc=Relations.next()) { 431 for (inc=Relations.first();inc;inc=Relations.next()) {
432 inc->addCategories( categories, true ); 432 inc->addCategories( categories, true );
433 } 433 }
434 } 434 }
435} 435}
436 436
437void Incidence::setCategories(const QStringList &categories, bool setForRelations ) //setForRelations = false 437void Incidence::setCategories(const QStringList &categories, bool setForRelations ) //setForRelations = false
438{ 438{
439 if (mReadOnly) return; 439 if (mReadOnly) return;
440 mCategories = categories; 440 mCategories = categories;
441 checkCategories(); 441 checkCategories();
442 updated(); 442 updated();
443 if ( setForRelations ) { 443 if ( setForRelations ) {
444 Incidence * inc; 444 Incidence * inc;
445 QPtrList<Incidence> Relations = relations(); 445 QPtrList<Incidence> Relations = relations();
446 for (inc=Relations.first();inc;inc=Relations.next()) { 446 for (inc=Relations.first();inc;inc=Relations.next()) {
447 inc->setCategories( categories, true ); 447 inc->setCategories( categories, true );
448 } 448 }
449 } 449 }
450} 450}
451 451
452// TODO: remove setCategories(QString) function 452// TODO: remove setCategories(QString) function
453void Incidence::setCategories(const QString &catStr) 453void Incidence::setCategories(const QString &catStr)
454{ 454{
455 if (mReadOnly) return; 455 if (mReadOnly) return;
456 mCategories.clear(); 456 mCategories.clear();
457 457
458 if (catStr.isEmpty()) return; 458 if (catStr.isEmpty()) return;
459 459
460 mCategories = QStringList::split(",",catStr); 460 mCategories = QStringList::split(",",catStr);
461 461
462 QStringList::Iterator it; 462 QStringList::Iterator it;
463 for(it = mCategories.begin();it != mCategories.end(); ++it) { 463 for(it = mCategories.begin();it != mCategories.end(); ++it) {
464 *it = (*it).stripWhiteSpace(); 464 *it = (*it).stripWhiteSpace();
465 } 465 }
466 checkCategories(); 466 checkCategories();
467 updated(); 467 updated();
468} 468}
469// using this makes filtering 3 times faster 469// using this makes filtering 3 times faster
470QStringList* Incidence::categoriesP() 470QStringList* Incidence::categoriesP()
471{ 471{
472 return &mCategories; 472 return &mCategories;
473} 473}
474 474
475QStringList Incidence::categories() const 475QStringList Incidence::categories() const
476{ 476{
477 return mCategories; 477 return mCategories;
478} 478}
479 479
480QString Incidence::categoriesStr() 480QString Incidence::categoriesStr()
481{ 481{
482 return mCategories.join(","); 482 return mCategories.join(",");
483} 483}
484QString Incidence::categoriesStrWithSpace() 484QString Incidence::categoriesStrWithSpace()
485{ 485{
486 return mCategories.join(", "); 486 return mCategories.join(", ");
487} 487}
488 488
489void Incidence::setRelatedToUid(const QString &relatedToUid) 489void Incidence::setRelatedToUid(const QString &relatedToUid)
490{ 490{
491 if (mReadOnly) return; 491 if (mReadOnly) return;
492 mRelatedToUid = relatedToUid; 492 mRelatedToUid = relatedToUid;
493} 493}
494 494void Incidence::clearRelations()
495{
496 mRelatedTo = 0;
497 mRelations.clear();
498}
495QString Incidence::relatedToUid() const 499QString Incidence::relatedToUid() const
496{ 500{
497 return mRelatedToUid; 501 return mRelatedToUid;
498} 502}
499 503
500void Incidence::setRelatedTo(Incidence *relatedTo) 504void Incidence::setRelatedTo(Incidence *relatedTo)
501{ 505{
502 //qDebug("Incidence::setRelatedTo %d ", relatedTo); 506 //qDebug("Incidence::setRelatedTo %d ", relatedTo);
503 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() ); 507 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() );
504 if (mReadOnly || mRelatedTo == relatedTo) return; 508 if (mReadOnly || mRelatedTo == relatedTo) return;
505 if(mRelatedTo) { 509 if(mRelatedTo) {
506 // updated(); 510 // updated();
507 mRelatedTo->removeRelation(this); 511 mRelatedTo->removeRelation(this);
508 } 512 }
509 mRelatedTo = relatedTo; 513 mRelatedTo = relatedTo;
510 if (mRelatedTo) { 514 if (mRelatedTo) {
511 mRelatedTo->addRelation(this); 515 mRelatedTo->addRelation(this);
512 mRelatedToUid = mRelatedTo->uid(); 516 mRelatedToUid = mRelatedTo->uid();
513 } else { 517 } else {
514 mRelatedToUid = ""; 518 mRelatedToUid = "";
515 } 519 }
516} 520}
517 521
518Incidence *Incidence::relatedTo() const 522Incidence *Incidence::relatedTo() const
519{ 523{
520 return mRelatedTo; 524 return mRelatedTo;
521} 525}
522 526
523QPtrList<Incidence> Incidence::relations() const 527QPtrList<Incidence> Incidence::relations() const
524{ 528{
525 return mRelations; 529 return mRelations;
526} 530}
527 531
528void Incidence::addRelationsToList(QPtrList<Incidence> *rel) 532void Incidence::addRelationsToList(QPtrList<Incidence> *rel)
529{ 533{
530 Incidence* inc; 534 Incidence* inc;
531 QPtrList<Incidence> Relations = relations(); 535 QPtrList<Incidence> Relations = relations();
532 for (inc=Relations.first();inc;inc=Relations.next()) { 536 for (inc=Relations.first();inc;inc=Relations.next()) {
533 inc->addRelationsToList( rel ); 537 inc->addRelationsToList( rel );
534 } 538 }
535 if ( rel->findRef( this ) == -1 ) 539 if ( rel->findRef( this ) == -1 )
536 rel->append( this ); 540 rel->append( this );
537} 541}
538 542
539void Incidence::addRelation(Incidence *event) 543void Incidence::addRelation(Incidence *event)
540{ 544{
541 setLastModifiedSubInvalid(); 545 setLastModifiedSubInvalid();
542 if( mRelations.findRef( event ) == -1 ) { 546 if( mRelations.findRef( event ) == -1 ) {
543 mRelations.append(event); 547 mRelations.append(event);
544 //updated(); 548 //updated();
545 } 549 }
546} 550}
547 551
548void Incidence::removeRelation(Incidence *event) 552void Incidence::removeRelation(Incidence *event)
549{ 553{
550 setLastModifiedSubInvalid(); 554 setLastModifiedSubInvalid();
551 mRelations.removeRef(event); 555 mRelations.removeRef(event);
552// if (event->getRelatedTo() == this) event->setRelatedTo(0); 556// if (event->getRelatedTo() == this) event->setRelatedTo(0);
553} 557}
554 558
555bool Incidence::recursOn(const QDate &qd) const 559bool Incidence::recursOn(const QDate &qd) const
556{ 560{
557 if (mRecurrence && mRecurrence->recursOnPure(qd) && !isException(qd)) return true; 561 if (mRecurrence && mRecurrence->recursOnPure(qd) && !isException(qd)) return true;
558 else return false; 562 else return false;
559} 563}
560 564
561void Incidence::setExDates(const DateList &exDates) 565void Incidence::setExDates(const DateList &exDates)
562{ 566{
563 if (mReadOnly) return; 567 if (mReadOnly) return;
564 mExDates = exDates; 568 mExDates = exDates;
565 recurrence()->setRecurExDatesCount(mExDates.count()); 569 recurrence()->setRecurExDatesCount(mExDates.count());
566 570
567 updated(); 571 updated();
568} 572}
569 573
570void Incidence::addExDate(const QDate &date) 574void Incidence::addExDate(const QDate &date)
571{ 575{
572 if (mReadOnly) return; 576 if (mReadOnly) return;
573 mExDates.append(date); 577 mExDates.append(date);
574 578
575 recurrence()->setRecurExDatesCount(mExDates.count()); 579 recurrence()->setRecurExDatesCount(mExDates.count());
576 580
577 updated(); 581 updated();
578} 582}
579 583
580DateList Incidence::exDates() const 584DateList Incidence::exDates() const
581{ 585{
582 return mExDates; 586 return mExDates;
583} 587}
584 588
585bool Incidence::isException(const QDate &date) const 589bool Incidence::isException(const QDate &date) const
586{ 590{
587 DateList::ConstIterator it; 591 DateList::ConstIterator it;
588 for( it = mExDates.begin(); it != mExDates.end(); ++it ) { 592 for( it = mExDates.begin(); it != mExDates.end(); ++it ) {
589 if ( (*it) == date ) { 593 if ( (*it) == date ) {
590 return true; 594 return true;
diff --git a/libkcal/incidence.h b/libkcal/incidence.h
index 88df217..eef9e64 100644
--- a/libkcal/incidence.h
+++ b/libkcal/incidence.h
@@ -21,192 +21,193 @@
21#define INCIDENCE_H 21#define INCIDENCE_H
22// 22//
23// Incidence - base class of calendaring components 23// Incidence - base class of calendaring components
24// 24//
25 25
26#include <qdatetime.h> 26#include <qdatetime.h>
27#include <qstringlist.h> 27#include <qstringlist.h>
28#include <qvaluelist.h> 28#include <qvaluelist.h>
29 29
30#include "recurrence.h" 30#include "recurrence.h"
31#include "alarm.h" 31#include "alarm.h"
32#include "attachment.h" 32#include "attachment.h"
33#include "listbase.h" 33#include "listbase.h"
34#include "incidencebase.h" 34#include "incidencebase.h"
35 35
36namespace KCal { 36namespace KCal {
37 37
38class Event; 38class Event;
39class Todo; 39class Todo;
40class Journal; 40class Journal;
41 41
42/** 42/**
43 This class provides the base class common to all calendar components. 43 This class provides the base class common to all calendar components.
44*/ 44*/
45class Incidence : public IncidenceBase 45class Incidence : public IncidenceBase
46{ 46{
47 public: 47 public:
48 /** 48 /**
49 This class provides the interface for a visitor of calendar components. It 49 This class provides the interface for a visitor of calendar components. It
50 serves as base class for concrete visitors, which implement certain actions on 50 serves as base class for concrete visitors, which implement certain actions on
51 calendar components. It allows to add functions, which operate on the concrete 51 calendar components. It allows to add functions, which operate on the concrete
52 types of calendar components, without changing the calendar component classes. 52 types of calendar components, without changing the calendar component classes.
53 */ 53 */
54 class Visitor 54 class Visitor
55 { 55 {
56 public: 56 public:
57 /** Destruct Incidence::Visitor */ 57 /** Destruct Incidence::Visitor */
58 virtual ~Visitor() {} 58 virtual ~Visitor() {}
59 59
60 /** 60 /**
61 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions 61 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions
62 on an Event object. 62 on an Event object.
63 */ 63 */
64 virtual bool visit(Event *) { return false; } 64 virtual bool visit(Event *) { return false; }
65 /** 65 /**
66 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions 66 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions
67 on an Todo object. 67 on an Todo object.
68 */ 68 */
69 virtual bool visit(Todo *) { return false; } 69 virtual bool visit(Todo *) { return false; }
70 /** 70 /**
71 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions 71 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions
72 on an Journal object. 72 on an Journal object.
73 */ 73 */
74 virtual bool visit(Journal *) { return false; } 74 virtual bool visit(Journal *) { return false; }
75 75
76 protected: 76 protected:
77 /** Constructor is protected to prevent direct creation of visitor base class. */ 77 /** Constructor is protected to prevent direct creation of visitor base class. */
78 Visitor() {} 78 Visitor() {}
79 }; 79 };
80 80
81 /** 81 /**
82 This class implements a visitor for adding an Incidence to a resource 82 This class implements a visitor for adding an Incidence to a resource
83 supporting addEvent(), addTodo() and addJournal() calls. 83 supporting addEvent(), addTodo() and addJournal() calls.
84 */ 84 */
85 template<class T> 85 template<class T>
86 class AddVisitor : public Visitor 86 class AddVisitor : public Visitor
87 { 87 {
88 public: 88 public:
89 AddVisitor( T *r ) : mResource( r ) {} 89 AddVisitor( T *r ) : mResource( r ) {}
90 bool visit( Event *e ) { return mResource->addEvent( e ); } 90 bool visit( Event *e ) { return mResource->addEvent( e ); }
91 bool visit( Todo *t ) { return mResource->addTodo( t ); } 91 bool visit( Todo *t ) { return mResource->addTodo( t ); }
92 bool visit( Journal *j ) { return mResource->addJournal( j ); } 92 bool visit( Journal *j ) { return mResource->addJournal( j ); }
93 93
94 private: 94 private:
95 T *mResource; 95 T *mResource;
96 }; 96 };
97 97
98 /** enumeration for describing an event's secrecy. */ 98 /** enumeration for describing an event's secrecy. */
99 enum { SecrecyPublic = 0, SecrecyPrivate = 1, SecrecyConfidential = 2 }; 99 enum { SecrecyPublic = 0, SecrecyPrivate = 1, SecrecyConfidential = 2 };
100 typedef ListBase<Incidence> List; 100 typedef ListBase<Incidence> List;
101 Incidence(); 101 Incidence();
102 Incidence(const Incidence &); 102 Incidence(const Incidence &);
103 ~Incidence(); 103 ~Incidence();
104 104
105 /** 105 /**
106 Accept IncidenceVisitor. A class taking part in the visitor mechanism has to 106 Accept IncidenceVisitor. A class taking part in the visitor mechanism has to
107 provide this implementation: 107 provide this implementation:
108 <pre> 108 <pre>
109 bool accept(Visitor &v) { return v.visit(this); } 109 bool accept(Visitor &v) { return v.visit(this); }
110 </pre> 110 </pre>
111 */ 111 */
112 virtual bool accept(Visitor &) { return false; } 112 virtual bool accept(Visitor &) { return false; }
113 113
114 virtual Incidence *clone() = 0; 114 virtual Incidence *clone() = 0;
115 virtual void cloneRelations( Incidence * ); 115 virtual void cloneRelations( Incidence * );
116 void addRelationsToList(QPtrList<Incidence> *rel); 116 void addRelationsToList(QPtrList<Incidence> *rel);
117 void clearRelations();
117 virtual QDateTime getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const = 0; 118 virtual QDateTime getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const = 0;
118 void setReadOnly( bool ); 119 void setReadOnly( bool );
119 120
120 /** 121 /**
121 Recreate event. The event is made a new unique event, but already stored 122 Recreate event. The event is made a new unique event, but already stored
122 event information is preserved. Sets uniquie id, creation date, last 123 event information is preserved. Sets uniquie id, creation date, last
123 modification date and revision number. 124 modification date and revision number.
124 */ 125 */
125 void recreate(); 126 void recreate();
126 Incidence* recreateCloneException(QDate); 127 Incidence* recreateCloneException(QDate);
127 128
128 /** set creation date */ 129 /** set creation date */
129 void setCreated(QDateTime); 130 void setCreated(QDateTime);
130 /** return time and date of creation. */ 131 /** return time and date of creation. */
131 QDateTime created() const; 132 QDateTime created() const;
132 133
133 /** set the number of revisions this event has seen */ 134 /** set the number of revisions this event has seen */
134 void setRevision(int rev); 135 void setRevision(int rev);
135 /** return the number of revisions this event has seen */ 136 /** return the number of revisions this event has seen */
136 int revision() const; 137 int revision() const;
137 138
138 /** Set starting date/time. */ 139 /** Set starting date/time. */
139 virtual void setDtStart(const QDateTime &dtStart); 140 virtual void setDtStart(const QDateTime &dtStart);
140 /** Return the incidence's ending date/time as a QDateTime. */ 141 /** Return the incidence's ending date/time as a QDateTime. */
141 virtual QDateTime dtEnd() const { return QDateTime(); } 142 virtual QDateTime dtEnd() const { return QDateTime(); }
142 143
143 /** sets the event's lengthy description. */ 144 /** sets the event's lengthy description. */
144 void setDescription(const QString &description); 145 void setDescription(const QString &description);
145 /** returns a reference to the event's description. */ 146 /** returns a reference to the event's description. */
146 QString description() const; 147 QString description() const;
147 148
148 /** sets the event's short summary. */ 149 /** sets the event's short summary. */
149 void setSummary(const QString &summary); 150 void setSummary(const QString &summary);
150 /** returns a reference to the event's summary. */ 151 /** returns a reference to the event's summary. */
151 QString summary() const; 152 QString summary() const;
152 153
153 /** set event's applicable categories */ 154 /** set event's applicable categories */
154 void setCategories(const QStringList &categories, bool setForRelations = false); 155 void setCategories(const QStringList &categories, bool setForRelations = false);
155 void addCategories(const QStringList &categories, bool addToRelations = false); 156 void addCategories(const QStringList &categories, bool addToRelations = false);
156 /** set event's categories based on a comma delimited string */ 157 /** set event's categories based on a comma delimited string */
157 void setCategories(const QString &catStr); 158 void setCategories(const QString &catStr);
158 /** return categories in a list */ 159 /** return categories in a list */
159 QStringList categories() const; 160 QStringList categories() const;
160 QStringList* categoriesP(); 161 QStringList* categoriesP();
161 /** return categories as a comma separated string */ 162 /** return categories as a comma separated string */
162 QString categoriesStr(); 163 QString categoriesStr();
163 QString categoriesStrWithSpace(); 164 QString categoriesStrWithSpace();
164 165
165 /** point at some other event to which the event relates. This function should 166 /** point at some other event to which the event relates. This function should
166 * only be used when constructing a calendar before the related Event 167 * only be used when constructing a calendar before the related Event
167 * exists. */ 168 * exists. */
168 void setRelatedToUid(const QString &); 169 void setRelatedToUid(const QString &);
169 /** what event does this one relate to? This function should 170 /** what event does this one relate to? This function should
170 * only be used when constructing a calendar before the related Event 171 * only be used when constructing a calendar before the related Event
171 * exists. */ 172 * exists. */
172 QString relatedToUid() const; 173 QString relatedToUid() const;
173 /** point at some other event to which the event relates */ 174 /** point at some other event to which the event relates */
174 void setRelatedTo(Incidence *relatedTo); 175 void setRelatedTo(Incidence *relatedTo);
175 /** what event does this one relate to? */ 176 /** what event does this one relate to? */
176 Incidence *relatedTo() const; 177 Incidence *relatedTo() const;
177 /** All events that are related to this event */ 178 /** All events that are related to this event */
178 QPtrList<Incidence> relations() const; 179 QPtrList<Incidence> relations() const;
179 /** Add an event which is related to this event */ 180 /** Add an event which is related to this event */
180 void addRelation(Incidence *); 181 void addRelation(Incidence *);
181 /** Remove event that is related to this event */ 182 /** Remove event that is related to this event */
182 void removeRelation(Incidence *); 183 void removeRelation(Incidence *);
183 184
184 /** returns the list of dates which are exceptions to the recurrence rule */ 185 /** returns the list of dates which are exceptions to the recurrence rule */
185 DateList exDates() const; 186 DateList exDates() const;
186 /** sets the list of dates which are exceptions to the recurrence rule */ 187 /** sets the list of dates which are exceptions to the recurrence rule */
187 void setExDates(const DateList &_exDates); 188 void setExDates(const DateList &_exDates);
188 void setExDates(const char *dates); 189 void setExDates(const char *dates);
189 /** Add a date to the list of exceptions of the recurrence rule. */ 190 /** Add a date to the list of exceptions of the recurrence rule. */
190 void addExDate(const QDate &date); 191 void addExDate(const QDate &date);
191 192
192 /** returns true if there is an exception for this date in the recurrence 193 /** returns true if there is an exception for this date in the recurrence
193 rule set, or false otherwise. */ 194 rule set, or false otherwise. */
194 bool isException(const QDate &qd) const; 195 bool isException(const QDate &qd) const;
195 196
196 /** add attachment to this event */ 197 /** add attachment to this event */
197 void addAttachment(Attachment *attachment); 198 void addAttachment(Attachment *attachment);
198 /** remove and delete a specific attachment */ 199 /** remove and delete a specific attachment */
199 void deleteAttachment(Attachment *attachment); 200 void deleteAttachment(Attachment *attachment);
200 /** remove and delete all attachments with this mime type */ 201 /** remove and delete all attachments with this mime type */
201 void deleteAttachments(const QString& mime); 202 void deleteAttachments(const QString& mime);
202 /** return list of all associated attachments */ 203 /** return list of all associated attachments */
203 QPtrList<Attachment> attachments() const; 204 QPtrList<Attachment> attachments() const;
204 /** find a list of attachments with this mime type */ 205 /** find a list of attachments with this mime type */
205 QPtrList<Attachment> attachments(const QString& mime) const; 206 QPtrList<Attachment> attachments(const QString& mime) const;
206 207
207 /** sets the event's status the value specified. See the enumeration 208 /** sets the event's status the value specified. See the enumeration
208 * above for possible values. */ 209 * above for possible values. */
209 void setSecrecy(int); 210 void setSecrecy(int);
210 /** return the event's secrecy. */ 211 /** return the event's secrecy. */
211 int secrecy() const; 212 int secrecy() const;
212 /** return the event's secrecy in string format. */ 213 /** return the event's secrecy in string format. */