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
00385 static Incidence::List mergeIncidenceList( const Event::List &events,
00386 const Todo::List &todos,
00387 const Journal::List &journals );
00388
00394 virtual bool beginChange( Incidence *incidence );
00395
00401 virtual bool endChange( Incidence *incidence );
00402
00419 Incidence *dissociateOccurrence( Incidence *incidence, QDate date,
00420 bool single = true );
00421
00422
00423
00431 virtual bool addEvent( Event *event ) = 0;
00432
00440 virtual bool deleteEvent( Event *event ) = 0;
00441
00451 static Event::List sortEvents( Event::List *eventList,
00452 EventSortField sortField,
00453 SortDirection sortDirection );
00462 virtual Event::List events(
00463 EventSortField sortField = EventSortUnsorted,
00464 SortDirection sortDirection = SortDirectionAscending );
00465
00473 Event::List events( const QDateTime &qdt );
00474
00486 Event::List events( const QDate &start, const QDate &end,
00487 bool inclusive = false);
00488
00500 Event::List events(
00501 const QDate &date,
00502 EventSortField sortField = EventSortUnsorted,
00503 SortDirection sortDirection = SortDirectionAscending );
00504
00513 virtual Event::List rawEvents(
00514 EventSortField sortField = EventSortUnsorted,
00515 SortDirection sortDirection = SortDirectionAscending ) = 0;
00516
00526 virtual Event::List rawEventsForDate( const QDateTime &qdt ) = 0;
00527
00539 virtual Event::List rawEvents( const QDate &start, const QDate &end,
00540 bool inclusive = false ) = 0;
00541
00553 virtual Event::List rawEventsForDate(
00554 const QDate &date,
00555 EventSortField sortField = EventSortUnsorted,
00556 SortDirection sortDirection = SortDirectionAscending ) = 0;
00557
00566 virtual Event *event( const QString &uid ) = 0;
00567
00568
00569
00577 virtual bool addTodo( Todo *todo ) = 0;
00578
00586 virtual bool deleteTodo( Todo *todo ) = 0;
00587
00597 static Todo::List sortTodos( Todo::List *todoList,
00598 TodoSortField sortField,
00599 SortDirection sortDirection );
00600
00609 virtual Todo::List todos(
00610 TodoSortField sortField = TodoSortUnsorted,
00611 SortDirection sortDirection = SortDirectionAscending );
00612
00620 virtual Todo::List todos( const QDate &date );
00621
00630 virtual Todo::List rawTodos(
00631 TodoSortField sortField = TodoSortUnsorted,
00632 SortDirection sortDirection = SortDirectionAscending ) = 0;
00633
00641 virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00642
00651 virtual Todo *todo( const QString &uid ) = 0;
00652
00653
00654
00662 virtual bool addJournal( Journal *journal ) = 0;
00663
00671 virtual bool deleteJournal( Journal *journal ) = 0;
00672
00682 static Journal::List sortJournals( Journal::List *journalList,
00683 JournalSortField sortField,
00684 SortDirection sortDirection );
00693 virtual Journal::List journals(
00694 JournalSortField sortField = JournalSortUnsorted,
00695 SortDirection sortDirection = SortDirectionAscending );
00696
00704 virtual Journal::List journals( const QDate &date );
00705
00714 virtual Journal::List rawJournals(
00715 JournalSortField sortField = JournalSortUnsorted,
00716 SortDirection sortDirection = SortDirectionAscending ) = 0;
00717
00725 virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00726
00735 virtual Journal *journal( const QString &uid ) = 0;
00736
00737
00738
00745 virtual void setupRelations( Incidence *incidence );
00746
00753 virtual void removeRelations( Incidence *incidence );
00754
00755
00756
00763 void setFilter( CalFilter *filter );
00764
00771 CalFilter *filter();
00772
00773
00774
00783 virtual Alarm::List alarms( const QDateTime &from,
00784 const QDateTime &to ) = 0;
00785
00786
00787
00793 class Observer
00794 {
00795 public:
00796 virtual ~Observer() {}
00804 virtual void calendarModified( bool ,
00805 Calendar * ) {};
00806
00812 virtual void calendarIncidenceAdded( Incidence * ) {}
00813
00819 virtual void calendarIncidenceChanged( Incidence * ) {}
00820
00826 virtual void calendarIncidenceDeleted( Incidence * ) {}
00827 };
00828
00835 void registerObserver( Observer *observer );
00836
00843 void unregisterObserver( Observer *observer );
00844
00845 signals:
00849 void calendarChanged();
00850
00854 void calendarSaved();
00855
00859 void calendarLoaded();
00860
00861 protected:
00867 void incidenceUpdated( IncidenceBase *incidenceBase );
00868
00881 virtual void doSetTimeZoneId( const QString & ) {}
00882
00888 void notifyIncidenceAdded( Incidence *incidence );
00889
00895 void notifyIncidenceChanged( Incidence *incidence );
00896
00902 void notifyIncidenceDeleted( Incidence *incidence );
00903
00908 virtual void customPropertyUpdated();
00909
00916 void setObserversEnabled( bool enabled );
00917
00918
00919
00920
00921
00922 private:
00926 void init();
00927
00928 QString mProductId;
00929 Person mOwner;
00930 QString mTimeZoneId;
00931 bool mLocalTime;
00932
00933 bool mModified;
00934
00935 CalFilter *mFilter;
00936 CalFilter *mDefaultFilter;
00937
00938 QPtrList<Observer> mObservers;
00939 bool mNewObserver;
00940 bool mObserversEnabled;
00941
00942
00943 QDict<Incidence> mOrphans;
00944 QDict<Incidence> mOrphanUids;
00945
00946 class Private;
00947 Private *d;
00948 };
00949
00950 }
00951
00952 #endif