KCal Library
calendar.h
Go to the documentation of this file.
00001 /* 00002 This file is part of the kcal library. 00003 00004 Copyright (c) 1998 Preston Brown <pbrown@kde.org> 00005 Copyright (c) 2001,2003,2004 Cornelius Schumacher <schumacher@kde.org> 00006 Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> 00007 Copyright (c) 2006 David Jarvie <software@astrojar.org.uk> 00008 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU Library General Public 00011 License as published by the Free Software Foundation; either 00012 version 2 of the License, or (at your option) any later version. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Library General Public License for more details. 00018 00019 You should have received a copy of the GNU Library General Public License 00020 along with this library; see the file COPYING.LIB. If not, write to 00021 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00022 Boston, MA 02110-1301, USA. 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 // Incidence Specific Methods // 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 // Event Specific Methods // 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 // Todo Specific Methods // 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 // Journal Specific Methods // 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 // Relations Specific Methods // 00898 00905 virtual void setupRelations( Incidence *incidence ); 00906 00913 virtual void removeRelations( Incidence *incidence ); 00914 00921 bool isAncestorOf( Incidence *ancestor, Incidence *incidence ); 00922 00923 // Filter Specific Methods // 00924 00934 void setFilter( CalFilter *filter ); 00935 00944 CalFilter *filter(); 00945 00946 // Alarm Specific Methods // 00947 00956 virtual Alarm::List alarms( const KDateTime &from, 00957 const KDateTime &to ) = 0; 00958 00959 // Observer Specific Methods // 00960 00966 class KCAL_EXPORT_DEPRECATED CalendarObserver //krazy:exclude=dpointer 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; // prevent warning about hidden virtual method 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 //@cond PRIVATE 01132 class Private; 01133 Private *const d; 01134 //@endcond 01135 01136 Q_DISABLE_COPY( Calendar ) 01137 }; 01138 01139 } 01140 01141 #endif