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 KCAL_CALENDAR_H
00036 #define KCAL_CALENDAR_H
00037
00038 #include <QtCore/QObject>
00039 #include <QtCore/QString>
00040 #include <QtCore/QList>
00041 #include <QtCore/QMultiHash>
00042
00043 #include <kdatetime.h>
00044
00045 #include "customproperties.h"
00046 #include "event.h"
00047 #include "todo.h"
00048 #include "journal.h"
00049 #include "kcalversion.h"
00050
00051 namespace KCal {
00052
00053 class ICalTimeZone;
00054 class ICalTimeZones;
00055 class CalFilter;
00056 class Person;
00057
00061 enum SortDirection {
00062 SortDirectionAscending,
00063 SortDirectionDescending
00064 };
00065
00069 enum EventSortField {
00070 EventSortUnsorted,
00071 EventSortStartDate,
00072 EventSortEndDate,
00073 EventSortSummary
00074 };
00075
00079 enum TodoSortField {
00080 TodoSortUnsorted,
00081 TodoSortStartDate,
00082 TodoSortDueDate,
00083 TodoSortPriority,
00084 TodoSortPercentComplete,
00085 TodoSortSummary
00086 };
00087
00091 enum JournalSortField {
00092 JournalSortUnsorted,
00093 JournalSortDate,
00094 JournalSortSummary
00095 };
00096
00119 class KCAL_EXPORT Calendar : public QObject, public CustomProperties,
00120 public IncidenceBase::IncidenceObserver
00121 {
00122 Q_OBJECT
00123
00124 public:
00125
00136 explicit Calendar( const KDateTime::Spec &timeSpec );
00137
00151 explicit Calendar( const QString &timeZoneId );
00152
00156 virtual ~Calendar();
00157
00165 void setProductId( const QString &id );
00166
00172 QString productId() const;
00173
00181 void setOwner( const Person &owner );
00182
00190 Person owner() const;
00191
00200 void setTimeSpec( const KDateTime::Spec &timeSpec );
00201
00208 KDateTime::Spec timeSpec() const;
00209
00223 void setTimeZoneId( const QString &timeZoneId );
00224
00232 QString timeZoneId() const;
00233
00248 void setViewTimeSpec( const KDateTime::Spec &timeSpec ) const;
00249
00268 void setViewTimeZoneId( const QString &timeZoneId ) const;
00269
00276 KDateTime::Spec viewTimeSpec() const;
00277
00284 QString viewTimeZoneId() const;
00285
00302 void shiftTimes( const KDateTime::Spec &oldSpec, const KDateTime::Spec &newSpec );
00303
00311 ICalTimeZones *timeZones() const;
00312
00319 void setTimeZones( const ICalTimeZones &zones );
00320
00329 void setModified( bool modified );
00330
00338 bool isModified() const;
00339
00343 virtual void close() = 0;
00344
00350 virtual bool save() = 0;
00351
00358 virtual bool reload() = 0;
00359
00365 virtual bool isSaving();
00366
00372 QStringList categories();
00373
00374
00375
00385 virtual bool addIncidence( Incidence *incidence );
00386
00396 virtual bool deleteIncidence( Incidence *incidence );
00397
00403 virtual Incidence::List incidences();
00404
00412 virtual Incidence::List incidences( const QDate &date );
00413
00419 virtual Incidence::List rawIncidences();
00420
00429 Incidence *incidence( const QString &uid );
00430
00439 Incidence *incidenceFromSchedulingID( const QString &sid );
00440
00447 Incidence::List incidencesFromSchedulingID( const QString &sid );
00448
00458 static Incidence::List mergeIncidenceList( const Event::List &events,
00459 const Todo::List &todos,
00460 const Journal::List &journals );
00461
00467 virtual bool beginChange( Incidence *incidence );
00468
00474 virtual bool endChange( Incidence *incidence );
00475
00493 Incidence *dissociateOccurrence( Incidence *incidence, const QDate &date,
00494 const KDateTime::Spec &spec,
00495 bool single = true );
00496
00497
00498
00508 virtual bool addEvent( Event *event ) = 0;
00509
00519 virtual bool deleteEvent( Event *event ) = 0;
00520
00525 virtual void deleteAllEvents() = 0;
00526
00536 static Event::List sortEvents( Event::List *eventList,
00537 EventSortField sortField,
00538 SortDirection sortDirection );
00547 virtual Event::List events(
00548 EventSortField sortField = EventSortUnsorted,
00549 SortDirection sortDirection = SortDirectionAscending );
00550
00558 Event::List events( const KDateTime &dt );
00559
00573 Event::List events( const QDate &start, const QDate &end,
00574 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00575 bool inclusive = false );
00576
00590 Event::List events(
00591 const QDate &date,
00592 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00593 EventSortField sortField = EventSortUnsorted,
00594 SortDirection sortDirection = SortDirectionAscending );
00595
00604 virtual Event::List rawEvents(
00605 EventSortField sortField = EventSortUnsorted,
00606 SortDirection sortDirection = SortDirectionAscending ) = 0;
00607
00617 virtual Event::List rawEventsForDate( const KDateTime &dt ) = 0;
00618
00632 virtual Event::List rawEvents( const QDate &start, const QDate &end,
00633 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00634 bool inclusive = false ) = 0;
00635
00649 virtual Event::List rawEventsForDate(
00650 const QDate &date, const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00651 EventSortField sortField = EventSortUnsorted,
00652 SortDirection sortDirection = SortDirectionAscending ) = 0;
00653
00662 virtual Event *event( const QString &uid ) = 0;
00663
00664
00665
00675 virtual bool addTodo( Todo *todo ) = 0;
00676
00686 virtual bool deleteTodo( Todo *todo ) = 0;
00687
00692 virtual void deleteAllTodos() = 0;
00693
00703 static Todo::List sortTodos( Todo::List *todoList,
00704 TodoSortField sortField,
00705 SortDirection sortDirection );
00706
00715 virtual Todo::List todos(
00716 TodoSortField sortField = TodoSortUnsorted,
00717 SortDirection sortDirection = SortDirectionAscending );
00718
00726 virtual Todo::List todos( const QDate &date );
00727
00736 virtual Todo::List rawTodos(
00737 TodoSortField sortField = TodoSortUnsorted,
00738 SortDirection sortDirection = SortDirectionAscending ) = 0;
00739
00747 virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00748
00757 virtual Todo *todo( const QString &uid ) = 0;
00758
00759
00760
00770 virtual bool addJournal( Journal *journal ) = 0;
00771
00781 virtual bool deleteJournal( Journal *journal ) = 0;
00782
00787 virtual void deleteAllJournals() = 0;
00788
00798 static Journal::List sortJournals( Journal::List *journalList,
00799 JournalSortField sortField,
00800 SortDirection sortDirection );
00809 virtual Journal::List journals(
00810 JournalSortField sortField = JournalSortUnsorted,
00811 SortDirection sortDirection = SortDirectionAscending );
00812
00820 virtual Journal::List journals( const QDate &date );
00821
00830 virtual Journal::List rawJournals(
00831 JournalSortField sortField = JournalSortUnsorted,
00832 SortDirection sortDirection = SortDirectionAscending ) = 0;
00833
00841 virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00842
00851 virtual Journal *journal( const QString &uid ) = 0;
00852
00853
00854
00861 virtual void setupRelations( Incidence *incidence );
00862
00869 virtual void removeRelations( Incidence *incidence );
00870
00871
00872
00881 void setFilter( CalFilter *filter );
00882
00891 CalFilter *filter();
00892
00893
00894
00903 virtual Alarm::List alarms( const KDateTime &from,
00904 const KDateTime &to ) = 0;
00905
00906
00907
00913 class KCAL_EXPORT CalendarObserver
00914 {
00915 public:
00919 virtual ~CalendarObserver() {}
00920
00928 virtual void calendarModified( bool modified, Calendar *calendar );
00929
00935 virtual void calendarIncidenceAdded( Incidence *incidence );
00936
00942 virtual void calendarIncidenceChanged( Incidence *incidence );
00943
00949 virtual void calendarIncidenceDeleted( Incidence *incidence );
00950 };
00951
00960 void registerObserver( CalendarObserver *observer );
00961
00970 void unregisterObserver( CalendarObserver *observer );
00971
00972 using QObject::event;
00973
00974 Q_SIGNALS:
00978 void calendarChanged();
00979
00983 void calendarSaved();
00984
00988 void calendarLoaded();
00989
00990 protected:
00996 void incidenceUpdated( IncidenceBase *incidenceBase );
00997
01004 virtual void doSetTimeSpec( const KDateTime::Spec &timeSpec );
01005
01011 void notifyIncidenceAdded( Incidence *incidence );
01012
01018 void notifyIncidenceChanged( Incidence *incidence );
01019
01025 void notifyIncidenceDeleted( Incidence *incidence );
01026
01031 virtual void customPropertyUpdated();
01032
01039 void setObserversEnabled( bool enabled );
01040
01050 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
01051 const KDateTime &from, const KDateTime &to );
01052
01062 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
01063 const KDateTime &from, const KDateTime &to );
01064
01065 private:
01066
01067 class Private;
01068 Private *const d;
01069
01070
01071 Q_DISABLE_COPY( Calendar )
01072 };
01073
01074 }
01075
01076 #endif