summaryrefslogtreecommitdiffabout
path: root/libkcal
Unidiff
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/event.cpp16
-rw-r--r--libkcal/event.h2
2 files changed, 9 insertions, 9 deletions
diff --git a/libkcal/event.cpp b/libkcal/event.cpp
index 235ae55..46e8174 100644
--- a/libkcal/event.cpp
+++ b/libkcal/event.cpp
@@ -78,261 +78,261 @@ bool Event::contains ( Event* from )
78 Alarm *a = from->alarms().first(); 78 Alarm *a = from->alarms().first();
79 if ( a->enabled() ){ 79 if ( a->enabled() ){
80 if ( !alarms().count() ) 80 if ( !alarms().count() )
81 return false; 81 return false;
82 Alarm *b = alarms().first(); 82 Alarm *b = alarms().first();
83 if( ! b->enabled() ) 83 if( ! b->enabled() )
84 return false; 84 return false;
85 if ( ! (a->offset() == b->offset() )) 85 if ( ! (a->offset() == b->offset() ))
86 return false; 86 return false;
87 } 87 }
88 } 88 }
89 QStringList cat = categories(); 89 QStringList cat = categories();
90 QStringList catFrom = from->categories(); 90 QStringList catFrom = from->categories();
91 QString nCat; 91 QString nCat;
92 unsigned int iii; 92 unsigned int iii;
93 for ( iii = 0; iii < catFrom.count();++iii ) { 93 for ( iii = 0; iii < catFrom.count();++iii ) {
94 nCat = catFrom[iii]; 94 nCat = catFrom[iii];
95 if ( !nCat.isEmpty() ) 95 if ( !nCat.isEmpty() )
96 if ( !cat.contains( nCat )) { 96 if ( !cat.contains( nCat )) {
97 return false; 97 return false;
98 } 98 }
99 } 99 }
100 if ( from->doesRecur() ) 100 if ( from->doesRecur() )
101 if ( from->doesRecur() != doesRecur() && ! (from->doesRecur()== Recurrence::rYearlyMonth && doesRecur()== Recurrence::rYearlyDay) ) 101 if ( from->doesRecur() != doesRecur() && ! (from->doesRecur()== Recurrence::rYearlyMonth && doesRecur()== Recurrence::rYearlyDay) )
102 return false; 102 return false;
103 return true; 103 return true;
104} 104}
105 105
106void Event::setDtEnd(const QDateTime &dtEnd) 106void Event::setDtEnd(const QDateTime &dtEnd)
107{ 107{
108 if (mReadOnly) return; 108 if (mReadOnly) return;
109 109
110 mDtEnd = getEvenTime( dtEnd ); 110 mDtEnd = getEvenTime( dtEnd );
111 111
112 setHasEndDate(true); 112 setHasEndDate(true);
113 setHasDuration(false); 113 setHasDuration(false);
114 114
115 updated(); 115 updated();
116} 116}
117 117
118QDateTime Event::dtEnd() const 118QDateTime Event::dtEnd() const
119{ 119{
120 if (hasEndDate()) return mDtEnd; 120 if (hasEndDate()) return mDtEnd;
121 if (hasDuration()) return dtStart().addSecs(duration()); 121 if (hasDuration()) return dtStart().addSecs(duration());
122 122
123 return dtStart(); 123 return dtStart();
124} 124}
125 125
126QString Event::dtEndTimeStr() const 126QString Event::dtEndTimeStr() const
127{ 127{
128 return KGlobal::locale()->formatTime(mDtEnd.time()); 128 return KGlobal::locale()->formatTime(mDtEnd.time());
129} 129}
130 130
131QString Event::dtEndDateStr(bool shortfmt) const 131QString Event::dtEndDateStr(bool shortfmt) const
132{ 132{
133 return KGlobal::locale()->formatDate(mDtEnd.date(),shortfmt); 133 return KGlobal::locale()->formatDate(mDtEnd.date(),shortfmt);
134} 134}
135 135
136QString Event::dtEndStr(bool shortfmt) const 136QString Event::dtEndStr(bool shortfmt) const
137{ 137{
138 return KGlobal::locale()->formatDateTime(mDtEnd, shortfmt); 138 return KGlobal::locale()->formatDateTime(mDtEnd, shortfmt);
139} 139}
140 140
141void Event::setHasEndDate(bool b) 141void Event::setHasEndDate(bool b)
142{ 142{
143 mHasEndDate = b; 143 mHasEndDate = b;
144} 144}
145 145
146bool Event::hasEndDate() const 146bool Event::hasEndDate() const
147{ 147{
148 return mHasEndDate; 148 return mHasEndDate;
149} 149}
150 150
151bool Event::isMultiDay() const 151bool Event::isMultiDay() const
152{ 152{
153 bool multi = !(dtStart().date() == dtEnd().date()); 153 bool multi = !(dtStart().date() == dtEnd().date());
154 return multi; 154 return multi;
155} 155}
156 156
157void Event::setTransparency(Event::Transparency transparency) 157void Event::setTransparency(Event::Transparency transparency)
158{ 158{
159 if (mReadOnly) return; 159 if (mReadOnly) return;
160 mTransparency = transparency; 160 mTransparency = transparency;
161 updated(); 161 updated();
162} 162}
163 163
164Event::Transparency Event::transparency() const 164Event::Transparency Event::transparency() const
165{ 165{
166 return mTransparency; 166 return mTransparency;
167} 167}
168 168
169void Event::setDuration(int seconds) 169void Event::setDuration(int seconds)
170{ 170{
171 setHasEndDate(false); 171 setHasEndDate(false);
172 Incidence::setDuration(seconds); 172 Incidence::setDuration(seconds);
173} 173}
174bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, bool inFutureOnly ) 174bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* startDT )
175{ 175{
176 if ( testEvent == this ) 176 if ( testEvent == this )
177 return false; 177 return false;
178 if ( ! doesRecur() && !testEvent->doesRecur() ) { 178 if ( ! doesRecur() && !testEvent->doesRecur() ) {
179 QDateTime te; 179 QDateTime te;
180 if ( testEvent->doesFloat() ) 180 if ( testEvent->doesFloat() )
181 te = testEvent->mDtEnd.addDays( 1 ); 181 te = testEvent->mDtEnd.addDays( 1 );
182 else 182 else
183 te = testEvent->mDtEnd; 183 te = testEvent->mDtEnd;
184 QDateTime e; 184 QDateTime e;
185 if ( doesFloat() ) 185 if ( doesFloat() )
186 e = mDtEnd.addDays( 1 ); 186 e = mDtEnd.addDays( 1 );
187 else 187 else
188 e = mDtEnd; 188 e = mDtEnd;
189 if ( mDtStart < te && testEvent->mDtStart < e ) { 189 if ( mDtStart < te && testEvent->mDtStart < e ) {
190 if ( mDtStart < testEvent->mDtStart ) 190 if ( mDtStart < testEvent->mDtStart )
191 *overlapDT = testEvent->mDtStart; 191 *overlapDT = testEvent->mDtStart;
192 else 192 else
193 *overlapDT = mDtStart; 193 *overlapDT = mDtStart;
194 if ( inFutureOnly ) 194 if ( startDT )
195 return (*overlapDT >= QDateTime::currentDateTime() ); 195 return (*overlapDT >= *startDT );
196 return true; 196 return true;
197 } 197 }
198 return false; 198 return false;
199 } 199 }
200 Event *nonRecur = 0; 200 Event *nonRecur = 0;
201 Event *recurEvent = 0; 201 Event *recurEvent = 0;
202 if ( ! doesRecur() ) { 202 if ( ! doesRecur() ) {
203 nonRecur = this; 203 nonRecur = this;
204 recurEvent = testEvent; 204 recurEvent = testEvent;
205 } 205 }
206 else if ( !testEvent->doesRecur() ) { 206 else if ( !testEvent->doesRecur() ) {
207 nonRecur = testEvent; 207 nonRecur = testEvent;
208 recurEvent = this; 208 recurEvent = this;
209 } 209 }
210 if ( nonRecur ) { 210 if ( nonRecur ) {
211 QDateTime enr; 211 QDateTime enr;
212 if ( nonRecur->doesFloat() ) 212 if ( nonRecur->doesFloat() )
213 enr = nonRecur->mDtEnd.addDays( 1 ); 213 enr = nonRecur->mDtEnd.addDays( 1 );
214 else 214 else
215 enr = nonRecur->mDtEnd; 215 enr = nonRecur->mDtEnd;
216 if ( enr < recurEvent->mDtStart ) 216 if ( enr < recurEvent->mDtStart )
217 return false; 217 return false;
218 if ( inFutureOnly && enr < QDateTime::currentDateTime() ) 218 if ( startDT && enr < *startDT )
219 return false; 219 return false;
220 int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd ); 220 int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd );
221 if ( recurEvent->doesFloat() ) 221 if ( recurEvent->doesFloat() )
222 recDuration += 86400; 222 recDuration += 86400;
223 bool ok = true; 223 bool ok = true;
224 QDateTime recStart = recurEvent->mDtStart.addSecs( -300);; 224 QDateTime recStart = recurEvent->mDtStart.addSecs( -300);;
225 while ( ok ) { 225 while ( ok ) {
226 recStart = recurEvent->getNextOccurence( recStart.addSecs( 60 ), &ok ); 226 recStart = recurEvent->getNextOccurence( recStart.addSecs( 60 ), &ok );
227 if ( ok ) { 227 if ( ok ) {
228 if ( recStart > enr ) 228 if ( recStart > enr )
229 return false; 229 return false;
230 QDateTime recEnd = recStart.addSecs( recDuration ); 230 QDateTime recEnd = recStart.addSecs( recDuration );
231 if ( nonRecur->mDtStart < recEnd && recStart < nonRecur->mDtEnd ) { 231 if ( nonRecur->mDtStart < recEnd && recStart < nonRecur->mDtEnd ) {
232 if ( nonRecur->mDtStart < recStart ) 232 if ( nonRecur->mDtStart < recStart )
233 *overlapDT = recStart; 233 *overlapDT = recStart;
234 else 234 else
235 *overlapDT = nonRecur->mDtStart; 235 *overlapDT = nonRecur->mDtStart;
236 if ( inFutureOnly ) { 236 if ( startDT ) {
237 if ( *overlapDT >= QDateTime::currentDateTime() ) 237 if ( *overlapDT >= *startDT )
238 return true; 238 return true;
239 } else 239 } else
240 return true; 240 return true;
241 } 241 }
242 } 242 }
243 } 243 }
244 return false; 244 return false;
245 } 245 }
246 246
247 QDateTime incidenceStart = mDtStart; 247 QDateTime incidenceStart = mDtStart;
248 int duration = mDtStart.secsTo( mDtEnd ); 248 int duration = mDtStart.secsTo( mDtEnd );
249 if ( doesFloat() ) 249 if ( doesFloat() )
250 duration += 86400; 250 duration += 86400;
251 QDateTime testincidenceStart = testEvent->mDtStart; 251 QDateTime testincidenceStart = testEvent->mDtStart;
252 int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd ); 252 int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd );
253 if ( testEvent->doesFloat() ) 253 if ( testEvent->doesFloat() )
254 testduration += 86400; 254 testduration += 86400;
255 bool computeThis = false; 255 bool computeThis = false;
256 if ( incidenceStart < testincidenceStart ) 256 if ( incidenceStart < testincidenceStart )
257 computeThis = true; 257 computeThis = true;
258 bool ok = true; 258 bool ok = true;
259 if ( computeThis ) 259 if ( computeThis )
260 incidenceStart = incidenceStart.addSecs( -300 ); 260 incidenceStart = incidenceStart.addSecs( -300 );
261 else 261 else
262 testincidenceStart = testincidenceStart.addSecs( -300 ); 262 testincidenceStart = testincidenceStart.addSecs( -300 );
263 int count = 0; 263 int count = 0;
264 while ( ok ) { 264 while ( ok ) {
265 ++count; 265 ++count;
266 if ( count > 1000 ) break; 266 if ( count > 1000 ) break;
267 if ( computeThis ) 267 if ( computeThis )
268 incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok ); 268 incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok );
269 else 269 else
270 testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok ); 270 testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok );
271 if ( ok ) { 271 if ( ok ) {
272 if ( incidenceStart < testincidenceStart.addSecs( testduration ) && testincidenceStart < incidenceStart.addSecs( duration ) ) { 272 if ( incidenceStart < testincidenceStart.addSecs( testduration ) && testincidenceStart < incidenceStart.addSecs( duration ) ) {
273 if ( incidenceStart < testincidenceStart ) 273 if ( incidenceStart < testincidenceStart )
274 *overlapDT = testincidenceStart; 274 *overlapDT = testincidenceStart;
275 else 275 else
276 *overlapDT = incidenceStart; 276 *overlapDT = incidenceStart;
277 if ( inFutureOnly ) { 277 if ( startDT ) {
278 if ( *overlapDT >= QDateTime::currentDateTime() ) 278 if ( *overlapDT >= *startDT )
279 return true; 279 return true;
280 } else 280 } else
281 return true; 281 return true;
282 } 282 }
283 computeThis = ( incidenceStart < testincidenceStart ); 283 computeThis = ( incidenceStart < testincidenceStart );
284 } 284 }
285 285
286 } 286 }
287 return false; 287 return false;
288} 288}
289QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const 289QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const
290{ 290{
291 *ok = false; 291 *ok = false;
292 if ( !alarmEnabled() ) 292 if ( !alarmEnabled() )
293 return QDateTime (); 293 return QDateTime ();
294 bool yes; 294 bool yes;
295 QDateTime incidenceStart = getNextOccurence( start_dt, &yes ); 295 QDateTime incidenceStart = getNextOccurence( start_dt, &yes );
296 if ( ! yes || cancelled() ) { 296 if ( ! yes || cancelled() ) {
297 *ok = false; 297 *ok = false;
298 return QDateTime (); 298 return QDateTime ();
299 } 299 }
300 300
301 bool enabled = false; 301 bool enabled = false;
302 Alarm* alarm; 302 Alarm* alarm;
303 int off = 0; 303 int off = 0;
304 QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );; 304 QDateTime alarmStart = QDateTime::currentDateTime().addDays( 3650 );;
305 // if ( QDateTime::currentDateTime() > incidenceStart ){ 305 // if ( QDateTime::currentDateTime() > incidenceStart ){
306// *ok = false; 306// *ok = false;
307// return incidenceStart; 307// return incidenceStart;
308// } 308// }
309 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) { 309 for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) {
310 if (alarm->enabled()) { 310 if (alarm->enabled()) {
311 if ( alarm->hasTime () ) { 311 if ( alarm->hasTime () ) {
312 if ( alarm->time() < alarmStart ) { 312 if ( alarm->time() < alarmStart ) {
313 alarmStart = alarm->time(); 313 alarmStart = alarm->time();
314 enabled = true; 314 enabled = true;
315 off = alarmStart.secsTo( incidenceStart ); 315 off = alarmStart.secsTo( incidenceStart );
316 } 316 }
317 317
318 } else { 318 } else {
319 int secs = alarm->startOffset().asSeconds(); 319 int secs = alarm->startOffset().asSeconds();
320 if ( incidenceStart.addSecs( secs ) < alarmStart ) { 320 if ( incidenceStart.addSecs( secs ) < alarmStart ) {
321 alarmStart = incidenceStart.addSecs( secs ); 321 alarmStart = incidenceStart.addSecs( secs );
322 enabled = true; 322 enabled = true;
323 off = -secs; 323 off = -secs;
324 } 324 }
325 } 325 }
326 } 326 }
327 } 327 }
328 if ( enabled ) { 328 if ( enabled ) {
329 if ( alarmStart > start_dt ) { 329 if ( alarmStart > start_dt ) {
330 *ok = true; 330 *ok = true;
331 * offset = off; 331 * offset = off;
332 return alarmStart; 332 return alarmStart;
333 } 333 }
334 } 334 }
335 *ok = false; 335 *ok = false;
336 return QDateTime (); 336 return QDateTime ();
337 337
338} 338}
diff --git a/libkcal/event.h b/libkcal/event.h
index 80c11c4..e6055a5 100644
--- a/libkcal/event.h
+++ b/libkcal/event.h
@@ -1,93 +1,93 @@
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#ifndef EVENT_H 21#ifndef EVENT_H
22#define EVENT_H 22#define EVENT_H
23// 23//
24// Event component, representing a VEVENT object 24// Event component, representing a VEVENT object
25// 25//
26 26
27#include "incidence.h" 27#include "incidence.h"
28namespace KCal { 28namespace KCal {
29 29
30/** 30/**
31 This class provides an Event in the sense of RFC2445. 31 This class provides an Event in the sense of RFC2445.
32*/ 32*/
33class Event : public Incidence 33class Event : public Incidence
34{ 34{
35 public: 35 public:
36 enum Transparency { Opaque, Transparent }; 36 enum Transparency { Opaque, Transparent };
37 typedef ListBase<Event> List; 37 typedef ListBase<Event> List;
38 Event(); 38 Event();
39 Event(const Event &); 39 Event(const Event &);
40 ~Event(); 40 ~Event();
41 41
42 QCString type() const { return "Event"; } 42 QCString type() const { return "Event"; }
43 IncTypeID typeID() const { return eventID; } 43 IncTypeID typeID() const { return eventID; }
44 44
45 Incidence *clone(); 45 Incidence *clone();
46 QDateTime getNextAlarmDateTime( bool * ok, int * offset ,QDateTime start_dt ) const; 46 QDateTime getNextAlarmDateTime( bool * ok, int * offset ,QDateTime start_dt ) const;
47 47
48 /** for setting an event's ending date/time with a QDateTime. */ 48 /** for setting an event's ending date/time with a QDateTime. */
49 void setDtEnd(const QDateTime &dtEnd); 49 void setDtEnd(const QDateTime &dtEnd);
50 /** Return the event's ending date/time as a QDateTime. */ 50 /** Return the event's ending date/time as a QDateTime. */
51 virtual QDateTime dtEnd() const; 51 virtual QDateTime dtEnd() const;
52 /** returns an event's end time as a string formatted according to the 52 /** returns an event's end time as a string formatted according to the
53 users locale settings */ 53 users locale settings */
54 QString dtEndTimeStr() const; 54 QString dtEndTimeStr() const;
55 /** returns an event's end date as a string formatted according to the 55 /** returns an event's end date as a string formatted according to the
56 users locale settings */ 56 users locale settings */
57 QString dtEndDateStr(bool shortfmt=true) const; 57 QString dtEndDateStr(bool shortfmt=true) const;
58 /** returns an event's end date and time as a string formatted according 58 /** returns an event's end date and time as a string formatted according
59 to the users locale settings */ 59 to the users locale settings */
60 QString dtEndStr(bool shortfmt=true) const; 60 QString dtEndStr(bool shortfmt=true) const;
61 void setHasEndDate(bool); 61 void setHasEndDate(bool);
62 /** Return whether the event has an end date/time. */ 62 /** Return whether the event has an end date/time. */
63 bool hasEndDate() const; 63 bool hasEndDate() const;
64 64
65 /** Return true if the event spans multiple days, otherwise return false. */ 65 /** Return true if the event spans multiple days, otherwise return false. */
66 bool isMultiDay() const; 66 bool isMultiDay() const;
67 67
68 /** set the event's time transparency level. */ 68 /** set the event's time transparency level. */
69 void setTransparency(Transparency transparency); 69 void setTransparency(Transparency transparency);
70 /** get the event's time transparency level. */ 70 /** get the event's time transparency level. */
71 Transparency transparency() const; 71 Transparency transparency() const;
72 72
73 void setDuration(int seconds); 73 void setDuration(int seconds);
74 74
75 bool contains ( Event*); 75 bool contains ( Event*);
76 76
77 bool isOverlapping ( Event*, QDateTime*, bool inFutureOnly ); 77 bool isOverlapping ( Event*, QDateTime*, QDateTime* );
78 78
79 private: 79 private:
80 bool accept(Visitor &v) { return v.visit(this); } 80 bool accept(Visitor &v) { return v.visit(this); }
81 81
82 QDateTime mDtEnd; 82 QDateTime mDtEnd;
83 bool mHasEndDate; 83 bool mHasEndDate;
84 Transparency mTransparency; 84 Transparency mTransparency;
85}; 85};
86 86
87bool operator==( const Event&, const Event& ); 87bool operator==( const Event&, const Event& );
88 88
89 89
90} 90}
91 91
92 92
93#endif 93#endif