00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00035 #ifndef KCALCORE_CALENDAR_H
00036 #define KCALCORE_CALENDAR_H
00037
00038 #include "kcalcore_export.h"
00039 #include "event.h"
00040 #include "customproperties.h"
00041 #include "incidence.h"
00042 #include "journal.h"
00043 #include "todo.h"
00044
00045 #include <QtCore/QObject>
00046
00047 namespace KCalCore {
00048
00049 class CalFilter;
00050 class Person;
00051 class ICalTimeZones;
00052
00056 enum SortDirection {
00057 SortDirectionAscending,
00058 SortDirectionDescending
00059 };
00060
00064 enum EventSortField {
00065 EventSortUnsorted,
00066 EventSortStartDate,
00067 EventSortEndDate,
00068 EventSortSummary
00069 };
00070
00074 enum TodoSortField {
00075 TodoSortUnsorted,
00076 TodoSortStartDate,
00077 TodoSortDueDate,
00078 TodoSortPriority,
00079 TodoSortPercentComplete,
00080 TodoSortSummary,
00081 TodoSortCreated
00082 };
00083
00087 enum JournalSortField {
00088 JournalSortUnsorted,
00089 JournalSortDate,
00090 JournalSortSummary
00091 };
00092
00115 class KCALCORE_EXPORT Calendar : public QObject, public CustomProperties,
00116 public IncidenceBase::IncidenceObserver
00117 {
00118 Q_OBJECT
00119
00120 public:
00121
00125 typedef QSharedPointer<Calendar> Ptr;
00126
00137 explicit Calendar( const KDateTime::Spec &timeSpec );
00138
00152 explicit Calendar( const QString &timeZoneId );
00153
00157 virtual ~Calendar();
00158
00166 void setProductId( const QString &id );
00167
00173 QString productId() const;
00174
00182 void setOwner( const Person::Ptr &owner );
00183
00191 Person::Ptr owner() const;
00192
00201 void setTimeSpec( const KDateTime::Spec &timeSpec );
00202
00209 KDateTime::Spec timeSpec() const;
00210
00224 void setTimeZoneId( const QString &timeZoneId );
00225
00233 QString timeZoneId() const;
00234
00249 void setViewTimeSpec( const KDateTime::Spec &timeSpec ) const;
00250
00269 void setViewTimeZoneId( const QString &timeZoneId ) const;
00270
00277 KDateTime::Spec viewTimeSpec() const;
00278
00285 QString viewTimeZoneId() const;
00286
00303 void shiftTimes( const KDateTime::Spec &oldSpec, const KDateTime::Spec &newSpec );
00304
00312 ICalTimeZones *timeZones() const;
00313
00320 void setTimeZones( ICalTimeZones *zones );
00321
00330 void setModified( bool modified );
00331
00339 bool isModified() const;
00340
00344 virtual void close() = 0;
00345
00352 virtual bool save();
00353
00361 virtual bool reload();
00362
00368 virtual bool isSaving() const;
00369
00375 QStringList categories() const;
00376
00377
00378
00385 virtual void startBatchAdding();
00386
00392 virtual void endBatchAdding();
00393
00397 bool batchAdding() const;
00398
00408 virtual bool addIncidence( const Incidence::Ptr &incidence );
00409
00419 virtual bool deleteIncidence( const Incidence::Ptr &incidence );
00420
00426 virtual Incidence::List incidences() const;
00427
00435 virtual Incidence::List incidences( const QDate &date ) const;
00436
00442 virtual Incidence::List rawIncidences() const;
00443
00451 virtual Incidence::List instances( const Incidence::Ptr &incidence ) const;
00452
00453
00454
00459 virtual void clearNotebookAssociations();
00460
00469 virtual bool setNotebook( const Incidence::Ptr &incidence, const QString ¬ebook );
00470
00478 virtual QString notebook( const Incidence::Ptr &incidence ) const;
00479
00487 virtual QString notebook( const QString &uid ) const;
00488
00494 virtual QStringList notebooks() const;
00495
00503 bool hasValidNotebook( const QString ¬ebook ) const;
00504
00514 bool addNotebook( const QString ¬ebook, bool isVisible );
00515
00525 bool updateNotebook( const QString ¬ebook, bool isVisible );
00526
00535 bool deleteNotebook( const QString ¬ebook );
00536
00543 bool setDefaultNotebook( const QString ¬ebook );
00544
00550 QString defaultNotebook() const;
00551
00557 bool isVisible( const Incidence::Ptr &incidence ) const;
00558
00565 virtual Incidence::List incidences( const QString ¬ebook ) const;
00566
00573 virtual Incidence::List duplicates( const Incidence::Ptr &incidence );
00574
00584 Incidence::Ptr incidence( const QString &uid,
00585 const KDateTime &recurrenceId = KDateTime() ) const;
00586
00596 Incidence::Ptr deleted( const QString &uid, const KDateTime &recurrenceId = KDateTime() ) const;
00597
00604 virtual bool deleteIncidenceInstances( const Incidence::Ptr &incidence ) = 0;
00605
00614 virtual Incidence::Ptr incidenceFromSchedulingID( const QString &sid ) const;
00615
00622 virtual Incidence::List incidencesFromSchedulingID( const QString &sid ) const;
00623
00633 static Incidence::List mergeIncidenceList( const Event::List &events,
00634 const Todo::List &todos,
00635 const Journal::List &journals );
00636
00641 virtual bool beginChange( const Incidence::Ptr &incidence );
00642
00647 virtual bool endChange( const Incidence::Ptr &incidence );
00648
00666 Incidence::Ptr dissociateOccurrence( const Incidence::Ptr &incidence, const QDate &date,
00667 const KDateTime::Spec &spec,
00668 bool single = true );
00669
00670
00671
00681 virtual bool addEvent( const Event::Ptr &event ) = 0;
00682
00692 virtual bool deleteEvent( const Event::Ptr &event ) = 0;
00693
00700 virtual bool deleteEventInstances( const Event::Ptr &event ) = 0;
00701
00706 virtual void deleteAllEvents() = 0;
00707
00717 static Event::List sortEvents( const Event::List &eventList,
00718 EventSortField sortField,
00719 SortDirection sortDirection );
00728 virtual Event::List events( EventSortField sortField = EventSortUnsorted,
00729 SortDirection sortDirection = SortDirectionAscending ) const;
00730
00738 Event::List events( const KDateTime &dt ) const;
00739
00753 Event::List events( const QDate &start, const QDate &end,
00754 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00755 bool inclusive = false ) const;
00756
00770 Event::List events( const QDate &date,
00771 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00772 EventSortField sortField = EventSortUnsorted,
00773 SortDirection sortDirection = SortDirectionAscending ) const;
00774
00783 virtual Event::List rawEvents(
00784 EventSortField sortField = EventSortUnsorted,
00785 SortDirection sortDirection = SortDirectionAscending ) const = 0;
00786
00796 virtual Event::List rawEventsForDate( const KDateTime &dt ) const = 0;
00797
00811 virtual Event::List rawEvents( const QDate &start, const QDate &end,
00812 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00813 bool inclusive = false ) const = 0;
00814
00828 virtual Event::List rawEventsForDate(
00829 const QDate &date,
00830 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00831 EventSortField sortField = EventSortUnsorted,
00832 SortDirection sortDirection = SortDirectionAscending ) const = 0;
00833
00843 virtual Event::Ptr event( const QString &uid,
00844 const KDateTime &recurrenceId = KDateTime() ) const = 0;
00845
00855 virtual Event::Ptr deletedEvent( const QString &uid,
00856 const KDateTime &recurrenceId = KDateTime() ) const = 0;
00857
00866 virtual Event::List deletedEvents(
00867 EventSortField sortField = EventSortUnsorted,
00868 SortDirection sortDirection = SortDirectionAscending ) const = 0;
00869
00879 virtual Event::List eventInstances(
00880 const Incidence::Ptr &event,
00881 EventSortField sortField = EventSortUnsorted,
00882 SortDirection sortDirection = SortDirectionAscending ) const = 0;
00883
00884
00885
00895 virtual bool addTodo( const Todo::Ptr &todo ) = 0;
00896
00906 virtual bool deleteTodo( const Todo::Ptr &todo ) = 0;
00907
00913 virtual bool deleteTodoInstances( const Todo::Ptr &todo ) = 0;
00914
00919 virtual void deleteAllTodos() = 0;
00920
00930 static Todo::List sortTodos( const Todo::List &todoList,
00931 TodoSortField sortField,
00932 SortDirection sortDirection );
00933
00942 virtual Todo::List todos( TodoSortField sortField = TodoSortUnsorted,
00943 SortDirection sortDirection = SortDirectionAscending ) const;
00944
00952 virtual Todo::List todos( const QDate &date ) const;
00953
00967 virtual Todo::List todos( const QDate &start, const QDate &end,
00968 const KDateTime::Spec ×pec = KDateTime::Spec(),
00969 bool inclusive = false ) const;
00970
00979 virtual Todo::List rawTodos(
00980 TodoSortField sortField = TodoSortUnsorted,
00981 SortDirection sortDirection = SortDirectionAscending ) const = 0;
00982
00990 virtual Todo::List rawTodosForDate( const QDate &date ) const = 0;
00991
01005 virtual Todo::List rawTodos( const QDate &start, const QDate &end,
01006 const KDateTime::Spec ×pec = KDateTime::Spec(),
01007 bool inclusive = false ) const = 0;
01008
01018 virtual Todo::Ptr todo( const QString &uid,
01019 const KDateTime &recurrenceId = KDateTime() ) const = 0;
01020
01030 virtual Todo::Ptr deletedTodo( const QString &uid,
01031 const KDateTime &recurrenceId = KDateTime() ) const = 0;
01032
01041 virtual Todo::List deletedTodos(
01042 TodoSortField sortField = TodoSortUnsorted,
01043 SortDirection sortDirection = SortDirectionAscending ) const = 0;
01044
01054 virtual Todo::List todoInstances(
01055 const Incidence::Ptr &todo,
01056 TodoSortField sortField = TodoSortUnsorted,
01057 SortDirection sortDirection = SortDirectionAscending ) const = 0;
01058
01059
01060
01070 virtual bool addJournal( const Journal::Ptr &journal ) = 0;
01071
01081 virtual bool deleteJournal( const Journal::Ptr &journal ) = 0;
01082
01089 virtual bool deleteJournalInstances( const Journal::Ptr &journal ) = 0;
01090
01095 virtual void deleteAllJournals() = 0;
01096
01106 static Journal::List sortJournals( const Journal::List &journalList,
01107 JournalSortField sortField,
01108 SortDirection sortDirection );
01117 virtual Journal::List journals(
01118 JournalSortField sortField = JournalSortUnsorted,
01119 SortDirection sortDirection = SortDirectionAscending ) const;
01120
01128 virtual Journal::List journals( const QDate &date ) const;
01129
01138 virtual Journal::List rawJournals(
01139 JournalSortField sortField = JournalSortUnsorted,
01140 SortDirection sortDirection = SortDirectionAscending ) const = 0;
01141
01149 virtual Journal::List rawJournalsForDate( const QDate &date ) const = 0;
01150
01160 virtual Journal::Ptr journal( const QString &uid,
01161 const KDateTime &recurrenceId = KDateTime() ) const = 0;
01162
01172 virtual Journal::Ptr deletedJournal( const QString &uid,
01173 const KDateTime &recurrenceId = KDateTime() ) const = 0;
01174
01183 virtual Journal::List deletedJournals(
01184 JournalSortField sortField = JournalSortUnsorted,
01185 SortDirection sortDirection = SortDirectionAscending ) const = 0;
01186
01196 virtual Journal::List journalInstances(
01197 const Incidence::Ptr &journal,
01198 JournalSortField sortField = JournalSortUnsorted,
01199 SortDirection sortDirection = SortDirectionAscending ) const = 0;
01200
01201
01202
01207 virtual void setupRelations( const Incidence::Ptr &incidence );
01208
01214 virtual void removeRelations( const Incidence::Ptr &incidence );
01215
01222 bool isAncestorOf( const Incidence::Ptr &ancestor,
01223 const Incidence::Ptr &incidence ) const;
01224
01231 Incidence::List relations( const QString &uid ) const;
01232
01233
01234
01244 void setFilter( CalFilter *filter );
01245
01254 CalFilter *filter() const;
01255
01256
01257
01266 virtual Alarm::List alarms( const KDateTime &from, const KDateTime &to ) const = 0;
01267
01268
01269
01275 class KCALCORE_EXPORT CalendarObserver
01276 {
01277 public:
01281 virtual ~CalendarObserver();
01282
01290 virtual void calendarModified( bool modified, Calendar *calendar );
01291
01296 virtual void calendarIncidenceAdded( const Incidence::Ptr &incidence );
01297
01302 virtual void calendarIncidenceChanged( const Incidence::Ptr &incidence );
01303
01308 virtual void calendarIncidenceDeleted( const Incidence::Ptr &incidence );
01309
01314 virtual void calendarIncidenceAdditionCanceled( const Incidence::Ptr &incidence );
01315 };
01316
01325 void registerObserver( CalendarObserver *observer );
01326
01335 void unregisterObserver( CalendarObserver *observer );
01336
01337 using QObject::event;
01338
01339 protected:
01345 void incidenceUpdated( const QString &uid, const KDateTime &recurrenceId );
01346
01352 virtual void doSetTimeSpec( const KDateTime::Spec &timeSpec );
01353
01358 void notifyIncidenceAdded( const Incidence::Ptr &incidence );
01359
01364 void notifyIncidenceChanged( const Incidence::Ptr &incidence );
01365
01370 void notifyIncidenceDeleted( const Incidence::Ptr &incidence );
01371
01376 void notifyIncidenceAdditionCanceled( const Incidence::Ptr &incidence );
01377
01382 virtual void customPropertyUpdated();
01383
01390 void setObserversEnabled( bool enabled );
01391
01401 void appendAlarms( Alarm::List &alarms, const Incidence::Ptr &incidence,
01402 const KDateTime &from, const KDateTime &to ) const;
01403
01413 void appendRecurringAlarms( Alarm::List &alarms, const Incidence::Ptr &incidence,
01414 const KDateTime &from, const KDateTime &to ) const;
01415
01420 virtual void virtual_hook( int id, void *data );
01421
01422 private:
01423
01424 class Private;
01425 Private *const d;
01426
01427
01428 Q_DISABLE_COPY( Calendar )
01429 };
01430
01431 }
01432
01433 #endif