-rw-r--r-- | libkcal/incidence.h | 298 |
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 | |||
36 | namespace KCal { | ||
37 | |||
38 | class Event; | ||
39 | class Todo; | ||
40 | class Journal; | ||
41 | |||
42 | /** | ||
43 | This class provides the base class common to all calendar components. | ||
44 | */ | ||
45 | class 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 | |||
266 | protected: | ||
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 | |||
294 | bool operator==( const Incidence&, const Incidence& ); | ||
295 | |||
296 | } | ||
297 | |||
298 | #endif | ||