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 <qobject.h>
00035 #include <qstring.h>
00036 #include <qdatetime.h>
00037 #include <qptrlist.h>
00038 #include <qdict.h>
00039 #include <kdepimmacros.h>
00040
00041 #include "customproperties.h"
00042 #include "event.h"
00043 #include "todo.h"
00044 #include "journal.h"
00045 #include "kcalversion.h"
00046 #include "person.h"
00047
00052 namespace KCal {
00053
00054 class CalFilter;
00055
00060 enum SortDirection
00061 {
00063 SortDirectionAscending,
00065 SortDirectionDescending
00066 };
00067
00072 enum EventSortField
00073 {
00075 EventSortUnsorted,
00077 EventSortStartDate,
00079 EventSortEndDate,
00081 EventSortSummary
00082 };
00083
00088 enum TodoSortField
00089 {
00091 TodoSortUnsorted,
00093 TodoSortStartDate,
00095 TodoSortDueDate,
00097 TodoSortPriority,
00099 TodoSortPercentComplete,
00101 TodoSortSummary
00102 };
00103
00108 enum JournalSortField
00109 {
00111 JournalSortUnsorted,
00113 JournalSortDate,
00115 JournalSortSummary
00116 };
00117
00167 class LIBKCAL_EXPORT Calendar : public QObject, public CustomProperties,
00168 public IncidenceBase::Observer
00169 {
00170 Q_OBJECT
00171
00172 public:
00173
00188 Calendar( const QString &timeZoneId );
00189
00193 virtual ~Calendar();
00194
00200 void setProductId( const QString &productId );
00201
00207 QString productId();
00208
00214 void setOwner( const Person &owner );
00215
00221 const Person &getOwner() const;
00222
00237 void setTimeZoneId( const QString &timeZoneId );
00238
00245 virtual void setTimeZoneIdViewOnly( const QString &timeZoneId ) = 0;
00246
00252 QString timeZoneId() const;
00253
00257 void setLocalTime();
00258
00265 bool isLocalTime() const;
00266
00273 void setModified( bool modified );
00274
00280 bool isModified() const { return mModified; }
00281
00285 virtual void close() = 0;
00286
00290 virtual void save() = 0;
00291
00297 virtual bool reload( const QString &tz ) = 0;
00298
00304 virtual bool isSaving() { return false; }
00305
00311 QStringList categories();
00312
00313
00314
00322 virtual bool addIncidence( Incidence *incidence );
00323
00331 virtual bool deleteIncidence( Incidence *incidence );
00332
00338 virtual Incidence::List incidences();
00339
00347 virtual Incidence::List incidences( const QDate &date );
00348
00354 virtual Incidence::List rawIncidences();
00355
00364 Incidence *incidence( const QString &uid );
00365
00374 Incidence *incidenceFromSchedulingID( const QString &sid );
00375
00380 Incidence::List incidencesFromSchedulingID( const QString &UID );
00381
00391 static Incidence::List mergeIncidenceList( const Event::List &events,
00392 const Todo::List &todos,
00393 const Journal::List &journals );
00394
00400 virtual bool beginChange( Incidence *incidence );
00401
00407 virtual bool endChange( Incidence *incidence );
00408
00425 Incidence *dissociateOccurrence( Incidence *incidence, QDate date,
00426 bool single = true );
00427
00428
00429
00437 virtual bool addEvent( Event *event ) = 0;
00438
00446 virtual bool deleteEvent( Event *event ) = 0;
00447
00457 static Event::List sortEvents( Event::List *eventList,
00458 EventSortField sortField,
00459 SortDirection sortDirection );
00460
00471 static Event::List sortEventsForDate( Event::List *eventList,
00472 const QDate &date,
00473 EventSortField sortField,
00474 SortDirection sortDirection );
00475
00484 virtual Event::List events(
00485 EventSortField sortField = EventSortUnsorted,
00486 SortDirection sortDirection = SortDirectionAscending );
00487
00495 Event::List events( const QDateTime &qdt );
00496
00508 Event::List events( const QDate &start, const QDate &end,
00509 bool inclusive = false);
00510
00522 Event::List events(
00523 const QDate &date,
00524 EventSortField sortField = EventSortUnsorted,
00525 SortDirection sortDirection = SortDirectionAscending );
00526
00535 virtual Event::List rawEvents(
00536 EventSortField sortField = EventSortUnsorted,
00537 SortDirection sortDirection = SortDirectionAscending ) = 0;
00538
00548 virtual Event::List rawEventsForDate( const QDateTime &qdt ) = 0;
00549
00561 virtual Event::List rawEvents( const QDate &start, const QDate &end,
00562 bool inclusive = false ) = 0;
00563
00575 virtual Event::List rawEventsForDate(
00576 const QDate &date,
00577 EventSortField sortField = EventSortUnsorted,
00578 SortDirection sortDirection = SortDirectionAscending ) = 0;
00579
00588 virtual Event *event( const QString &uid ) = 0;
00589
00590
00591
00599 virtual bool addTodo( Todo *todo ) = 0;
00600
00608 virtual bool deleteTodo( Todo *todo ) = 0;
00609
00619 static Todo::List sortTodos( Todo::List *todoList,
00620 TodoSortField sortField,
00621 SortDirection sortDirection );
00622
00631 virtual Todo::List todos(
00632 TodoSortField sortField = TodoSortUnsorted,
00633 SortDirection sortDirection = SortDirectionAscending );
00634
00642 virtual Todo::List todos( const QDate &date );
00643
00652 virtual Todo::List rawTodos(
00653 TodoSortField sortField = TodoSortUnsorted,
00654 SortDirection sortDirection = SortDirectionAscending ) = 0;
00655
00663 virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00664
00673 virtual Todo *todo( const QString &uid ) = 0;
00674
00675
00676
00684 virtual bool addJournal( Journal *journal ) = 0;
00685
00693 virtual bool deleteJournal( Journal *journal ) = 0;
00694
00704 static Journal::List sortJournals( Journal::List *journalList,
00705 JournalSortField sortField,
00706 SortDirection sortDirection );
00715 virtual Journal::List journals(
00716 JournalSortField sortField = JournalSortUnsorted,
00717 SortDirection sortDirection = SortDirectionAscending );
00718
00726 virtual Journal::List journals( const QDate &date );
00727
00736 virtual Journal::List rawJournals(
00737 JournalSortField sortField = JournalSortUnsorted,
00738 SortDirection sortDirection = SortDirectionAscending ) = 0;
00739
00747 virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00748
00757 virtual Journal *journal( const QString &uid ) = 0;
00758
00771 void beginBatchAdding();
00772
00781 void endBatchAdding();
00782
00783
00784
00791 virtual void setupRelations( Incidence *incidence );
00792
00799 virtual void removeRelations( Incidence *incidence );
00800
00801
00802
00809 void setFilter( CalFilter *filter );
00810
00817 CalFilter *filter();
00818
00819
00820
00829 virtual Alarm::List alarms( const QDateTime &from,
00830 const QDateTime &to ) = 0;
00831
00832
00833
00839 class Observer
00840 {
00841 public:
00842 virtual ~Observer() {}
00850 virtual void calendarModified( bool ,
00851 Calendar * ) {};
00852
00858 virtual void calendarIncidenceAdded( Incidence * ) {}
00859
00865 virtual void calendarIncidenceChanged( Incidence * ) {}
00866
00872 virtual void calendarIncidenceDeleted( Incidence * ) {}
00873 };
00874
00881 void registerObserver( Observer *observer );
00882
00889 void unregisterObserver( Observer *observer );
00890
00891 signals:
00895 void calendarChanged();
00896
00900 void calendarSaved();
00901
00905 void calendarLoaded();
00906
00911 void batchAddingBegins();
00912
00917 void batchAddingEnds();
00918
00919 protected:
00925 void incidenceUpdated( IncidenceBase *incidenceBase );
00926
00939 virtual void doSetTimeZoneId( const QString & ) {}
00940
00946 void notifyIncidenceAdded( Incidence *incidence );
00947
00953 void notifyIncidenceChanged( Incidence *incidence );
00954
00960 void notifyIncidenceDeleted( Incidence *incidence );
00961
00966 virtual void customPropertyUpdated();
00967
00974 void setObserversEnabled( bool enabled );
00975
00976
00977
00978
00979
00980 private:
00984 void init();
00985
00986 QString mProductId;
00987 Person mOwner;
00988 QString mTimeZoneId;
00989 bool mLocalTime;
00990
00991 bool mModified;
00992
00993 CalFilter *mFilter;
00994 CalFilter *mDefaultFilter;
00995
00996 QPtrList<Observer> mObservers;
00997 bool mNewObserver;
00998 bool mObserversEnabled;
00999
01000
01001 QDict<Incidence> mOrphans;
01002 QDict<Incidence> mOrphanUids;
01003
01004 class Private;
01005 Private *d;
01006 };
01007
01008 }
01009
01010 #endif