summaryrefslogtreecommitdiffabout
path: root/libkcal/incidencebase.cpp
Unidiff
Diffstat (limited to 'libkcal/incidencebase.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/incidencebase.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index 7525a4a..51f2e9d 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,419 +1,420 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24#include <kidmanager.h> 24#include <kidmanager.h>
25 25
26#include "calformat.h" 26#include "calformat.h"
27#include "syncdefines.h" 27#include "syncdefines.h"
28 28
29#include "incidencebase.h" 29#include "incidencebase.h"
30 30
31using namespace KCal; 31using namespace KCal;
32 32
33IncidenceBase::IncidenceBase() : 33IncidenceBase::IncidenceBase() :
34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
35 mPilotId(0), mSyncStatus(SYNCMOD) 35 mPilotId(0), mSyncStatus(SYNCMOD)
36{ 36{
37 setUid(CalFormat::createUniqueId()); 37 setUid(CalFormat::createUniqueId());
38 mOrganizer = ""; 38 mOrganizer = "";
39 mFloats = false; 39 mFloats = false;
40 mDuration = 0; 40 mDuration = 0;
41 mHasDuration = false; 41 mHasDuration = false;
42 mPilotId = 0; 42 mPilotId = 0;
43 mExternalId = ":"; 43 mExternalId = ":";
44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
45 mSyncStatus = 0; 45 mSyncStatus = 0;
46 mAttendees.setAutoDelete( true ); 46 mAttendees.setAutoDelete( true );
47} 47}
48 48
49IncidenceBase::IncidenceBase(const IncidenceBase &i) : 49IncidenceBase::IncidenceBase(const IncidenceBase &i) :
50 CustomProperties( i ) 50 CustomProperties( i )
51{ 51{
52 mReadOnly = i.mReadOnly; 52 mReadOnly = i.mReadOnly;
53 mDtStart = i.mDtStart; 53 mDtStart = i.mDtStart;
54 mDuration = i.mDuration; 54 mDuration = i.mDuration;
55 mHasDuration = i.mHasDuration; 55 mHasDuration = i.mHasDuration;
56 mOrganizer = i.mOrganizer; 56 mOrganizer = i.mOrganizer;
57 mUid = i.mUid; 57 mUid = i.mUid;
58 QPtrList<Attendee> attendees = i.attendees(); 58 QPtrList<Attendee> attendees = i.attendees();
59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 59 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
60 mAttendees.append( new Attendee( *a ) ); 60 mAttendees.append( new Attendee( *a ) );
61 } 61 }
62 mFloats = i.mFloats; 62 mFloats = i.mFloats;
63 mLastModified = i.mLastModified; 63 mLastModified = i.mLastModified;
64 mPilotId = i.mPilotId; 64 mPilotId = i.mPilotId;
65 mTempSyncStat = i.mTempSyncStat; 65 mTempSyncStat = i.mTempSyncStat;
66 mSyncStatus = i.mSyncStatus; 66 mSyncStatus = i.mSyncStatus;
67 mExternalId = i.mExternalId; 67 mExternalId = i.mExternalId;
68 // The copied object is a new one, so it isn't observed by the observer 68 // The copied object is a new one, so it isn't observed by the observer
69 // of the original object. 69 // of the original object.
70 mObservers.clear(); 70 mObservers.clear();
71 71
72 mAttendees.setAutoDelete( true ); 72 mAttendees.setAutoDelete( true );
73} 73}
74 74
75IncidenceBase::~IncidenceBase() 75IncidenceBase::~IncidenceBase()
76{ 76{
77} 77}
78 78
79 79
80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) 80bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 )
81{ 81{
82 // do not compare mSyncStatus and mExternalId 82 // do not compare mSyncStatus and mExternalId
83 if( i1.attendees().count() != i2.attendees().count() ) { 83 if( i1.attendees().count() != i2.attendees().count() ) {
84 return false; // no need to check further 84 return false; // no need to check further
85 } 85 }
86 if ( i1.attendees().count() > 0 ) { 86 if ( i1.attendees().count() > 0 ) {
87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; 87 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ;
88 while ( a1 ) { 88 while ( a1 ) {
89 if ( !( (*a1) == (*a2)) ) 89 if ( !( (*a1) == (*a2)) )
90 { 90 {
91 //qDebug("Attendee not equal "); 91 //qDebug("Attendee not equal ");
92 return false; 92 return false;
93 } 93 }
94 a1 = i1.attendees().next(); 94 a1 = i1.attendees().next();
95 a2 = i2.attendees().next(); 95 a2 = i2.attendees().next();
96 } 96 }
97 } 97 }
98 //if ( i1.dtStart() != i2.dtStart() ) 98 //if ( i1.dtStart() != i2.dtStart() )
99 // return false; 99 // return false;
100#if 0 100#if 0
101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); 101 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() );
102 qDebug("1 %d ",i1.duration() == i2.duration() ); 102 qDebug("1 %d ",i1.duration() == i2.duration() );
103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); 103 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() );
104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); 104 qDebug("1 %d ",i1.pilotId() == i2.pilotId() );
105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); 105 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() );
106 qDebug("6 %d ",i1.organizer() == i2.organizer() ); 106 qDebug("6 %d ",i1.organizer() == i2.organizer() );
107 107
108#endif 108#endif
109 return ( i1.organizer() == i2.organizer() && 109 return ( i1.organizer() == i2.organizer() &&
110 // i1.uid() == i2.uid() && 110 // i1.uid() == i2.uid() &&
111 // Don't compare lastModified, otherwise the operator is not 111 // Don't compare lastModified, otherwise the operator is not
112 // of much use. We are not comparing for identity, after all. 112 // of much use. We are not comparing for identity, after all.
113 i1.doesFloat() == i2.doesFloat() && 113 i1.doesFloat() == i2.doesFloat() &&
114 i1.duration() == i2.duration() && 114 i1.duration() == i2.duration() &&
115 i1.hasDuration() == i2.hasDuration() && 115 i1.hasDuration() == i2.hasDuration() &&
116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); 116 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() );
117 // no need to compare mObserver 117 // no need to compare mObserver
118} 118}
119 119
120 120
121QDateTime IncidenceBase::getEvenTime( QDateTime dt ) 121QDateTime IncidenceBase::getEvenTime( QDateTime dt )
122{ 122{
123 QTime t = dt.time(); 123 QTime t = dt.time();
124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 124 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
125 return dt; 125 return dt;
126} 126}
127 127
128 128
129void IncidenceBase::setUid(const QString &uid) 129void IncidenceBase::setUid(const QString &uid)
130{ 130{
131 mUid = uid; 131 mUid = uid;
132 updated(); 132 updated();
133} 133}
134 134
135QString IncidenceBase::uid() const 135QString IncidenceBase::uid() const
136{ 136{
137 return mUid; 137 return mUid;
138} 138}
139 139
140void IncidenceBase::setLastModified(const QDateTime &lm) 140void IncidenceBase::setLastModified(const QDateTime &lm)
141{ 141{
142 // DON'T! updated() because we call this from 142 // DON'T! updated() because we call this from
143 // Calendar::updateEvent(). 143 // Calendar::updateEvent().
144 mLastModified = getEvenTime(lm); 144 mLastModified = getEvenTime(lm);
145 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); 145 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1());
146} 146}
147 147
148QDateTime IncidenceBase::lastModified() const 148QDateTime IncidenceBase::lastModified() const
149{ 149{
150 return mLastModified; 150 return mLastModified;
151} 151}
152 152
153void IncidenceBase::setOrganizer(const QString &o) 153void IncidenceBase::setOrganizer(const QString &o)
154{ 154{
155 // we don't check for readonly here, because it is 155 // we don't check for readonly here, because it is
156 // possible that by setting the organizer we are changing 156 // possible that by setting the organizer we are changing
157 // the event's readonly status... 157 // the event's readonly status...
158 mOrganizer = o; 158 mOrganizer = o;
159 if (mOrganizer.left(7).upper() == "MAILTO:") 159 if (mOrganizer.left(7).upper() == "MAILTO:")
160 mOrganizer = mOrganizer.remove(0,7); 160 mOrganizer = mOrganizer.remove(0,7);
161 161
162 updated(); 162 updated();
163} 163}
164 164
165QString IncidenceBase::organizer() const 165QString IncidenceBase::organizer() const
166{ 166{
167 return mOrganizer; 167 return mOrganizer;
168} 168}
169 169
170void IncidenceBase::setReadOnly( bool readOnly ) 170void IncidenceBase::setReadOnly( bool readOnly )
171{ 171{
172 mReadOnly = readOnly; 172 mReadOnly = readOnly;
173} 173}
174 174
175void IncidenceBase::setDtStart(const QDateTime &dtStart) 175void IncidenceBase::setDtStart(const QDateTime &dtStart)
176{ 176{
177// if (mReadOnly) return; 177// if (mReadOnly) return;
178 mDtStart = getEvenTime(dtStart); 178 mDtStart = getEvenTime(dtStart);
179 updated(); 179 updated();
180} 180}
181 181
182
182QDateTime IncidenceBase::dtStart() const 183QDateTime IncidenceBase::dtStart() const
183{ 184{
184 return mDtStart; 185 return mDtStart;
185} 186}
186 187
187QString IncidenceBase::dtStartTimeStr() const 188QString IncidenceBase::dtStartTimeStr() const
188{ 189{
189 return KGlobal::locale()->formatTime(dtStart().time()); 190 return KGlobal::locale()->formatTime(dtStart().time());
190} 191}
191 192
192QString IncidenceBase::dtStartDateStr(bool shortfmt) const 193QString IncidenceBase::dtStartDateStr(bool shortfmt) const
193{ 194{
194 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); 195 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt);
195} 196}
196 197
197QString IncidenceBase::dtStartStr(bool shortfmt) const 198QString IncidenceBase::dtStartStr(bool shortfmt) const
198{ 199{
199 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); 200 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt);
200} 201}
201 202
202 203
203bool IncidenceBase::doesFloat() const 204bool IncidenceBase::doesFloat() const
204{ 205{
205 return mFloats; 206 return mFloats;
206} 207}
207 208
208void IncidenceBase::setFloats(bool f) 209void IncidenceBase::setFloats(bool f)
209{ 210{
210 if (mReadOnly) return; 211 if (mReadOnly) return;
211 mFloats = f; 212 mFloats = f;
212 updated(); 213 updated();
213} 214}
214 215
215 216
216bool IncidenceBase::addAttendee(Attendee *a, bool doupdate) 217bool IncidenceBase::addAttendee(Attendee *a, bool doupdate)
217{ 218{
218 if (mReadOnly) return false; 219 if (mReadOnly) return false;
219 if (a->name().left(7).upper() == "MAILTO:") 220 if (a->name().left(7).upper() == "MAILTO:")
220 a->setName(a->name().remove(0,7)); 221 a->setName(a->name().remove(0,7));
221 222
222 QPtrListIterator<Attendee> qli(mAttendees); 223 QPtrListIterator<Attendee> qli(mAttendees);
223 224
224 qli.toFirst(); 225 qli.toFirst();
225 while (qli) { 226 while (qli) {
226 if (*qli.current() == *a) 227 if (*qli.current() == *a)
227 return false; 228 return false;
228 ++qli; 229 ++qli;
229 } 230 }
230 mAttendees.append(a); 231 mAttendees.append(a);
231 if (doupdate) updated(); 232 if (doupdate) updated();
232 return true; 233 return true;
233} 234}
234 235
235#if 0 236#if 0
236void IncidenceBase::removeAttendee(Attendee *a) 237void IncidenceBase::removeAttendee(Attendee *a)
237{ 238{
238 if (mReadOnly) return; 239 if (mReadOnly) return;
239 mAttendees.removeRef(a); 240 mAttendees.removeRef(a);
240 updated(); 241 updated();
241} 242}
242 243
243void IncidenceBase::removeAttendee(const char *n) 244void IncidenceBase::removeAttendee(const char *n)
244{ 245{
245 Attendee *a; 246 Attendee *a;
246 247
247 if (mReadOnly) return; 248 if (mReadOnly) return;
248 for (a = mAttendees.first(); a; a = mAttendees.next()) 249 for (a = mAttendees.first(); a; a = mAttendees.next())
249 if (a->getName() == n) { 250 if (a->getName() == n) {
250 mAttendees.remove(); 251 mAttendees.remove();
251 break; 252 break;
252 } 253 }
253} 254}
254#endif 255#endif
255 256
256void IncidenceBase::clearAttendees() 257void IncidenceBase::clearAttendees()
257{ 258{
258 if (mReadOnly) return; 259 if (mReadOnly) return;
259 mAttendees.clear(); 260 mAttendees.clear();
260} 261}
261 262
262#if 0 263#if 0
263Attendee *IncidenceBase::getAttendee(const char *n) const 264Attendee *IncidenceBase::getAttendee(const char *n) const
264{ 265{
265 QPtrListIterator<Attendee> qli(mAttendees); 266 QPtrListIterator<Attendee> qli(mAttendees);
266 267
267 qli.toFirst(); 268 qli.toFirst();
268 while (qli) { 269 while (qli) {
269 if (qli.current()->getName() == n) 270 if (qli.current()->getName() == n)
270 return qli.current(); 271 return qli.current();
271 ++qli; 272 ++qli;
272 } 273 }
273 return 0L; 274 return 0L;
274} 275}
275#endif 276#endif
276 277
277Attendee *IncidenceBase::attendeeByMail(const QString &email) 278Attendee *IncidenceBase::attendeeByMail(const QString &email)
278{ 279{
279 QPtrListIterator<Attendee> qli(mAttendees); 280 QPtrListIterator<Attendee> qli(mAttendees);
280 281
281 qli.toFirst(); 282 qli.toFirst();
282 while (qli) { 283 while (qli) {
283 if (qli.current()->email().lower() == email.lower()) 284 if (qli.current()->email().lower() == email.lower())
284 return qli.current(); 285 return qli.current();
285 ++qli; 286 ++qli;
286 } 287 }
287 return 0L; 288 return 0L;
288} 289}
289 290
290Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) 291Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email)
291{ 292{
292 QPtrListIterator<Attendee> qli(mAttendees); 293 QPtrListIterator<Attendee> qli(mAttendees);
293 294
294 QStringList mails = emails; 295 QStringList mails = emails;
295 if (!email.isEmpty()) { 296 if (!email.isEmpty()) {
296 mails.append(email); 297 mails.append(email);
297 } 298 }
298 qli.toFirst(); 299 qli.toFirst();
299 while (qli) { 300 while (qli) {
300 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { 301 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
301 if (qli.current()->email().lower() == (*it).lower()) 302 if (qli.current()->email().lower() == (*it).lower())
302 return qli.current(); 303 return qli.current();
303 } 304 }
304 305
305 ++qli; 306 ++qli;
306 } 307 }
307 return 0L; 308 return 0L;
308} 309}
309 310
310void IncidenceBase::setDuration(int seconds) 311void IncidenceBase::setDuration(int seconds)
311{ 312{
312 mDuration = seconds; 313 mDuration = seconds;
313 setHasDuration(true); 314 setHasDuration(true);
314} 315}
315 316
316int IncidenceBase::duration() const 317int IncidenceBase::duration() const
317{ 318{
318 return mDuration; 319 return mDuration;
319} 320}
320 321
321void IncidenceBase::setHasDuration(bool b) 322void IncidenceBase::setHasDuration(bool b)
322{ 323{
323 mHasDuration = b; 324 mHasDuration = b;
324} 325}
325 326
326bool IncidenceBase::hasDuration() const 327bool IncidenceBase::hasDuration() const
327{ 328{
328 return mHasDuration; 329 return mHasDuration;
329} 330}
330 331
331void IncidenceBase::setSyncStatus(int stat) 332void IncidenceBase::setSyncStatus(int stat)
332{ 333{
333 if (mReadOnly) return; 334 if (mReadOnly) return;
334 mSyncStatus = stat; 335 mSyncStatus = stat;
335} 336}
336 337
337int IncidenceBase::syncStatus() const 338int IncidenceBase::syncStatus() const
338{ 339{
339 return mSyncStatus; 340 return mSyncStatus;
340} 341}
341 342
342void IncidenceBase::setPilotId( int id ) 343void IncidenceBase::setPilotId( int id )
343{ 344{
344 if (mReadOnly) return; 345 if (mReadOnly) return;
345 mPilotId = id; 346 mPilotId = id;
346} 347}
347 348
348int IncidenceBase::pilotId() const 349int IncidenceBase::pilotId() const
349{ 350{
350 return mPilotId; 351 return mPilotId;
351} 352}
352 353
353int IncidenceBase::tempSyncStat() const 354int IncidenceBase::tempSyncStat() const
354{ 355{
355 return mTempSyncStat; 356 return mTempSyncStat;
356} 357}
357void IncidenceBase::setTempSyncStat( int id ) 358void IncidenceBase::setTempSyncStat( int id )
358{ 359{
359 if (mReadOnly) return; 360 if (mReadOnly) return;
360 mTempSyncStat = id; 361 mTempSyncStat = id;
361} 362}
362 363
363void IncidenceBase::removeID(const QString &prof) 364void IncidenceBase::removeID(const QString &prof)
364{ 365{
365 if ( prof.isEmpty() ) 366 if ( prof.isEmpty() )
366 mExternalId = ":"; 367 mExternalId = ":";
367 else 368 else
368 mExternalId = KIdManager::removeId ( mExternalId, prof); 369 mExternalId = KIdManager::removeId ( mExternalId, prof);
369 370
370} 371}
371void IncidenceBase::setID( const QString & prof , const QString & id ) 372void IncidenceBase::setID( const QString & prof , const QString & id )
372{ 373{
373 mExternalId = KIdManager::setId ( mExternalId, prof, id ); 374 mExternalId = KIdManager::setId ( mExternalId, prof, id );
374} 375}
375QString IncidenceBase::getID( const QString & prof) 376QString IncidenceBase::getID( const QString & prof)
376{ 377{
377 return KIdManager::getId ( mExternalId, prof ); 378 return KIdManager::getId ( mExternalId, prof );
378} 379}
379 380
380// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: 381// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0:
381// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 382// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0
382void IncidenceBase::setCsum( const QString & prof , const QString & id ) 383void IncidenceBase::setCsum( const QString & prof , const QString & id )
383{ 384{
384 mExternalId = KIdManager::setCsum ( mExternalId, prof, id ); 385 mExternalId = KIdManager::setCsum ( mExternalId, prof, id );
385} 386}
386QString IncidenceBase::getCsum( const QString & prof) 387QString IncidenceBase::getCsum( const QString & prof)
387{ 388{
388 return KIdManager::getCsum ( mExternalId, prof ); 389 return KIdManager::getCsum ( mExternalId, prof );
389} 390}
390 391
391void IncidenceBase::setIDStr( const QString & s ) 392void IncidenceBase::setIDStr( const QString & s )
392{ 393{
393 if (mReadOnly) return; 394 if (mReadOnly) return;
394 mExternalId = s; 395 mExternalId = s;
395} 396}
396 397
397QString IncidenceBase::IDStr() const 398QString IncidenceBase::IDStr() const
398{ 399{
399 return mExternalId ; 400 return mExternalId ;
400} 401}
401void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) 402void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
402{ 403{
403 if( !mObservers.contains(observer) ) mObservers.append( observer ); 404 if( !mObservers.contains(observer) ) mObservers.append( observer );
404} 405}
405 406
406void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) 407void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
407{ 408{
408 mObservers.remove( observer ); 409 mObservers.remove( observer );
409} 410}
410 411
411void IncidenceBase::updated() 412void IncidenceBase::updated()
412{ 413{
413 QPtrListIterator<Observer> it(mObservers); 414 QPtrListIterator<Observer> it(mObservers);
414 while( it.current() ) { 415 while( it.current() ) {
415 Observer *o = it.current(); 416 Observer *o = it.current();
416 ++it; 417 ++it;
417 o->incidenceUpdated( this ); 418 o->incidenceUpdated( this );
418 } 419 }
419} 420}