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 
00759 // Relations Specific Methods //
00760 
00767     virtual void setupRelations( Incidence *incidence );
00768 
00775     virtual void removeRelations( Incidence *incidence );
00776 
00777 // Filter Specific Methods //
00778 
00785     void setFilter( CalFilter *filter );
00786 
00793     CalFilter *filter();
00794 
00795 // Alarm Specific Methods //
00796 
00805     virtual Alarm::List alarms( const QDateTime &from,
00806                                 const QDateTime &to ) = 0;
00807 
00808 // Observer Specific Methods //
00809 
00815     class Observer
00816     {
00817       public:
00818         virtual ~Observer() {}
00826         virtual void calendarModified( bool /*modified*/,
00827                                        Calendar * /*calendar*/ ) {};
00828 
00834         virtual void calendarIncidenceAdded( Incidence * /*incidence*/ ) {}
00835 
00841         virtual void calendarIncidenceChanged( Incidence * /*incidence*/ ) {}
00842 
00848           virtual void calendarIncidenceDeleted( Incidence * /*incidence*/ ) {}
00849     };
00850 
00857     void registerObserver( Observer *observer );
00858 
00865     void unregisterObserver( Observer *observer );
00866 
00867   signals:
00871     void calendarChanged();
00872 
00876     void calendarSaved();
00877 
00881     void calendarLoaded();
00882 
00883   protected:
00889     void incidenceUpdated( IncidenceBase *incidenceBase );
00890 
00903     virtual void doSetTimeZoneId( const QString &/*timeZoneId*/ ) {}
00904 
00910     void notifyIncidenceAdded( Incidence *incidence );
00911 
00917     void notifyIncidenceChanged( Incidence *incidence );
00918 
00924     void notifyIncidenceDeleted( Incidence *incidence );
00925 
00930     virtual void customPropertyUpdated();
00931 
00938     void setObserversEnabled( bool enabled );
00939 
00940     //TODO: Move appendAlarms() and appendRecurringAlarms() from
00941     //      calendarlocal here, as protected static methods
00942     //      returning static Alarm::List
00943 
00944   private:
00948     void init();
00949 
00950     QString mProductId;
00951     Person mOwner;
00952     QString mTimeZoneId;
00953     bool mLocalTime;
00954 
00955     bool mModified;
00956 
00957     CalFilter *mFilter;
00958     CalFilter *mDefaultFilter;
00959 
00960     QPtrList<Observer> mObservers;
00961     bool mNewObserver;
00962     bool mObserversEnabled;
00963 
00964     // This list is used to put together related Todos
00965     QDict<Incidence> mOrphans;
00966     QDict<Incidence> mOrphanUids;
00967 
00968     class Private;
00969     Private *d;
00970   };
00971 
00972 }
00973 
00974 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys