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 <qobject.h>
00035 #include <qstring.h>
00036 #include <qdatetime.h>
00037 #include <qptrlist.h>
00038 #include <qdict.h>
00039 #include <kdepimmacros.h>
00040 
00041 #include "customproperties.h"
00042 #include "event.h"
00043 #include "todo.h"
00044 #include "journal.h"
00045 #include "kcalversion.h"
00046 #include "person.h"
00047 
00052 namespace KCal {
00053 
00054 class CalFilter;
00055 
00060 enum SortDirection
00061 {
00063   SortDirectionAscending,
00065   SortDirectionDescending
00066 };
00067 
00072 enum EventSortField
00073 {
00075   EventSortUnsorted,
00077   EventSortStartDate,
00079   EventSortEndDate,
00081   EventSortSummary
00082 };
00083 
00088 enum TodoSortField
00089 {
00091   TodoSortUnsorted,
00093   TodoSortStartDate,
00095   TodoSortDueDate,
00097   TodoSortPriority,
00099   TodoSortPercentComplete,
00101   TodoSortSummary
00102 };
00103 
00108 enum JournalSortField
00109 {
00111   JournalSortUnsorted,
00113   JournalSortDate,
00115   JournalSortSummary
00116 };
00117 
00167 class LIBKCAL_EXPORT Calendar : public QObject, public CustomProperties,
00168                                 public IncidenceBase::Observer
00169 {
00170     Q_OBJECT
00171 
00172   public:
00173 
00188     Calendar( const QString &timeZoneId );
00189 
00193     virtual ~Calendar();
00194 
00200     void setProductId( const QString &productId );
00201 
00207     QString productId();
00208 
00214     void setOwner( const Person &owner );
00215 
00221     const Person &getOwner() const;
00222 
00237     void setTimeZoneId( const QString &timeZoneId );
00238 
00245     virtual void setTimeZoneIdViewOnly( const QString &timeZoneId ) = 0;
00246 
00252     QString timeZoneId() const;
00253 
00257     void setLocalTime();
00258 
00265     bool isLocalTime() const;
00266 
00273     void setModified( bool modified );
00274 
00280     bool isModified() const { return mModified; }
00281 
00285     virtual void close() = 0;
00286 
00290     virtual void save() = 0;
00291 
00297     virtual bool reload( const QString &tz ) = 0;
00298 
00304     virtual bool isSaving() { return false; }
00305 
00311     QStringList categories();
00312 
00313 // Incidence Specific Methods //
00314 
00322     virtual bool addIncidence( Incidence *incidence );
00323 
00331     virtual bool deleteIncidence( Incidence *incidence );
00332 
00338     virtual Incidence::List incidences();
00339 
00347     virtual Incidence::List incidences( const QDate &date );
00348 
00354     virtual Incidence::List rawIncidences();
00355 
00364     Incidence *incidence( const QString &uid );
00365 
00374     Incidence *incidenceFromSchedulingID( const QString &sid );
00375 
00380     Incidence::List incidencesFromSchedulingID( const QString &UID );
00381 
00391     static Incidence::List mergeIncidenceList( const Event::List &events,
00392                                                const Todo::List &todos,
00393                                                const Journal::List &journals );
00394 
00400     virtual bool beginChange( Incidence *incidence );
00401 
00407     virtual bool endChange( Incidence *incidence );
00408 
00425     Incidence *dissociateOccurrence( Incidence *incidence, QDate date,
00426                                      bool single = true );
00427 
00428 // Event Specific Methods //
00429 
00437     virtual bool addEvent( Event *event ) = 0;
00438 
00446     virtual bool deleteEvent( Event *event ) = 0;
00447 
00457     static Event::List sortEvents( Event::List *eventList,
00458                                    EventSortField sortField,
00459                                    SortDirection sortDirection );
00460 
00471     static Event::List sortEventsForDate( Event::List *eventList,
00472                                           const QDate &date,
00473                                           EventSortField sortField,
00474                                           SortDirection sortDirection );
00475 
00484     virtual Event::List events(
00485       EventSortField sortField = EventSortUnsorted,
00486       SortDirection sortDirection = SortDirectionAscending );
00487 
00495     Event::List events( const QDateTime &qdt );
00496 
00508     Event::List events( const QDate &start, const QDate &end,
00509                         bool inclusive = false);
00510 
00522     Event::List events(
00523       const QDate &date,
00524       EventSortField sortField = EventSortUnsorted,
00525       SortDirection sortDirection = SortDirectionAscending );
00526 
00535     virtual Event::List rawEvents(
00536       EventSortField sortField = EventSortUnsorted,
00537       SortDirection sortDirection = SortDirectionAscending ) = 0;
00538 
00548     virtual Event::List rawEventsForDate( const QDateTime &qdt ) = 0;
00549 
00561     virtual Event::List rawEvents( const QDate &start, const QDate &end,
00562                                    bool inclusive = false ) = 0;
00563 
00575     virtual Event::List rawEventsForDate(
00576       const QDate &date,
00577       EventSortField sortField = EventSortUnsorted,
00578       SortDirection sortDirection = SortDirectionAscending ) = 0;
00579 
00588     virtual Event *event( const QString &uid ) = 0;
00589 
00590 // Todo Specific Methods //
00591 
00599     virtual bool addTodo( Todo *todo ) = 0;
00600 
00608     virtual bool deleteTodo( Todo *todo ) = 0;
00609 
00619     static Todo::List sortTodos( Todo::List *todoList,
00620                                  TodoSortField sortField,
00621                                  SortDirection sortDirection );
00622 
00631     virtual Todo::List todos(
00632       TodoSortField sortField = TodoSortUnsorted,
00633       SortDirection sortDirection = SortDirectionAscending );
00634 
00642     virtual Todo::List todos( const QDate &date );
00643 
00652     virtual Todo::List rawTodos(
00653       TodoSortField sortField = TodoSortUnsorted,
00654       SortDirection sortDirection = SortDirectionAscending ) = 0;
00655 
00663     virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00664 
00673     virtual Todo *todo( const QString &uid ) = 0;
00674 
00675 // Journal Specific Methods //
00676 
00684     virtual bool addJournal( Journal *journal ) = 0;
00685 
00693     virtual bool deleteJournal( Journal *journal ) = 0;
00694 
00704     static Journal::List sortJournals( Journal::List *journalList,
00705                                        JournalSortField sortField,
00706                                        SortDirection sortDirection );
00715     virtual Journal::List journals(
00716       JournalSortField sortField = JournalSortUnsorted,
00717       SortDirection sortDirection = SortDirectionAscending );
00718 
00726     virtual Journal::List journals( const QDate &date );
00727 
00736     virtual Journal::List rawJournals(
00737       JournalSortField sortField = JournalSortUnsorted,
00738       SortDirection sortDirection = SortDirectionAscending ) = 0;
00739 
00747     virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00748 
00757     virtual Journal *journal( const QString &uid ) = 0;
00758 
00771     void beginBatchAdding();
00772 
00781     void endBatchAdding();
00782 
00783 // Relations Specific Methods //
00784 
00791     virtual void setupRelations( Incidence *incidence );
00792 
00799     virtual void removeRelations( Incidence *incidence );
00800 
00801 // Filter Specific Methods //
00802 
00809     void setFilter( CalFilter *filter );
00810 
00817     CalFilter *filter();
00818 
00819 // Alarm Specific Methods //
00820 
00829     virtual Alarm::List alarms( const QDateTime &from,
00830                                 const QDateTime &to ) = 0;
00831 
00832 // Observer Specific Methods //
00833 
00839     class Observer
00840     {
00841       public:
00842         virtual ~Observer() {}
00850         virtual void calendarModified( bool /*modified*/,
00851                                        Calendar * /*calendar*/ ) {};
00852 
00858         virtual void calendarIncidenceAdded( Incidence * /*incidence*/ ) {}
00859 
00865         virtual void calendarIncidenceChanged( Incidence * /*incidence*/ ) {}
00866 
00872           virtual void calendarIncidenceDeleted( Incidence * /*incidence*/ ) {}
00873     };
00874 
00881     void registerObserver( Observer *observer );
00882 
00889     void unregisterObserver( Observer *observer );
00890 
00891   signals:
00895     void calendarChanged();
00896 
00900     void calendarSaved();
00901 
00905     void calendarLoaded();
00906 
00911     void batchAddingBegins();
00912 
00917     void batchAddingEnds();
00918 
00919   protected:
00925     void incidenceUpdated( IncidenceBase *incidenceBase );
00926 
00939     virtual void doSetTimeZoneId( const QString &/*timeZoneId*/ ) {}
00940 
00946     void notifyIncidenceAdded( Incidence *incidence );
00947 
00953     void notifyIncidenceChanged( Incidence *incidence );
00954 
00960     void notifyIncidenceDeleted( Incidence *incidence );
00961 
00966     virtual void customPropertyUpdated();
00967 
00974     void setObserversEnabled( bool enabled );
00975 
00976     //TODO: Move appendAlarms() and appendRecurringAlarms() from
00977     //      calendarlocal here, as protected static methods
00978     //      returning static Alarm::List
00979 
00980   private:
00984     void init();
00985 
00986     QString mProductId;
00987     Person mOwner;
00988     QString mTimeZoneId;
00989     bool mLocalTime;
00990 
00991     bool mModified;
00992 
00993     CalFilter *mFilter;
00994     CalFilter *mDefaultFilter;
00995 
00996     QPtrList<Observer> mObservers;
00997     bool mNewObserver;
00998     bool mObserversEnabled;
00999 
01000     // This list is used to put together related Todos
01001     QDict<Incidence> mOrphans;
01002     QDict<Incidence> mOrphanUids;
01003 
01004     class Private;
01005     Private *d;
01006   };
01007 
01008 }
01009 
01010 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys