summaryrefslogtreecommitdiffabout
path: root/libkcal/incidence.h
Unidiff
Diffstat (limited to 'libkcal/incidence.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/incidence.h298
1 files changed, 298 insertions, 0 deletions
diff --git a/libkcal/incidence.h b/libkcal/incidence.h
new file mode 100644
index 0000000..d1972cb
--- a/dev/null
+++ b/libkcal/incidence.h
@@ -0,0 +1,298 @@
1/*
2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
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
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
19*/
20#ifndef INCIDENCE_H
21#define INCIDENCE_H
22//
23// Incidence - base class of calendaring components
24//
25
26#include <qdatetime.h>
27#include <qstringlist.h>
28#include <qvaluelist.h>
29
30#include "recurrence.h"
31#include "alarm.h"
32#include "attachment.h"
33#include "listbase.h"
34#include "incidencebase.h"
35
36namespace KCal {
37
38class Event;
39class Todo;
40class Journal;
41
42/**
43 This class provides the base class common to all calendar components.
44*/
45class Incidence : public IncidenceBase
46{
47 public:
48 /**
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
51 calendar components. It allows to add functions, which operate on the concrete
52 types of calendar components, without changing the calendar component classes.
53 */
54 class Visitor
55 {
56 public:
57 /** Destruct Incidence::Visitor */
58 virtual ~Visitor() {}
59
60 /**
61 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions
62 on an Event object.
63 */
64 virtual bool visit(Event *) { return false; }
65 /**
66 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions
67 on an Todo object.
68 */
69 virtual bool visit(Todo *) { return false; }
70 /**
71 Reimplement this function in your concrete subclass of IncidenceVisitor to perform actions
72 on an Journal object.
73 */
74 virtual bool visit(Journal *) { return false; }
75
76 protected:
77 /** Constructor is protected to prevent direct creation of visitor base class. */
78 Visitor() {}
79 };
80
81 /**
82 This class implements a visitor for adding an Incidence to a resource
83 supporting addEvent(), addTodo() and addJournal() calls.
84 */
85 template<class T>
86 class AddVisitor : public Visitor
87 {
88 public:
89 AddVisitor( T *r ) : mResource( r ) {}
90 bool visit( Event *e ) { return mResource->addEvent( e ); }
91 bool visit( Todo *t ) { return mResource->addTodo( t ); }
92 bool visit( Journal *j ) { return mResource->addJournal( j ); }
93
94 private:
95 T *mResource;
96 };
97
98 /** enumeration for describing an event's secrecy. */
99 enum { SecrecyPublic = 0, SecrecyPrivate = 1, SecrecyConfidential = 2 };
100 typedef ListBase<Incidence> List;
101 Incidence();
102 Incidence(const Incidence &);
103 ~Incidence();
104
105 /**
106 Accept IncidenceVisitor. A class taking part in the visitor mechanism has to
107 provide this implementation:
108 <pre>
109 bool accept(Visitor &v) { return v.visit(this); }
110 </pre>
111 */
112 virtual bool accept(Visitor &) { return false; }
113
114 virtual Incidence *clone() = 0;
115
116 virtual QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const = 0;
117 void setReadOnly( bool );
118
119 /**
120 Recreate event. The event is made a new unique event, but already stored
121 event information is preserved. Sets uniquie id, creation date, last
122 modification date and revision number.
123 */
124 void recreate();
125
126 /** set creation date */
127 void setCreated(QDateTime);
128 /** return time and date of creation. */
129 QDateTime created() const;
130
131 /** set the number of revisions this event has seen */
132 void setRevision(int rev);
133 /** return the number of revisions this event has seen */
134 int revision() const;
135
136 /** Set starting date/time. */
137 virtual void setDtStart(const QDateTime &dtStart);
138 /** Return the incidence's ending date/time as a QDateTime. */
139 virtual QDateTime dtEnd() const { return QDateTime(); }
140
141 /** sets the event's lengthy description. */
142 void setDescription(const QString &description);
143 /** returns a reference to the event's description. */
144 QString description() const;
145
146 /** sets the event's short summary. */
147 void setSummary(const QString &summary);
148 /** returns a reference to the event's summary. */
149 QString summary() const;
150
151 /** set event's applicable categories */
152 void setCategories(const QStringList &categories);
153 /** set event's categories based on a comma delimited string */
154 void setCategories(const QString &catStr);
155 /** return categories in a list */
156 QStringList categories() const;
157 /** return categories as a comma separated string */
158 QString categoriesStr();
159
160 /** point at some other event to which the event relates. This function should
161 * only be used when constructing a calendar before the related Event
162 * exists. */
163 void setRelatedToUid(const QString &);
164 /** what event does this one relate to? This function should
165 * only be used when constructing a calendar before the related Event
166 * exists. */
167 QString relatedToUid() const;
168 /** point at some other event to which the event relates */
169 void setRelatedTo(Incidence *relatedTo);
170 /** what event does this one relate to? */
171 Incidence *relatedTo() const;
172 /** All events that are related to this event */
173 QPtrList<Incidence> relations() const;
174 /** Add an event which is related to this event */
175 void addRelation(Incidence *);
176 /** Remove event that is related to this event */
177 void removeRelation(Incidence *);
178
179 /** returns the list of dates which are exceptions to the recurrence rule */
180 DateList exDates() const;
181 /** sets the list of dates which are exceptions to the recurrence rule */
182 void setExDates(const DateList &_exDates);
183 void setExDates(const char *dates);
184 /** Add a date to the list of exceptions of the recurrence rule. */
185 void addExDate(const QDate &date);
186
187 /** returns true if there is an exception for this date in the recurrence
188 rule set, or false otherwise. */
189 bool isException(const QDate &qd) const;
190
191 /** add attachment to this event */
192 void addAttachment(Attachment *attachment);
193 /** remove and delete a specific attachment */
194 void deleteAttachment(Attachment *attachment);
195 /** remove and delete all attachments with this mime type */
196 void deleteAttachments(const QString& mime);
197 /** return list of all associated attachments */
198 QPtrList<Attachment> attachments() const;
199 /** find a list of attachments with this mime type */
200 QPtrList<Attachment> attachments(const QString& mime) const;
201
202 /** sets the event's status the value specified. See the enumeration
203 * above for possible values. */
204 void setSecrecy(int);
205 /** return the event's secrecy. */
206 int secrecy() const;
207 /** return the event's secrecy in string format. */
208 QString secrecyStr() const;
209 /** return list of all availbale secrecy classes */
210 static QStringList secrecyList();
211 /** return human-readable name of secrecy class */
212 static QString secrecyName(int);
213
214 /** returns TRUE if the date specified is one on which the event will
215 * recur. */
216 bool recursOn(const QDate &qd) const;
217
218 // VEVENT and VTODO, but not VJOURNAL (move to EventBase class?):
219
220 /** set resources used, such as Office, Car, etc. */
221 void setResources(const QStringList &resources);
222 /** return list of current resources */
223 QStringList resources() const;
224
225 /** set the event's priority, 0 is undefined, 1 highest (decreasing order) */
226 void setPriority(int priority);
227 /** get the event's priority */
228 int priority() const;
229
230 /** All alarms that are associated with this incidence */
231 QPtrList<Alarm> alarms() const;
232 /** Create a new alarm which is associated with this incidence */
233 Alarm* newAlarm();
234 /** Add an alarm which is associated with this incidence */
235 void addAlarm(Alarm*);
236 /** Remove an alarm that is associated with this incidence */
237 void removeAlarm(Alarm*);
238 /** Remove all alarms that are associated with this incidence */
239 void clearAlarms();
240 /** return whether any alarm associated with this incidence is enabled */
241 bool isAlarmEnabled() const;
242
243 /**
244 Return the recurrence rule associated with this incidence. If there is
245 none, returns an appropriate (non-0) object.
246 */
247 Recurrence *recurrence() const;
248
249 /**
250 Forward to Recurrence::doesRecur().
251 */
252 ushort doesRecur() const;
253
254 /** set the event's/todo's location. Do _not_ use it with journal */
255 void setLocation(const QString &location);
256 /** return the event's/todo's location. Do _not_ use it with journal */
257 QString location() const;
258 /** returns TRUE or FALSE depending on whether the todo has a start date */
259 bool hasStartDate() const;
260 /** sets the event's hasStartDate value. */
261 void setHasStartDate(bool f);
262 QDateTime getNextOccurence( const QDateTime& dt, bool* yes ) const;
263 bool cancelled() const;
264 void setCancelled( bool b );
265
266protected:
267 QPtrList<Alarm> mAlarms;
268 private:
269 int mRevision;
270 bool mCancelled;
271
272 // base components of jounal, event and todo
273 QDateTime mCreated;
274 QString mDescription;
275 QString mSummary;
276 QStringList mCategories;
277 Incidence *mRelatedTo;
278 QString mRelatedToUid;
279 QPtrList<Incidence> mRelations;
280 DateList mExDates;
281 QPtrList<Attachment> mAttachments;
282 QStringList mResources;
283 bool mHasStartDate; // if todo has associated start date
284
285 int mSecrecy;
286 int mPriority; // 1 = highest, 2 = less, etc.
287
288 //QPtrList<Alarm> mAlarms;
289 Recurrence *mRecurrence;
290
291 QString mLocation;
292};
293
294bool operator==( const Incidence&, const Incidence& );
295
296}
297
298#endif