00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00031 #ifndef KCAL_CALENDAR_H
00032 #define KCAL_CALENDAR_H
00033
00034 #include "exceptions.h"
00035 #include "customproperties.h"
00036 #include "event.h"
00037 #include "todo.h"
00038 #include "journal.h"
00039 #include "kcalversion.h"
00040 #include "person.h"
00041
00042 #include <kdepimmacros.h>
00043
00044 #include <qobject.h>
00045 #include <qstring.h>
00046 #include <qdatetime.h>
00047 #include <qptrlist.h>
00048 #include <qdict.h>
00049
00054 namespace KCal {
00055
00056 class CalFilter;
00057
00062 enum SortDirection
00063 {
00065 SortDirectionAscending,
00067 SortDirectionDescending
00068 };
00069
00074 enum EventSortField
00075 {
00077 EventSortUnsorted,
00079 EventSortStartDate,
00081 EventSortEndDate,
00083 EventSortSummary
00084 };
00085
00090 enum TodoSortField
00091 {
00093 TodoSortUnsorted,
00095 TodoSortStartDate,
00097 TodoSortDueDate,
00099 TodoSortPriority,
00101 TodoSortPercentComplete,
00103 TodoSortSummary
00104 };
00105
00110 enum JournalSortField
00111 {
00113 JournalSortUnsorted,
00115 JournalSortDate,
00117 JournalSortSummary
00118 };
00119
00169 class LIBKCAL_EXPORT Calendar : public QObject, public CustomProperties,
00170 public IncidenceBase::Observer
00171 {
00172 Q_OBJECT
00173
00174 public:
00175
00190 Calendar( const QString &timeZoneId );
00191
00195 virtual ~Calendar();
00196
00202 void setProductId( const QString &productId );
00203
00209 QString productId();
00210
00214 void clearException();
00215
00220 ErrorFormat *exception() const;
00221
00227 void setOwner( const Person &owner );
00228
00234 const Person &getOwner() const;
00235
00250 void setTimeZoneId( const QString &timeZoneId );
00251
00258 virtual void setTimeZoneIdViewOnly( const QString &timeZoneId ) = 0;
00259
00265 QString timeZoneId() const;
00266
00270 void setLocalTime();
00271
00278 bool isLocalTime() const;
00279
00286 void setModified( bool modified );
00287
00293 bool isModified() const { return mModified; }
00294
00298 virtual void close() = 0;
00299
00303 virtual void save() = 0;
00304
00310 virtual bool reload( const QString &tz ) = 0;
00311
00317 virtual bool isSaving() { return false; }
00318
00324 QStringList categories();
00325
00326
00327
00335 virtual bool addIncidence( Incidence *incidence );
00336
00344 virtual bool deleteIncidence( Incidence *incidence );
00345
00351 virtual Incidence::List incidences();
00352
00360 virtual Incidence::List incidences( const QDate &date );
00361
00367 virtual Incidence::List rawIncidences();
00368
00377 Incidence *incidence( const QString &uid );
00378
00387 Incidence *incidenceFromSchedulingID( const QString &sid );
00388
00393 Incidence::List incidencesFromSchedulingID( const QString &UID );
00394
00404 static Incidence::List mergeIncidenceList( const Event::List &events,
00405 const Todo::List &todos,
00406 const Journal::List &journals );
00407
00413 virtual bool beginChange( Incidence *incidence );
00414
00420 virtual bool endChange( Incidence *incidence );
00421
00438 Incidence *dissociateOccurrence( Incidence *incidence, QDate date,
00439 bool single = true );
00440
00441
00442
00450 virtual bool addEvent( Event *event ) = 0;
00451
00459 virtual bool deleteEvent( Event *event ) = 0;
00460
00470 static Event::List sortEvents( Event::List *eventList,
00471 EventSortField sortField,
00472 SortDirection sortDirection );
00473
00484 static Event::List sortEventsForDate( Event::List *eventList,
00485 const QDate &date,
00486 EventSortField sortField,
00487 SortDirection sortDirection );
00488
00497 virtual Event::List events(
00498 EventSortField sortField = EventSortUnsorted,
00499 SortDirection sortDirection = SortDirectionAscending );
00500
00508 Event::List events( const QDateTime &qdt );
00509
00521 Event::List events( const QDate &start, const QDate &end,
00522 bool inclusive = false);
00523
00535 Event::List events(
00536 const QDate &date,
00537 EventSortField sortField = EventSortUnsorted,
00538 SortDirection sortDirection = SortDirectionAscending );
00539
00548 virtual Event::List rawEvents(
00549 EventSortField sortField = EventSortUnsorted,
00550 SortDirection sortDirection = SortDirectionAscending ) = 0;
00551
00561 virtual Event::List rawEventsForDate( const QDateTime &qdt ) = 0;
00562
00574 virtual Event::List rawEvents( const QDate &start, const QDate &end,
00575 bool inclusive = false ) = 0;
00576
00588 virtual Event::List rawEventsForDate(
00589 const QDate &date,
00590 EventSortField sortField = EventSortUnsorted,
00591 SortDirection sortDirection = SortDirectionAscending ) = 0;
00592
00601 virtual Event *event( const QString &uid ) = 0;
00602
00603
00604
00612 virtual bool addTodo( Todo *todo ) = 0;
00613
00621 virtual bool deleteTodo( Todo *todo ) = 0;
00622
00632 static Todo::List sortTodos( Todo::List *todoList,
00633 TodoSortField sortField,
00634 SortDirection sortDirection );
00635
00644 virtual Todo::List todos(
00645 TodoSortField sortField = TodoSortUnsorted,
00646 SortDirection sortDirection = SortDirectionAscending );
00647
00655 virtual Todo::List todos( const QDate &date );
00656
00665 virtual Todo::List rawTodos(
00666 TodoSortField sortField = TodoSortUnsorted,
00667 SortDirection sortDirection = SortDirectionAscending ) = 0;
00668
00676 virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00677
00686 virtual Todo *todo( const QString &uid ) = 0;
00687
00688
00689
00697 virtual bool addJournal( Journal *journal ) = 0;
00698
00706 virtual bool deleteJournal( Journal *journal ) = 0;
00707
00717 static Journal::List sortJournals( Journal::List *journalList,
00718 JournalSortField sortField,
00719 SortDirection sortDirection );
00728 virtual Journal::List journals(
00729 JournalSortField sortField = JournalSortUnsorted,
00730 SortDirection sortDirection = SortDirectionAscending );
00731
00739 virtual Journal::List journals( const QDate &date );
00740
00749 virtual Journal::List rawJournals(
00750 JournalSortField sortField = JournalSortUnsorted,
00751 SortDirection sortDirection = SortDirectionAscending ) = 0;
00752
00760 virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00761
00770 virtual Journal *journal( const QString &uid ) = 0;
00771
00784 void beginBatchAdding();
00785
00794 void endBatchAdding();
00795
00796
00797
00804 virtual void setupRelations( Incidence *incidence );
00805
00812 virtual void removeRelations( Incidence *incidence );
00813
00814
00815
00822 void setFilter( CalFilter *filter );
00823
00830 CalFilter *filter();
00831
00832
00833
00842 virtual Alarm::List alarms( const QDateTime &from,
00843 const QDateTime &to ) = 0;
00844
00845
00846
00852 class Observer
00853 {
00854 public:
00855 virtual ~Observer() {}
00863 virtual void calendarModified( bool ,
00864 Calendar * ) {};
00865
00871 virtual void calendarIncidenceAdded( Incidence * ) {}
00872
00878 virtual void calendarIncidenceChanged( Incidence * ) {}
00879
00885 virtual void calendarIncidenceDeleted( Incidence * ) {}
00886 };
00887
00894 void registerObserver( Observer *observer );
00895
00902 void unregisterObserver( Observer *observer );
00903
00904 signals:
00908 void calendarChanged();
00909
00913 void calendarSaved();
00914
00918 void calendarLoaded();
00919
00924 void batchAddingBegins();
00925
00930 void batchAddingEnds();
00931
00932 protected:
00937 void setException( ErrorFormat *e );
00938
00944 void incidenceUpdated( IncidenceBase *incidenceBase );
00945
00958 virtual void doSetTimeZoneId( const QString & ) {}
00959
00965 void notifyIncidenceAdded( Incidence *incidence );
00966
00972 void notifyIncidenceChanged( Incidence *incidence );
00973
00979 void notifyIncidenceDeleted( Incidence *incidence );
00980
00985 virtual void customPropertyUpdated();
00986
00993 void setObserversEnabled( bool enabled );
00994
00995
00996
00997
00998
00999 private:
01000
01004 void init();
01005
01006 QString mProductId;
01007 Person mOwner;
01008 QString mTimeZoneId;
01009 bool mLocalTime;
01010
01011 bool mModified;
01012
01013 CalFilter *mFilter;
01014 CalFilter *mDefaultFilter;
01015
01016 QPtrList<Observer> mObservers;
01017 bool mNewObserver;
01018 bool mObserversEnabled;
01019
01020
01021 QDict<Incidence> mOrphans;
01022 QDict<Incidence> mOrphanUids;
01023
01024 ErrorFormat *mException;
01025 class Private;
01026 Private *d;
01027 };
01028
01029 }
01030
01031 #endif