summaryrefslogtreecommitdiffabout
path: root/libkcal/calendar.h
Unidiff
Diffstat (limited to 'libkcal/calendar.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendar.h349
1 files changed, 349 insertions, 0 deletions
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
new file mode 100644
index 0000000..7a85e74
--- a/dev/null
+++ b/libkcal/calendar.h
@@ -0,0 +1,349 @@
1/*
2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA.
20*/
21
22#ifndef CALENDAR_H
23#define CALENDAR_H
24
25#include <qobject.h>
26#include <qstring.h>
27#include <qdatetime.h>
28#include <qptrlist.h>
29#include <qdict.h>
30
31#include "customproperties.h"
32#include "event.h"
33#include "todo.h"
34#include "journal.h"
35
36#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
37
38class KConfig;
39
40namespace KCal {
41
42class CalFilter;
43
44/**
45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data.
51
52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar.
59*/
60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer
62{
63 Q_OBJECT
64public:
65 Calendar();
66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar();
68 void deleteIncidence(Incidence *in);
69 /**
70 Clears out the current calendar, freeing all used memory etc.
71 */
72 virtual void close() = 0;
73
74 /**
75 Sync changes in memory to persistant storage.
76 */
77 virtual void save() = 0;
78
79 virtual bool isSaving() { return false; }
80
81 /**
82 Return the owner of the calendar's full name.
83 */
84 const QString &getOwner() const;
85 /**
86 Set the owner of the calendar. Should be owner's full name.
87 */
88 void setOwner( const QString &os );
89 /**
90 Return the email address of the calendar owner.
91 */
92 const QString &getEmail();
93 /**
94 Set the email address of the calendar owner.
95 */
96 void setEmail( const QString & );
97
98 /**
99 Set time zone from a timezone string (e.g. -2:00)
100 */
101 void setTimeZone( const QString &tz );
102 /**
103 Set time zone from a minutes value (e.g. -60)
104 */
105 void setTimeZone( int tz );
106 /**
107 Return time zone as offest in minutes.
108 */
109 int getTimeZone() const;
110 /**
111 Compute an ISO 8601 format string from the time zone.
112 */
113 QString getTimeZoneStr() const;
114 /**
115 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
116 values).
117 */
118 void setTimeZoneId( const QString & );
119 /**
120 Return time zone id.
121 */
122 QString timeZoneId() const;
123 /**
124 Use local time, not UTC or a time zone.
125 */
126 void setLocalTime();
127 /**
128 Return whether local time is being used.
129 */
130 bool isLocalTime() const;
131
132 /**
133 Add an incidence to calendar.
134
135 @return true on success, false on error.
136 */
137 virtual bool addIncidence( Incidence * );
138 /**
139 Return filtered list of all incidences of this calendar.
140 */
141 virtual QPtrList<Incidence> incidences();
142
143 /**
144 Return unfiltered list of all incidences of this calendar.
145 */
146 virtual QPtrList<Incidence> rawIncidences();
147
148 /**
149 Adds a Event to this calendar object.
150 @param anEvent a pointer to the event to add
151
152 @return true on success, false on error.
153 */
154 virtual bool addEventNoDup( Event *event ) = 0;
155 virtual bool addEvent( Event *anEvent ) = 0;
156 /**
157 Delete event from calendar.
158 */
159 virtual void deleteEvent( Event * ) = 0;
160 /**
161 Retrieves an event on the basis of the unique string ID.
162 */
163 virtual Event *event( const QString &UniqueStr ) = 0;
164 virtual Event *event( int ) = 0;
165 /**
166 Builds and then returns a list of all events that match for the
167 date specified. useful for dayView, etc. etc.
168 The calendar filter is applied.
169 */
170 QPtrList<Event> events( const QDate &date, bool sorted = false);
171 /**
172 Get events, which occur on the given date.
173 The calendar filter is applied.
174 */
175 QPtrList<Event> events( const QDateTime &qdt );
176 /**
177 Get events in a range of dates. If inclusive is set to true, only events
178 are returned, which are completely included in the range.
179 The calendar filter is applied.
180 */
181 QPtrList<Event> events( const QDate &start, const QDate &end,
182 bool inclusive = false);
183 /**
184 Return filtered list of all events in calendar.
185 */
186 virtual QPtrList<Event> events();
187 /**
188 Return unfiltered list of all events in calendar.
189 */
190 virtual QPtrList<Event> rawEvents() = 0;
191
192 /**
193 Add a todo to the todolist.
194
195 @return true on success, false on error.
196 */
197 virtual bool addTodo( Todo *todo ) = 0;
198 virtual bool addTodoNoDup( Todo *todo ) = 0;
199 /**
200 Remove a todo from the todolist.
201 */
202 virtual void deleteTodo( Todo * ) = 0;
203 virtual void deleteJournal( Journal * ) = 0;
204 /**
205 Return filterd list of todos.
206 */
207 virtual QPtrList<Todo> todos();
208 /**
209 Searches todolist for an event with this unique string identifier,
210 returns a pointer or null.
211 */
212 virtual Todo *todo( const QString &uid ) = 0;
213 virtual Todo *todo( int ) = 0;
214 /**
215 Returns list of todos due on the specified date.
216 */
217 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
218 /**
219 Return unfiltered list of todos.
220 */
221 virtual QPtrList<Todo> rawTodos() = 0;
222
223 /**
224 Add a Journal entry to calendar.
225
226 @return true on success, false on error.
227 */
228 virtual bool addJournal( Journal * ) = 0;
229 /**
230 Return Journal for given date.
231 */
232 virtual Journal *journal( const QDate & ) = 0;
233 /**
234 Return Journal with given UID.
235 */
236 virtual Journal *journal( const QString &UID ) = 0;
237 /**
238 Return list of all Journal entries.
239 */
240 virtual QPtrList<Journal> journals() = 0;
241
242 /**
243 Searches all incidence types for an incidence with this unique
244 string identifier, returns a pointer or null.
245 */
246 Incidence* incidence( const QString&UID );
247
248 /**
249 Setup relations for an incidence.
250 */
251 virtual void setupRelations( Incidence * );
252 /**
253 Remove all relations to an incidence
254 */
255 virtual void removeRelations( Incidence * );
256
257 /**
258 Set calendar filter, which filters events for the events() functions.
259 The Filter object is owned by the caller.
260 */
261 void setFilter( CalFilter * );
262 /**
263 Return calendar filter.
264 */
265 CalFilter *filter();
266 virtual QDateTime nextAlarm( int daysTo ) = 0;
267 virtual QString nextSummary( ) const = 0;
268 virtual void reInitAlarmSettings() = 0;
269 virtual QDateTime nextAlarmEventDateTime() const = 0;
270 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
271 /**
272 Return all alarms, which ocur in the given time interval.
273 */
274 virtual Alarm::List alarms( const QDateTime &from,
275 const QDateTime &to ) = 0;
276
277 class Observer {
278 public:
279 virtual void calendarModified( bool, Calendar * ) = 0;
280 };
281
282 void registerObserver( Observer * );
283
284 void setModified( bool );
285
286 /**
287 Set product id returned by loadedProductId(). This function is only
288 useful for the calendar loading code.
289 */
290 void setLoadedProductId( const QString & );
291 /**
292 Return product id taken from file that has been loaded. Returns
293 QString::null, if no calendar has been loaded.
294 */
295 QString loadedProductId();
296
297 signals:
298 void calendarChanged();
299 void calendarSaved();
300 void calendarLoaded();
301 void addAlarm(const QDateTime &qdt, const QString &noti );
302 void removeAlarm(const QDateTime &qdt, const QString &noti );
303
304 protected:
305 /**
306 Get unfiltered events, which occur on the given date.
307 */
308 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
309 /**
310 Get unfiltered events, which occur on the given date.
311 */
312 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
313 bool sorted = false ) = 0;
314 /**
315 Get events in a range of dates. If inclusive is set to true, only events
316 are returned, which are completely included in the range.
317 */
318 virtual QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
319 bool inclusive = false ) = 0;
320 Incidence *mNextAlarmIncidence;
321
322private:
323 void init();
324
325 QString mOwner; // who the calendar belongs to
326 QString mOwnerEmail; // email address of the owner
327 int mTimeZone; // timezone OFFSET from GMT (MINUTES)
328 bool mLocalTime; // use local time, not UTC or a time zone
329
330 CalFilter *mFilter;
331 CalFilter *mDefaultFilter;
332
333 QString mTimeZoneId;
334
335 Observer *mObserver;
336 bool mNewObserver;
337
338 bool mModified;
339
340 QString mLoadedProductId;
341
342 // This list is used to put together related todos
343 QDict<Incidence> mOrphans;
344 QDict<Incidence> mOrphanUids;
345};
346
347}
348
349#endif