summaryrefslogtreecommitdiffabout
path: root/libkcal/calendarlocal.cpp
Unidiff
Diffstat (limited to 'libkcal/calendarlocal.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendarlocal.cpp80
1 files changed, 68 insertions, 12 deletions
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index fe74052..c5500bf 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,726 +1,782 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 close(); 68 close();
69} 69}
70 70
71bool CalendarLocal::load( const QString &fileName ) 71bool CalendarLocal::load( const QString &fileName )
72{ 72{
73 FileStorage storage( this, fileName ); 73 FileStorage storage( this, fileName );
74 return storage.load(); 74 return storage.load();
75} 75}
76 76
77bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 77bool CalendarLocal::save( const QString &fileName, CalFormat *format )
78{ 78{
79 FileStorage storage( this, fileName, format ); 79 FileStorage storage( this, fileName, format );
80 return storage.save(); 80 return storage.save();
81} 81}
82 82
83void CalendarLocal::close() 83void CalendarLocal::close()
84{ 84{
85 85
86 Todo * i; 86 Todo * i;
87 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 87 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
88 88
89 mEventList.setAutoDelete( true ); 89 mEventList.setAutoDelete( true );
90 mTodoList.setAutoDelete( true ); 90 mTodoList.setAutoDelete( true );
91 mJournalList.setAutoDelete( false ); 91 mJournalList.setAutoDelete( false );
92 92
93 mEventList.clear(); 93 mEventList.clear();
94 mTodoList.clear(); 94 mTodoList.clear();
95 mJournalList.clear(); 95 mJournalList.clear();
96 96
97 mEventList.setAutoDelete( false ); 97 mEventList.setAutoDelete( false );
98 mTodoList.setAutoDelete( false ); 98 mTodoList.setAutoDelete( false );
99 mJournalList.setAutoDelete( false ); 99 mJournalList.setAutoDelete( false );
100 100
101 setModified( false ); 101 setModified( false );
102} 102}
103 103
104bool CalendarLocal::addAnniversaryNoDup( Event *event ) 104bool CalendarLocal::addAnniversaryNoDup( Event *event )
105{ 105{
106 QString cat; 106 QString cat;
107 bool isBirthday = true; 107 bool isBirthday = true;
108 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 108 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
109 isBirthday = false; 109 isBirthday = false;
110 cat = i18n( "Anniversary" ); 110 cat = i18n( "Anniversary" );
111 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 111 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
112 isBirthday = true; 112 isBirthday = true;
113 cat = i18n( "Birthday" ); 113 cat = i18n( "Birthday" );
114 } else { 114 } else {
115 qDebug("addAnniversaryNoDup called without fitting category! "); 115 qDebug("addAnniversaryNoDup called without fitting category! ");
116 return false; 116 return false;
117 } 117 }
118 Event * eve; 118 Event * eve;
119 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 119 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
120 if ( !(eve->categories().contains( cat ) )) 120 if ( !(eve->categories().contains( cat ) ))
121 continue; 121 continue;
122 // now we have an event with fitting category 122 // now we have an event with fitting category
123 if ( eve->dtStart().date() != event->dtStart().date() ) 123 if ( eve->dtStart().date() != event->dtStart().date() )
124 continue; 124 continue;
125 // now we have an event with fitting category+date 125 // now we have an event with fitting category+date
126 if ( eve->summary() != event->summary() ) 126 if ( eve->summary() != event->summary() )
127 continue; 127 continue;
128 // now we have an event with fitting category+date+summary 128 // now we have an event with fitting category+date+summary
129 return false; 129 return false;
130 } 130 }
131 return addEvent( event ); 131 return addEvent( event );
132 132
133} 133}
134bool CalendarLocal::addEventNoDup( Event *event ) 134bool CalendarLocal::addEventNoDup( Event *event )
135{ 135{
136 Event * eve; 136 Event * eve;
137 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 137 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
138 if ( *eve == *event ) { 138 if ( *eve == *event ) {
139 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 139 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
140 return false; 140 return false;
141 } 141 }
142 } 142 }
143 return addEvent( event ); 143 return addEvent( event );
144} 144}
145 145
146bool CalendarLocal::addEvent( Event *event ) 146bool CalendarLocal::addEvent( Event *event )
147{ 147{
148 insertEvent( event ); 148 insertEvent( event );
149 149
150 event->registerObserver( this ); 150 event->registerObserver( this );
151 151
152 setModified( true ); 152 setModified( true );
153 event->setCalID( mDefaultCalendar );
154 event->setCalEnabled( true );
153 155
154 return true; 156 return true;
155} 157}
156 158
157void CalendarLocal::deleteEvent( Event *event ) 159void CalendarLocal::deleteEvent( Event *event )
158{ 160{
159 if ( mUndoIncidence ) delete mUndoIncidence; 161 if ( mUndoIncidence ) delete mUndoIncidence;
160 mUndoIncidence = event->clone(); 162 mUndoIncidence = event->clone();
161 if ( mEventList.removeRef( event ) ) { 163 if ( mEventList.removeRef( event ) ) {
162 setModified( true ); 164 setModified( true );
163 } 165 }
164} 166}
165 167
166 168
167Event *CalendarLocal::event( const QString &uid ) 169Event *CalendarLocal::event( const QString &uid )
168{ 170{
169 171
170 Event *event; 172 Event *event;
171 173
172 for ( event = mEventList.first(); event; event = mEventList.next() ) { 174 for ( event = mEventList.first(); event; event = mEventList.next() ) {
173 if ( event->uid() == uid ) { 175 if ( event->uid() == uid && event->calEnabled() ) {
174 return event; 176 return event;
175 } 177 }
176 } 178 }
177 179
178 return 0; 180 return 0;
179} 181}
180bool CalendarLocal::addTodoNoDup( Todo *todo ) 182bool CalendarLocal::addTodoNoDup( Todo *todo )
181{ 183{
182 Todo * eve; 184 Todo * eve;
183 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 185 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
184 if ( *eve == *todo ) { 186 if ( *eve == *todo ) {
185 //qDebug("duplicate todo found! not inserted! "); 187 //qDebug("duplicate todo found! not inserted! ");
186 return false; 188 return false;
187 } 189 }
188 } 190 }
189 return addTodo( todo ); 191 return addTodo( todo );
190} 192}
191bool CalendarLocal::addTodo( Todo *todo ) 193bool CalendarLocal::addTodo( Todo *todo )
192{ 194{
193 mTodoList.append( todo ); 195 mTodoList.append( todo );
194 196
195 todo->registerObserver( this ); 197 todo->registerObserver( this );
196 198
197 // Set up subtask relations 199 // Set up subtask relations
198 setupRelations( todo ); 200 setupRelations( todo );
199 201
200 setModified( true ); 202 setModified( true );
201 203 todo->setCalID( mDefaultCalendar );
204 todo->setCalEnabled( true );
202 return true; 205 return true;
203} 206}
204 207
205void CalendarLocal::deleteTodo( Todo *todo ) 208void CalendarLocal::deleteTodo( Todo *todo )
206{ 209{
207 // Handle orphaned children 210 // Handle orphaned children
208 if ( mUndoIncidence ) delete mUndoIncidence; 211 if ( mUndoIncidence ) delete mUndoIncidence;
209 removeRelations( todo ); 212 removeRelations( todo );
210 mUndoIncidence = todo->clone(); 213 mUndoIncidence = todo->clone();
211 214
212 if ( mTodoList.removeRef( todo ) ) { 215 if ( mTodoList.removeRef( todo ) ) {
213 setModified( true ); 216 setModified( true );
214 } 217 }
215} 218}
216 219
217QPtrList<Todo> CalendarLocal::rawTodos() 220QPtrList<Todo> CalendarLocal::rawTodos()
218{ 221{
219 return mTodoList; 222 QPtrList<Todo> el;
223 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
224 if ( it->calEnabled() ) el.append( it );
225 return el;
220} 226}
221Todo *CalendarLocal::todo( QString syncProf, QString id ) 227Todo *CalendarLocal::todo( QString syncProf, QString id )
222{ 228{
223 Todo *todo; 229 Todo *todo;
224 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 230 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
225 if ( todo->getID( syncProf ) == id ) return todo; 231 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
226 } 232 }
227 233
228 return 0; 234 return 0;
229} 235}
230void CalendarLocal::removeSyncInfo( QString syncProfile) 236void CalendarLocal::removeSyncInfo( QString syncProfile)
231{ 237{
232 QPtrList<Incidence> all = rawIncidences() ; 238 QPtrList<Incidence> all = rawIncidences() ;
233 Incidence *inc; 239 Incidence *inc;
234 for ( inc = all.first(); inc; inc = all.next() ) { 240 for ( inc = all.first(); inc; inc = all.next() ) {
235 inc->removeID( syncProfile ); 241 inc->removeID( syncProfile );
236 } 242 }
237 if ( syncProfile.isEmpty() ) { 243 if ( syncProfile.isEmpty() ) {
238 QPtrList<Event> el; 244 QPtrList<Event> el;
239 Event *todo; 245 Event *todo;
240 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 246 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
241 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 247 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
242 el.append( todo ); 248 el.append( todo );
243 } 249 }
244 for ( todo = el.first(); todo; todo = el.next() ) { 250 for ( todo = el.first(); todo; todo = el.next() ) {
245 deleteIncidence ( todo ); 251 deleteIncidence ( todo );
246 } 252 }
247 } else { 253 } else {
248 Event *lse = event( "last-syncEvent-"+ syncProfile); 254 Event *lse = event( "last-syncEvent-"+ syncProfile);
249 if ( lse ) 255 if ( lse )
250 deleteIncidence ( lse ); 256 deleteIncidence ( lse );
251 } 257 }
252} 258}
253QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 259QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
254{ 260{
255 QPtrList<Event> el; 261 QPtrList<Event> el;
256 Event *todo; 262 Event *todo;
257 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 263 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
258 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 264 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
259 if ( todo->summary().left(3) == "E: " ) 265 if ( todo->summary().left(3) == "E: " )
260 el.append( todo ); 266 el.append( todo );
261 } 267 }
262 268
263 return el; 269 return el;
264 270
265} 271}
266Event *CalendarLocal::event( QString syncProf, QString id ) 272Event *CalendarLocal::event( QString syncProf, QString id )
267{ 273{
268 Event *todo; 274 Event *todo;
269 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 275 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
270 if ( todo->getID( syncProf ) == id ) return todo; 276 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
271 } 277 }
272 278
273 return 0; 279 return 0;
274} 280}
275Todo *CalendarLocal::todo( const QString &uid ) 281Todo *CalendarLocal::todo( const QString &uid )
276{ 282{
277 Todo *todo; 283 Todo *todo;
278 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 284 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
279 if ( todo->uid() == uid ) return todo; 285 if ( todo->calEnabled() && todo->uid() == uid ) return todo;
280 } 286 }
281 287
282 return 0; 288 return 0;
283} 289}
284QString CalendarLocal::nextSummary() const 290QString CalendarLocal::nextSummary() const
285{ 291{
286 return mNextSummary; 292 return mNextSummary;
287} 293}
288QDateTime CalendarLocal::nextAlarmEventDateTime() const 294QDateTime CalendarLocal::nextAlarmEventDateTime() const
289{ 295{
290 return mNextAlarmEventDateTime; 296 return mNextAlarmEventDateTime;
291} 297}
292void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 298void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
293{ 299{
294 //mNextAlarmIncidence 300 //mNextAlarmIncidence
295 //mNextAlarmDateTime 301 //mNextAlarmDateTime
296 //return mNextSummary; 302 //return mNextSummary;
297 //return mNextAlarmEventDateTime; 303 //return mNextAlarmEventDateTime;
298 bool newNextAlarm = false; 304 bool newNextAlarm = false;
299 bool computeNextAlarm = false; 305 bool computeNextAlarm = false;
300 bool ok; 306 bool ok;
301 int offset; 307 int offset;
302 QDateTime nextA; 308 QDateTime nextA;
303 // QString nextSum; 309 // QString nextSum;
304 //QDateTime nextEvent; 310 //QDateTime nextEvent;
305 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 311 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
306 computeNextAlarm = true; 312 computeNextAlarm = true;
307 } else { 313 } else {
308 if ( ! deleted ) { 314 if ( ! deleted ) {
309 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 315 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
310 if ( ok ) { 316 if ( ok ) {
311 if ( nextA < mNextAlarmDateTime ) { 317 if ( nextA < mNextAlarmDateTime ) {
312 deRegisterAlarm(); 318 deRegisterAlarm();
313 mNextAlarmDateTime = nextA; 319 mNextAlarmDateTime = nextA;
314 mNextSummary = incidence->summary(); 320 mNextSummary = incidence->summary();
315 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 321 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
316 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 322 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
317 newNextAlarm = true; 323 newNextAlarm = true;
318 mNextAlarmIncidence = incidence; 324 mNextAlarmIncidence = incidence;
319 } else { 325 } else {
320 if ( incidence == mNextAlarmIncidence ) { 326 if ( incidence == mNextAlarmIncidence ) {
321 computeNextAlarm = true; 327 computeNextAlarm = true;
322 } 328 }
323 } 329 }
324 } else { 330 } else {
325 if ( mNextAlarmIncidence == incidence ) { 331 if ( mNextAlarmIncidence == incidence ) {
326 computeNextAlarm = true; 332 computeNextAlarm = true;
327 } 333 }
328 } 334 }
329 } else { // deleted 335 } else { // deleted
330 if ( incidence == mNextAlarmIncidence ) { 336 if ( incidence == mNextAlarmIncidence ) {
331 computeNextAlarm = true; 337 computeNextAlarm = true;
332 } 338 }
333 } 339 }
334 } 340 }
335 if ( computeNextAlarm ) { 341 if ( computeNextAlarm ) {
336 deRegisterAlarm(); 342 deRegisterAlarm();
337 nextA = nextAlarm( 1000 ); 343 nextA = nextAlarm( 1000 );
338 if (! mNextAlarmIncidence ) { 344 if (! mNextAlarmIncidence ) {
339 return; 345 return;
340 } 346 }
341 newNextAlarm = true; 347 newNextAlarm = true;
342 } 348 }
343 if ( newNextAlarm ) 349 if ( newNextAlarm )
344 registerAlarm(); 350 registerAlarm();
345} 351}
346QString CalendarLocal:: getAlarmNotification() 352QString CalendarLocal:: getAlarmNotification()
347{ 353{
348 QString ret; 354 QString ret;
349 // this should not happen 355 // this should not happen
350 if (! mNextAlarmIncidence ) 356 if (! mNextAlarmIncidence )
351 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 357 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
352 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 358 Alarm* alarm = mNextAlarmIncidence->alarms().first();
353 if ( alarm->type() == Alarm::Procedure ) { 359 if ( alarm->type() == Alarm::Procedure ) {
354 ret = "proc_alarm" + alarm->programFile()+"+++"; 360 ret = "proc_alarm" + alarm->programFile()+"+++";
355 } else { 361 } else {
356 ret = "audio_alarm" +alarm->audioFile() +"+++"; 362 ret = "audio_alarm" +alarm->audioFile() +"+++";
357 } 363 }
358 ret += "cal_alarm"+ mNextSummary.left( 25 ); 364 ret += "cal_alarm"+ mNextSummary.left( 25 );
359 if ( mNextSummary.length() > 25 ) 365 if ( mNextSummary.length() > 25 )
360 ret += "\n" + mNextSummary.mid(25, 25 ); 366 ret += "\n" + mNextSummary.mid(25, 25 );
361 ret+= "\n"+mNextAlarmEventDateTimeString; 367 ret+= "\n"+mNextAlarmEventDateTimeString;
362 return ret; 368 return ret;
363} 369}
364void CalendarLocal::registerAlarm() 370void CalendarLocal::registerAlarm()
365{ 371{
366 mLastAlarmNotificationString = getAlarmNotification(); 372 mLastAlarmNotificationString = getAlarmNotification();
367 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 373 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
368 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 374 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
369// #ifndef DESKTOP_VERSION 375// #ifndef DESKTOP_VERSION
370// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 376// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
371// #endif 377// #endif
372} 378}
373void CalendarLocal::deRegisterAlarm() 379void CalendarLocal::deRegisterAlarm()
374{ 380{
375 if ( mLastAlarmNotificationString.isNull() ) 381 if ( mLastAlarmNotificationString.isNull() )
376 return; 382 return;
377 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 383 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
378 384
379 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 385 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
380 mNextAlarmEventDateTime = QDateTime(); 386 mNextAlarmEventDateTime = QDateTime();
381// #ifndef DESKTOP_VERSION 387// #ifndef DESKTOP_VERSION
382// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 388// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
383// #endif 389// #endif
384} 390}
385 391
386QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 392QPtrList<Todo> CalendarLocal::todos( const QDate &date )
387{ 393{
388 QPtrList<Todo> todos; 394 QPtrList<Todo> todos;
389 395
390 Todo *todo; 396 Todo *todo;
391 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 397 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
398 if ( !todo->calEnabled() ) continue;
392 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 399 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
393 todos.append( todo ); 400 todos.append( todo );
394 } 401 }
395 } 402 }
396 403
397 filter()->apply( &todos ); 404 filter()->apply( &todos );
398 return todos; 405 return todos;
399} 406}
400void CalendarLocal::reInitAlarmSettings() 407void CalendarLocal::reInitAlarmSettings()
401{ 408{
402 if ( !mNextAlarmIncidence ) { 409 if ( !mNextAlarmIncidence ) {
403 nextAlarm( 1000 ); 410 nextAlarm( 1000 );
404 } 411 }
405 deRegisterAlarm(); 412 deRegisterAlarm();
406 mNextAlarmIncidence = 0; 413 mNextAlarmIncidence = 0;
407 checkAlarmForIncidence( 0, false ); 414 checkAlarmForIncidence( 0, false );
408 415
409} 416}
410 417
411 418
412 419
413QDateTime CalendarLocal::nextAlarm( int daysTo ) 420QDateTime CalendarLocal::nextAlarm( int daysTo )
414{ 421{
415 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 422 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
416 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 423 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
417 QDateTime next; 424 QDateTime next;
418 Event *e; 425 Event *e;
419 bool ok; 426 bool ok;
420 bool found = false; 427 bool found = false;
421 int offset; 428 int offset;
422 mNextAlarmIncidence = 0; 429 mNextAlarmIncidence = 0;
423 for( e = mEventList.first(); e; e = mEventList.next() ) { 430 for( e = mEventList.first(); e; e = mEventList.next() ) {
431 if ( !e->calEnabled() ) continue;
424 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 432 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
425 if ( ok ) { 433 if ( ok ) {
426 if ( next < nextA ) { 434 if ( next < nextA ) {
427 nextA = next; 435 nextA = next;
428 found = true; 436 found = true;
429 mNextSummary = e->summary(); 437 mNextSummary = e->summary();
430 mNextAlarmEventDateTime = next.addSecs(offset ) ; 438 mNextAlarmEventDateTime = next.addSecs(offset ) ;
431 mNextAlarmIncidence = (Incidence *) e; 439 mNextAlarmIncidence = (Incidence *) e;
432 } 440 }
433 } 441 }
434 } 442 }
435 Todo *t; 443 Todo *t;
436 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 444 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
445 if ( !t->calEnabled() ) continue;
437 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 446 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
438 if ( ok ) { 447 if ( ok ) {
439 if ( next < nextA ) { 448 if ( next < nextA ) {
440 nextA = next; 449 nextA = next;
441 found = true; 450 found = true;
442 mNextSummary = t->summary(); 451 mNextSummary = t->summary();
443 mNextAlarmEventDateTime = next.addSecs(offset ); 452 mNextAlarmEventDateTime = next.addSecs(offset );
444 mNextAlarmIncidence = (Incidence *) t; 453 mNextAlarmIncidence = (Incidence *) t;
445 } 454 }
446 } 455 }
447 } 456 }
448 if ( mNextAlarmIncidence ) { 457 if ( mNextAlarmIncidence ) {
449 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 458 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
450 mNextAlarmDateTime = nextA; 459 mNextAlarmDateTime = nextA;
451 } 460 }
452 return nextA; 461 return nextA;
453} 462}
454Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 463Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
455{ 464{
456 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 465 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
457} 466}
458 467
459Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 468Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
460{ 469{
461 470
462 Alarm::List alarms; 471 Alarm::List alarms;
463 472
464 Event *e; 473 Event *e;
465 474
466 for( e = mEventList.first(); e; e = mEventList.next() ) { 475 for( e = mEventList.first(); e; e = mEventList.next() ) {
476 if ( !e->calEnabled() ) continue;
467 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 477 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
468 else appendAlarms( alarms, e, from, to ); 478 else appendAlarms( alarms, e, from, to );
469 } 479 }
470 480
471 Todo *t; 481 Todo *t;
472 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 482 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
473 appendAlarms( alarms, t, from, to ); 483 if ( !t->calEnabled() ) continue;
484 appendAlarms( alarms, t, from, to );
474 } 485 }
475 486
476 return alarms; 487 return alarms;
477} 488}
478 489
479void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 490void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
480 const QDateTime &from, const QDateTime &to ) 491 const QDateTime &from, const QDateTime &to )
481{ 492{
482 QPtrList<Alarm> alarmList = incidence->alarms(); 493 QPtrList<Alarm> alarmList = incidence->alarms();
483 Alarm *alarm; 494 Alarm *alarm;
484 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 495 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
485// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 496// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
486// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 497// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
487 if ( alarm->enabled() ) { 498 if ( alarm->enabled() ) {
488 if ( alarm->time() >= from && alarm->time() <= to ) { 499 if ( alarm->time() >= from && alarm->time() <= to ) {
489 alarms.append( alarm ); 500 alarms.append( alarm );
490 } 501 }
491 } 502 }
492 } 503 }
493} 504}
494 505
495void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 506void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
496 Incidence *incidence, 507 Incidence *incidence,
497 const QDateTime &from, 508 const QDateTime &from,
498 const QDateTime &to ) 509 const QDateTime &to )
499{ 510{
500 511
501 QPtrList<Alarm> alarmList = incidence->alarms(); 512 QPtrList<Alarm> alarmList = incidence->alarms();
502 Alarm *alarm; 513 Alarm *alarm;
503 QDateTime qdt; 514 QDateTime qdt;
504 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 515 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
505 if (incidence->recursOn(from.date())) { 516 if (incidence->recursOn(from.date())) {
506 qdt.setTime(alarm->time().time()); 517 qdt.setTime(alarm->time().time());
507 qdt.setDate(from.date()); 518 qdt.setDate(from.date());
508 } 519 }
509 else qdt = alarm->time(); 520 else qdt = alarm->time();
510 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 521 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
511 if ( alarm->enabled() ) { 522 if ( alarm->enabled() ) {
512 if ( qdt >= from && qdt <= to ) { 523 if ( qdt >= from && qdt <= to ) {
513 alarms.append( alarm ); 524 alarms.append( alarm );
514 } 525 }
515 } 526 }
516 } 527 }
517} 528}
518 529
519 530
520/****************************** PROTECTED METHODS ****************************/ 531/****************************** PROTECTED METHODS ****************************/
521 532
522// after changes are made to an event, this should be called. 533// after changes are made to an event, this should be called.
523void CalendarLocal::update( IncidenceBase *incidence ) 534void CalendarLocal::update( IncidenceBase *incidence )
524{ 535{
525 incidence->setSyncStatus( Event::SYNCMOD ); 536 incidence->setSyncStatus( Event::SYNCMOD );
526 incidence->setLastModified( QDateTime::currentDateTime() ); 537 incidence->setLastModified( QDateTime::currentDateTime() );
527 // we should probably update the revision number here, 538 // we should probably update the revision number here,
528 // or internally in the Event itself when certain things change. 539 // or internally in the Event itself when certain things change.
529 // need to verify with ical documentation. 540 // need to verify with ical documentation.
530 541
531 setModified( true ); 542 setModified( true );
532} 543}
533 544
534void CalendarLocal::insertEvent( Event *event ) 545void CalendarLocal::insertEvent( Event *event )
535{ 546{
536 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 547 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
537} 548}
538 549
539 550
540QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 551QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
541{ 552{
542 QPtrList<Event> eventList; 553 QPtrList<Event> eventList;
543 554
544 Event *event; 555 Event *event;
545 for( event = mEventList.first(); event; event = mEventList.next() ) { 556 for( event = mEventList.first(); event; event = mEventList.next() ) {
557 if ( !event->calEnabled() ) continue;
546 if ( event->doesRecur() ) { 558 if ( event->doesRecur() ) {
547 if ( event->isMultiDay() ) { 559 if ( event->isMultiDay() ) {
548 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 560 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
549 int i; 561 int i;
550 for ( i = 0; i <= extraDays; i++ ) { 562 for ( i = 0; i <= extraDays; i++ ) {
551 if ( event->recursOn( qd.addDays( -i ) ) ) { 563 if ( event->recursOn( qd.addDays( -i ) ) ) {
552 eventList.append( event ); 564 eventList.append( event );
553 break; 565 break;
554 } 566 }
555 } 567 }
556 } else { 568 } else {
557 if ( event->recursOn( qd ) ) 569 if ( event->recursOn( qd ) )
558 eventList.append( event ); 570 eventList.append( event );
559 } 571 }
560 } else { 572 } else {
561 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 573 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
562 eventList.append( event ); 574 eventList.append( event );
563 } 575 }
564 } 576 }
565 } 577 }
566 578
567 if ( !sorted ) { 579 if ( !sorted ) {
568 return eventList; 580 return eventList;
569 } 581 }
570 582
571 // kdDebug(5800) << "Sorting events for date\n" << endl; 583 // kdDebug(5800) << "Sorting events for date\n" << endl;
572 // now, we have to sort it based on dtStart.time() 584 // now, we have to sort it based on dtStart.time()
573 QPtrList<Event> eventListSorted; 585 QPtrList<Event> eventListSorted;
574 Event *sortEvent; 586 Event *sortEvent;
575 for ( event = eventList.first(); event; event = eventList.next() ) { 587 for ( event = eventList.first(); event; event = eventList.next() ) {
576 sortEvent = eventListSorted.first(); 588 sortEvent = eventListSorted.first();
577 int i = 0; 589 int i = 0;
578 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 590 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
579 { 591 {
580 i++; 592 i++;
581 sortEvent = eventListSorted.next(); 593 sortEvent = eventListSorted.next();
582 } 594 }
583 eventListSorted.insert( i, event ); 595 eventListSorted.insert( i, event );
584 } 596 }
585 return eventListSorted; 597 return eventListSorted;
586} 598}
587 599
588 600
589QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 601QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
590 bool inclusive ) 602 bool inclusive )
591{ 603{
592 Event *event = 0; 604 Event *event = 0;
593 605
594 QPtrList<Event> eventList; 606 QPtrList<Event> eventList;
595 607
596 // Get non-recurring events 608 // Get non-recurring events
597 for( event = mEventList.first(); event; event = mEventList.next() ) { 609 for( event = mEventList.first(); event; event = mEventList.next() ) {
610 if ( !event->calEnabled() ) continue;
598 if ( event->doesRecur() ) { 611 if ( event->doesRecur() ) {
599 QDate rStart = event->dtStart().date(); 612 QDate rStart = event->dtStart().date();
600 bool found = false; 613 bool found = false;
601 if ( inclusive ) { 614 if ( inclusive ) {
602 if ( rStart >= start && rStart <= end ) { 615 if ( rStart >= start && rStart <= end ) {
603 // Start date of event is in range. Now check for end date. 616 // Start date of event is in range. Now check for end date.
604 // if duration is negative, event recurs forever, so do not include it. 617 // if duration is negative, event recurs forever, so do not include it.
605 if ( event->recurrence()->duration() == 0 ) { // End date set 618 if ( event->recurrence()->duration() == 0 ) { // End date set
606 QDate rEnd = event->recurrence()->endDate(); 619 QDate rEnd = event->recurrence()->endDate();
607 if ( rEnd >= start && rEnd <= end ) { // End date within range 620 if ( rEnd >= start && rEnd <= end ) { // End date within range
608 found = true; 621 found = true;
609 } 622 }
610 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 623 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
611 // TODO: Calculate end date from duration. Should be done in Event 624 // TODO: Calculate end date from duration. Should be done in Event
612 // For now exclude all events with a duration. 625 // For now exclude all events with a duration.
613 } 626 }
614 } 627 }
615 } else { 628 } else {
616 bool founOne; 629 bool founOne;
617 QDate next = event->getNextOccurence( start, &founOne ).date(); 630 QDate next = event->getNextOccurence( start, &founOne ).date();
618 if ( founOne ) { 631 if ( founOne ) {
619 if ( next <= end ) { 632 if ( next <= end ) {
620 found = true; 633 found = true;
621 } 634 }
622 } 635 }
623 636
624 /* 637 /*
625 // crap !!! 638 // crap !!!
626 if ( rStart <= end ) { // Start date not after range 639 if ( rStart <= end ) { // Start date not after range
627 if ( rStart >= start ) { // Start date within range 640 if ( rStart >= start ) { // Start date within range
628 found = true; 641 found = true;
629 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 642 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
630 found = true; 643 found = true;
631 } else if ( event->recurrence()->duration() == 0 ) { // End date set 644 } else if ( event->recurrence()->duration() == 0 ) { // End date set
632 QDate rEnd = event->recurrence()->endDate(); 645 QDate rEnd = event->recurrence()->endDate();
633 if ( rEnd >= start && rEnd <= end ) { // End date within range 646 if ( rEnd >= start && rEnd <= end ) { // End date within range
634 found = true; 647 found = true;
635 } 648 }
636 } else { // Duration set 649 } else { // Duration set
637 // TODO: Calculate end date from duration. Should be done in Event 650 // TODO: Calculate end date from duration. Should be done in Event
638 // For now include all events with a duration. 651 // For now include all events with a duration.
639 found = true; 652 found = true;
640 } 653 }
641 } 654 }
642 */ 655 */
643 656
644 } 657 }
645 658
646 if ( found ) eventList.append( event ); 659 if ( found ) eventList.append( event );
647 } else { 660 } else {
648 QDate s = event->dtStart().date(); 661 QDate s = event->dtStart().date();
649 QDate e = event->dtEnd().date(); 662 QDate e = event->dtEnd().date();
650 663
651 if ( inclusive ) { 664 if ( inclusive ) {
652 if ( s >= start && e <= end ) { 665 if ( s >= start && e <= end ) {
653 eventList.append( event ); 666 eventList.append( event );
654 } 667 }
655 } else { 668 } else {
656 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { 669 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) {
657 eventList.append( event ); 670 eventList.append( event );
658 } 671 }
659 } 672 }
660 } 673 }
661 } 674 }
662 675
663 return eventList; 676 return eventList;
664} 677}
665 678
666QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 679QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
667{ 680{
668 return rawEventsForDate( qdt.date() ); 681 return rawEventsForDate( qdt.date() );
669} 682}
670 683
671QPtrList<Event> CalendarLocal::rawEvents() 684QPtrList<Event> CalendarLocal::rawEvents()
672{ 685{
673 return mEventList; 686 QPtrList<Event> el;
687 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
688 if ( it->calEnabled() ) el.append( it );
689 return el;
674} 690}
675 691
676bool CalendarLocal::addJournal(Journal *journal) 692bool CalendarLocal::addJournal(Journal *journal)
677{ 693{
678 if ( journal->dtStart().isValid()) 694 if ( journal->dtStart().isValid())
679 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; 695 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl;
680 else 696 else
681 kdDebug(5800) << "Adding Journal without a DTSTART" << endl; 697 kdDebug(5800) << "Adding Journal without a DTSTART" << endl;
682 698
683 mJournalList.append(journal); 699 mJournalList.append(journal);
684 700
685 journal->registerObserver( this ); 701 journal->registerObserver( this );
686 702
687 setModified( true ); 703 setModified( true );
688 704 journal->setCalID( mDefaultCalendar );
705 journal->setCalEnabled( true );
689 return true; 706 return true;
690} 707}
691 708
692void CalendarLocal::deleteJournal( Journal *journal ) 709void CalendarLocal::deleteJournal( Journal *journal )
693{ 710{
694 if ( mUndoIncidence ) delete mUndoIncidence; 711 if ( mUndoIncidence ) delete mUndoIncidence;
695 mUndoIncidence = journal->clone(); 712 mUndoIncidence = journal->clone();
696 mUndoIncidence->setSummary( mUndoIncidence->description().left(25)); 713 mUndoIncidence->setSummary( mUndoIncidence->description().left(25));
697 if ( mJournalList.removeRef(journal) ) { 714 if ( mJournalList.removeRef(journal) ) {
698 setModified( true ); 715 setModified( true );
699 } 716 }
700} 717}
701 718
702Journal *CalendarLocal::journal( const QDate &date ) 719Journal *CalendarLocal::journal( const QDate &date )
703{ 720{
704// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 721// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
705 722
706 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 723 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
707 if ( it->dtStart().date() == date ) 724 if ( it->calEnabled() && it->dtStart().date() == date )
708 return it; 725 return it;
709 726
710 return 0; 727 return 0;
711} 728}
712 729
713Journal *CalendarLocal::journal( const QString &uid ) 730Journal *CalendarLocal::journal( const QString &uid )
714{ 731{
715 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 732 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
716 if ( it->uid() == uid ) 733 if ( it->calEnabled() && it->uid() == uid )
717 return it; 734 return it;
718 735
719 return 0; 736 return 0;
720} 737}
721 738
722QPtrList<Journal> CalendarLocal::journals() 739QPtrList<Journal> CalendarLocal::journals()
723{ 740{
724 return mJournalList; 741 QPtrList<Journal> el;
742 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
743 if ( it->calEnabled() ) el.append( it );
744 return el;
725} 745}
726 746
747void CalendarLocal::setCalendarEnabled( int id, bool enable )
748{
749 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
750 if ( it->calID() == id ) it->setCalEnabled( enable );
751
752 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
753 if ( it->calID() == id ) it->setCalEnabled( enable );
754
755 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
756 if ( it->calID() == id ) it->setCalEnabled( enable );
757
758}
759void CalendarLocal::setAlarmEnabled( int id, bool enable )
760{
761 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
762 if ( it->calID() == id ) it->setAlarmEnabled( enable );
763
764 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
765 if ( it->calID() == id ) it->setAlarmEnabled( enable );
766
767 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
768 if ( it->calID() == id ) it->setAlarmEnabled( enable );
769
770}
771void CalendarLocal::setDefaultCalendarEnabledOnly()
772{
773 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
774 it->setCalEnabled( it->calID() == mDefaultCalendar );
775
776 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
777 it->setCalEnabled( it->calID() == mDefaultCalendar);
778
779 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
780 it->setCalEnabled( it->calID() == mDefaultCalendar);
781
782}