00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef KCAL_INCIDENCEBASE_H
00023 #define KCAL_INCIDENCEBASE_H
00024
00025 #include <qdatetime.h>
00026 #include <qstringlist.h>
00027 #include <qvaluelist.h>
00028 #include <qptrlist.h>
00029
00030 #include "customproperties.h"
00031 #include "attendee.h"
00032
00033 namespace KCal {
00034
00035 typedef QValueList<QDate> DateList;
00036 typedef QValueList<QDateTime> DateTimeList;
00037 class Event;
00038 class Todo;
00039 class Journal;
00040 class FreeBusy;
00041
00045 class LIBKCAL_EXPORT IncidenceBase : public CustomProperties
00046 {
00047 public:
00048
00049
00050 enum Field {
00051 FieldDtStart,
00052 FieldDtEnd,
00053 FieldLastModified,
00054 FieldDescription,
00055 FieldSummary,
00056 FieldLocation,
00057 FieldCompleted,
00058 FieldPercentComplete,
00059 FieldDtDue,
00060 FieldCategories,
00061 FieldRelatedTo,
00062 FieldRecurrence,
00063 FieldAttachment,
00064 FieldSecrecy,
00065 FieldStatus,
00066 FieldTransparency,
00067 FieldResources,
00068 FieldPriority,
00069 FieldGeoLatitude,
00070 FieldGeoLongitude,
00071 FieldRecurrenceId,
00072 FieldAlarms,
00073 FieldSchedulingId,
00074 FieldAttendees,
00075 FieldOrganizer,
00076 FieldCreated,
00077 FieldRevision,
00078 FieldDuration,
00079 FieldContact,
00080 FieldComment,
00081 FieldUid,
00082 FieldUnknown
00083 };
00084
00091 class Visitor
00092 {
00093 public:
00095 virtual ~Visitor() {}
00096
00101 virtual bool visit(Event *) { return false; }
00106 virtual bool visit(Todo *) { return false; }
00111 virtual bool visit(Journal *) { return false; }
00116 virtual bool visit(FreeBusy *) { return false; }
00117
00118 protected:
00120 Visitor() {}
00121 };
00122
00123 class Observer {
00124 public:
00125 virtual ~Observer() {}
00126 virtual void incidenceUpdated( IncidenceBase * ) = 0;
00127 virtual void incidenceUpdatedSilent( IncidenceBase * ) {};
00128 };
00129
00130 IncidenceBase();
00131 IncidenceBase( const IncidenceBase & );
00132 virtual ~IncidenceBase();
00133
00134 IncidenceBase& operator=( const IncidenceBase &i );
00135 bool operator==( const IncidenceBase & ) const;
00136
00144 virtual bool accept(Visitor &) { return false; }
00145
00146 virtual QCString type() const = 0;
00147
00149 void setUid( const QString & );
00151 QString uid() const;
00152
00154 void setLastModified( const QDateTime &lm );
00156 QDateTime lastModified() const;
00157
00159 void setOrganizer( const Person &o );
00160 void setOrganizer( const QString &o );
00161 Person organizer() const;
00162
00164 virtual void setReadOnly( bool );
00166 bool isReadOnly() const { return mReadOnly; }
00167
00169 virtual void setDtStart( const QDateTime &dtStart );
00172 virtual QDateTime dtStart() const;
00173
00179 virtual KDE_DEPRECATED QString dtStartTimeStr() const;
00180
00186 virtual KDE_DEPRECATED QString dtStartDateStr( bool shortfmt = true ) const;
00192 virtual KDE_DEPRECATED QString dtStartStr() const;
00193
00194 virtual void setDuration( int seconds );
00195 int duration() const;
00196 void setHasDuration( bool );
00197 bool hasDuration() const;
00198
00201 bool doesFloat() const;
00203 void setFloats( bool f );
00204
00205
00206
00207
00208
00216 void addComment(const QString& comment);
00217
00226 bool removeComment( const QString& comment );
00227
00229 void clearComments();
00230
00232 QStringList comments() const;
00233
00241 void addAttendee( Attendee *attendee, bool doUpdate = true );
00245 void clearAttendees();
00249 const Attendee::List &attendees() const { return mAttendees; };
00253 int attendeeCount() const { return mAttendees.count(); };
00257 Attendee *attendeeByMail( const QString & ) const;
00261 Attendee *attendeeByMails( const QStringList &,
00262 const QString &email = QString::null ) const;
00266 Attendee *attendeeByUid( const QString &uid ) const;
00267
00271 enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 };
00275 void setSyncStatus( int status );
00276 void setSyncStatusSilent( int status );
00280 int syncStatus() const;
00281
00285 void setPilotId( unsigned long id );
00289 unsigned long pilotId() const;
00290
00295 void registerObserver( Observer * );
00299 void unRegisterObserver( Observer * );
00304 void updated();
00305 void updatedSilent();
00306
00312 void startUpdates();
00313
00319 void endUpdates();
00320
00326 void cancelUpdates();
00327
00328
00329 QPtrList<Observer> observers() const;
00330
00340 QMap<IncidenceBase::Field,bool> dirtyFields() const;
00341
00346 void resetDirtyFields();
00347
00354 void setFieldDirty( IncidenceBase::Field field );
00355 protected:
00360 virtual void customPropertyUpdated();
00361
00362 bool mReadOnly;
00363
00364 private:
00365
00366 QMap<Field, bool> mDirtyFields;
00367
00368 QDateTime mDtStart;
00369 Person mOrganizer;
00370 QString mUid;
00371 QDateTime mLastModified;
00372 Attendee::List mAttendees;
00373 QStringList mComments;
00374
00375 bool mFloats;
00376
00377 int mDuration;
00378 bool mHasDuration;
00379
00380
00381 unsigned long mPilotId;
00382 int mSyncStatus;
00383
00384 QPtrList<Observer> mObservers;
00385
00386
00387 int mUpdateGroupLevel;
00388
00389 class Private;
00390 Private *d;
00391 };
00392
00393 }
00394
00395 #endif