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_DEPRECATED 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 );
00539
00553 static Event::List sortEventsForDate( Event::List *eventList,
00554 const QDate &date,
00555 const KDateTime::Spec &timeSpec,
00556 EventSortField sortField,
00557 SortDirection sortDirection );
00558
00567 virtual Event::List events(
00568 EventSortField sortField = EventSortUnsorted,
00569 SortDirection sortDirection = SortDirectionAscending );
00570
00578 Event::List events( const KDateTime &dt );
00579
00593 Event::List events( const QDate &start, const QDate &end,
00594 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00595 bool inclusive = false );
00596
00610 Event::List events(
00611 const QDate &date,
00612 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00613 EventSortField sortField = EventSortUnsorted,
00614 SortDirection sortDirection = SortDirectionAscending );
00615
00624 virtual Event::List rawEvents(
00625 EventSortField sortField = EventSortUnsorted,
00626 SortDirection sortDirection = SortDirectionAscending ) = 0;
00627
00637 virtual Event::List rawEventsForDate( const KDateTime &dt ) = 0;
00638
00652 virtual Event::List rawEvents( const QDate &start, const QDate &end,
00653 const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00654 bool inclusive = false ) = 0;
00655
00669 virtual Event::List rawEventsForDate(
00670 const QDate &date, const KDateTime::Spec &timeSpec = KDateTime::Spec(),
00671 EventSortField sortField = EventSortUnsorted,
00672 SortDirection sortDirection = SortDirectionAscending ) = 0;
00673
00682 virtual Event *event( const QString &uid ) = 0;
00683
00684
00685
00695 virtual bool addTodo( Todo *todo ) = 0;
00696
00706 virtual bool deleteTodo( Todo *todo ) = 0;
00707
00712 virtual void deleteAllTodos() = 0;
00713
00723 static Todo::List sortTodos( Todo::List *todoList,
00724 TodoSortField sortField,
00725 SortDirection sortDirection );
00726
00735 virtual Todo::List todos(
00736 TodoSortField sortField = TodoSortUnsorted,
00737 SortDirection sortDirection = SortDirectionAscending );
00738
00746 virtual Todo::List todos( const QDate &date );
00747
00756 virtual Todo::List rawTodos(
00757 TodoSortField sortField = TodoSortUnsorted,
00758 SortDirection sortDirection = SortDirectionAscending ) = 0;
00759
00767 virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00768
00777 virtual Todo *todo( const QString &uid ) = 0;
00778
00779
00780
00790 virtual bool addJournal( Journal *journal ) = 0;
00791
00801 virtual bool deleteJournal( Journal *journal ) = 0;
00802
00807 virtual void deleteAllJournals() = 0;
00808
00818 static Journal::List sortJournals( Journal::List *journalList,
00819 JournalSortField sortField,
00820 SortDirection sortDirection );
00829 virtual Journal::List journals(
00830 JournalSortField sortField = JournalSortUnsorted,
00831 SortDirection sortDirection = SortDirectionAscending );
00832
00840 virtual Journal::List journals( const QDate &date );
00841
00850 virtual Journal::List rawJournals(
00851 JournalSortField sortField = JournalSortUnsorted,
00852 SortDirection sortDirection = SortDirectionAscending ) = 0;
00853
00861 virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00862
00871 virtual Journal *journal( const QString &uid ) = 0;
00872
00885 void beginBatchAdding();
00886
00895 void endBatchAdding();
00896
00897
00898
00905 virtual void setupRelations( Incidence *incidence );
00906
00913 virtual void removeRelations( Incidence *incidence );
00914
00921 bool isAncestorOf( Incidence *ancestor, Incidence *incidence );
00922
00923
00924
00934 void setFilter( CalFilter *filter );
00935
00944 CalFilter *filter();
00945
00946
00947
00956 virtual Alarm::List alarms( const KDateTime &from,
00957 const KDateTime &to ) = 0;
00958
00959
00960
00966 class KCAL_EXPORT_DEPRECATED CalendarObserver
00967 {
00968 public:
00972 virtual ~CalendarObserver() {}
00973
00981 virtual void calendarModified( bool modified, Calendar *calendar );
00982
00988 virtual void calendarIncidenceAdded( Incidence *incidence );
00989
00995 virtual void calendarIncidenceChanged( Incidence *incidence );
00996
01002 virtual void calendarIncidenceDeleted( Incidence *incidence );
01003 };
01004
01013 void registerObserver( CalendarObserver *observer );
01014
01023 void unregisterObserver( CalendarObserver *observer );
01024
01025 using QObject::event;
01026
01027 Q_SIGNALS:
01031 void calendarChanged();
01032
01036 void calendarSaved();
01037
01041 void calendarLoaded();
01042
01047 void batchAddingBegins();
01048
01053 void batchAddingEnds();
01054
01055 protected:
01061 void incidenceUpdated( IncidenceBase *incidenceBase );
01062
01069 virtual void doSetTimeSpec( const KDateTime::Spec &timeSpec );
01070
01076 void notifyIncidenceAdded( Incidence *incidence );
01077
01083 void notifyIncidenceChanged( Incidence *incidence );
01084
01090 void notifyIncidenceDeleted( Incidence *incidence );
01091
01096 virtual void customPropertyUpdated();
01097
01104 void setObserversEnabled( bool enabled );
01105
01115 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
01116 const KDateTime &from, const KDateTime &to );
01117
01127 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
01128 const KDateTime &from, const KDateTime &to );
01129
01130 private:
01131
01132 class Private;
01133 Private *const d;
01134
01135
01136 Q_DISABLE_COPY( Calendar )
01137 };
01138
01139 }
01140
01141 #endif