libkcal

calendar.h

Go to the documentation of this file.
00001 /*
00002     This file is part of libkcal.
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 
00008     This library is free software; you can redistribute it and/or
00009     modify it under the terms of the GNU Library General Public
00010     License as published by the Free Software Foundation; either
00011     version 2 of the License, or (at your option) any later version.
00012 
00013     This library is distributed in the hope that it will be useful,
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016     Library General Public License for more details.
00017 
00018     You should have received a copy of the GNU Library General Public License
00019     along with this library; see the file COPYING.LIB.  If not, write to
00020     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00021     Boston, MA 02110-1301, USA.
00022 */
00031 #ifndef KCAL_CALENDAR_H
00032 #define KCAL_CALENDAR_H
00033 
00034 #include "exceptions.h"
00035 #include "customproperties.h"
00036 #include "event.h"
00037 #include "todo.h"
00038 #include "journal.h"
00039 #include "kcalversion.h"
00040 #include "person.h"
00041 
00042 #include <kdepimmacros.h>
00043 
00044 #include <qobject.h>
00045 #include <qstring.h>
00046 #include <qdatetime.h>
00047 #include <qptrlist.h>
00048 #include <qdict.h>
00049 
00054 namespace KCal {
00055 
00056 class CalFilter;
00057 
00062 enum SortDirection
00063 {
00065   SortDirectionAscending,
00067   SortDirectionDescending
00068 };
00069 
00074 enum EventSortField
00075 {
00077   EventSortUnsorted,
00079   EventSortStartDate,
00081   EventSortEndDate,
00083   EventSortSummary
00084 };
00085 
00090 enum TodoSortField
00091 {
00093   TodoSortUnsorted,
00095   TodoSortStartDate,
00097   TodoSortDueDate,
00099   TodoSortPriority,
00101   TodoSortPercentComplete,
00103   TodoSortSummary
00104 };
00105 
00110 enum JournalSortField
00111 {
00113   JournalSortUnsorted,
00115   JournalSortDate,
00117   JournalSortSummary
00118 };
00119 
00169 class LIBKCAL_EXPORT Calendar : public QObject, public CustomProperties,
00170                                 public IncidenceBase::Observer
00171 {
00172     Q_OBJECT
00173 
00174   public:
00175 
00190     Calendar( const QString &timeZoneId );
00191 
00195     virtual ~Calendar();
00196 
00202     void setProductId( const QString &productId );
00203 
00209     QString productId();
00210 
00214     void clearException();
00215 
00220     ErrorFormat *exception() const;
00221 
00227     void setOwner( const Person &owner );
00228 
00234     const Person &getOwner() const;
00235 
00250     void setTimeZoneId( const QString &timeZoneId );
00251 
00258     virtual void setTimeZoneIdViewOnly( const QString &timeZoneId ) = 0;
00259 
00265     QString timeZoneId() const;
00266 
00270     void setLocalTime();
00271 
00278     bool isLocalTime() const;
00279 
00286     void setModified( bool modified );
00287 
00293     bool isModified() const { return mModified; }
00294 
00298     virtual void close() = 0;
00299 
00303     virtual void save() = 0;
00304 
00310     virtual bool reload( const QString &tz ) = 0;
00311 
00317     virtual bool isSaving() { return false; }
00318 
00324     QStringList categories();
00325 
00326 // Incidence Specific Methods //
00327 
00335     virtual bool addIncidence( Incidence *incidence );
00336 
00344     virtual bool deleteIncidence( Incidence *incidence );
00345 
00351     virtual Incidence::List incidences();
00352 
00360     virtual Incidence::List incidences( const QDate &date );
00361 
00367     virtual Incidence::List rawIncidences();
00368 
00377     Incidence *incidence( const QString &uid );
00378 
00387     Incidence *incidenceFromSchedulingID( const QString &sid );
00388 
00393     Incidence::List incidencesFromSchedulingID( const QString &UID );
00394 
00404     static Incidence::List mergeIncidenceList( const Event::List &events,
00405                                                const Todo::List &todos,
00406                                                const Journal::List &journals );
00407 
00413     virtual bool beginChange( Incidence *incidence );
00414 
00420     virtual bool endChange( Incidence *incidence );
00421 
00438     Incidence *dissociateOccurrence( Incidence *incidence, QDate date,
00439                                      bool single = true );
00440 
00441 // Event Specific Methods //
00442 
00450     virtual bool addEvent( Event *event ) = 0;
00451 
00459     virtual bool deleteEvent( Event *event ) = 0;
00460 
00470     static Event::List sortEvents( Event::List *eventList,
00471                                    EventSortField sortField,
00472                                    SortDirection sortDirection );
00473 
00484     static Event::List sortEventsForDate( Event::List *eventList,
00485                                           const QDate &date,
00486                                           EventSortField sortField,
00487                                           SortDirection sortDirection );
00488 
00497     virtual Event::List events(
00498       EventSortField sortField = EventSortUnsorted,
00499       SortDirection sortDirection = SortDirectionAscending );
00500 
00508     Event::List events( const QDateTime &qdt );
00509 
00521     Event::List events( const QDate &start, const QDate &end,
00522                         bool inclusive = false);
00523 
00535     Event::List events(
00536       const QDate &date,
00537       EventSortField sortField = EventSortUnsorted,
00538       SortDirection sortDirection = SortDirectionAscending );
00539 
00548     virtual Event::List rawEvents(
00549       EventSortField sortField = EventSortUnsorted,
00550       SortDirection sortDirection = SortDirectionAscending ) = 0;
00551 
00561     virtual Event::List rawEventsForDate( const QDateTime &qdt ) = 0;
00562 
00574     virtual Event::List rawEvents( const QDate &start, const QDate &end,
00575                                    bool inclusive = false ) = 0;
00576 
00588     virtual Event::List rawEventsForDate(
00589       const QDate &date,
00590       EventSortField sortField = EventSortUnsorted,
00591       SortDirection sortDirection = SortDirectionAscending ) = 0;
00592 
00601     virtual Event *event( const QString &uid ) = 0;
00602 
00603 // Todo Specific Methods //
00604 
00612     virtual bool addTodo( Todo *todo ) = 0;
00613 
00621     virtual bool deleteTodo( Todo *todo ) = 0;
00622 
00632     static Todo::List sortTodos( Todo::List *todoList,
00633                                  TodoSortField sortField,
00634                                  SortDirection sortDirection );
00635 
00644     virtual Todo::List todos(
00645       TodoSortField sortField = TodoSortUnsorted,
00646       SortDirection sortDirection = SortDirectionAscending );
00647 
00655     virtual Todo::List todos( const QDate &date );
00656 
00665     virtual Todo::List rawTodos(
00666       TodoSortField sortField = TodoSortUnsorted,
00667       SortDirection sortDirection = SortDirectionAscending ) = 0;
00668 
00676     virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00677 
00686     virtual Todo *todo( const QString &uid ) = 0;
00687 
00688 // Journal Specific Methods //
00689 
00697     virtual bool addJournal( Journal *journal ) = 0;
00698 
00706     virtual bool deleteJournal( Journal *journal ) = 0;
00707 
00717     static Journal::List sortJournals( Journal::List *journalList,
00718                                        JournalSortField sortField,
00719                                        SortDirection sortDirection );
00728     virtual Journal::List journals(
00729       JournalSortField sortField = JournalSortUnsorted,
00730       SortDirection sortDirection = SortDirectionAscending );
00731 
00739     virtual Journal::List journals( const QDate &date );
00740 
00749     virtual Journal::List rawJournals(
00750       JournalSortField sortField = JournalSortUnsorted,
00751       SortDirection sortDirection = SortDirectionAscending ) = 0;
00752 
00760     virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00761 
00770     virtual Journal *journal( const QString &uid ) = 0;
00771 
00784     void beginBatchAdding();
00785 
00794     void endBatchAdding();
00795 
00796 // Relations Specific Methods //
00797 
00804     virtual void setupRelations( Incidence *incidence );
00805 
00812     virtual void removeRelations( Incidence *incidence );
00813 
00814 // Filter Specific Methods //
00815 
00822     void setFilter( CalFilter *filter );
00823 
00830     CalFilter *filter();
00831 
00832 // Alarm Specific Methods //
00833 
00842     virtual Alarm::List alarms( const QDateTime &from,
00843                                 const QDateTime &to ) = 0;
00844 
00845 // Observer Specific Methods //
00846 
00852     class Observer
00853     {
00854       public:
00855         virtual ~Observer() {}
00863         virtual void calendarModified( bool /*modified*/,
00864                                        Calendar * /*calendar*/ ) {};
00865 
00871         virtual void calendarIncidenceAdded( Incidence * /*incidence*/ ) {}
00872 
00878         virtual void calendarIncidenceChanged( Incidence * /*incidence*/ ) {}
00879 
00885           virtual void calendarIncidenceDeleted( Incidence * /*incidence*/ ) {}
00886     };
00887 
00894     void registerObserver( Observer *observer );
00895 
00902     void unregisterObserver( Observer *observer );
00903 
00904   signals:
00908     void calendarChanged();
00909 
00913     void calendarSaved();
00914 
00918     void calendarLoaded();
00919 
00924     void batchAddingBegins();
00925 
00930     void batchAddingEnds();
00931 
00932   protected:
00937     void setException( ErrorFormat *e );
00938 
00944     void incidenceUpdated( IncidenceBase *incidenceBase );
00945 
00958     virtual void doSetTimeZoneId( const QString &/*timeZoneId*/ ) {}
00959 
00965     void notifyIncidenceAdded( Incidence *incidence );
00966 
00972     void notifyIncidenceChanged( Incidence *incidence );
00973 
00979     void notifyIncidenceDeleted( Incidence *incidence );
00980 
00985     virtual void customPropertyUpdated();
00986 
00993     void setObserversEnabled( bool enabled );
00994 
00995     //TODO: Move appendAlarms() and appendRecurringAlarms() from
00996     //      calendarlocal here, as protected static methods
00997     //      returning static Alarm::List
00998 
00999   private:
01000 
01004     void init();
01005 
01006     QString mProductId;
01007     Person mOwner;
01008     QString mTimeZoneId;
01009     bool mLocalTime;
01010 
01011     bool mModified;
01012 
01013     CalFilter *mFilter;
01014     CalFilter *mDefaultFilter;
01015 
01016     QPtrList<Observer> mObservers;
01017     bool mNewObserver;
01018     bool mObserversEnabled;
01019 
01020     // This list is used to put together related Todos
01021     QDict<Incidence> mOrphans;
01022     QDict<Incidence> mOrphanUids;
01023 
01024     ErrorFormat *mException;
01025     class Private;
01026     Private *d;
01027   };
01028 
01029 }
01030 
01031 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys