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 
00385     static Incidence::List mergeIncidenceList( const Event::List &events,
00386                                                const Todo::List &todos,
00387                                                const Journal::List &journals );
00388 
00394     virtual bool beginChange( Incidence *incidence );
00395 
00401     virtual bool endChange( Incidence *incidence );
00402 
00419     Incidence *dissociateOccurrence( Incidence *incidence, QDate date,
00420                                      bool single = true );
00421 
00422 // Event Specific Methods //
00423 
00431     virtual bool addEvent( Event *event ) = 0;
00432 
00440     virtual bool deleteEvent( Event *event ) = 0;
00441 
00451     static Event::List sortEvents( Event::List *eventList,
00452                                    EventSortField sortField,
00453                                    SortDirection sortDirection );
00462     virtual Event::List events(
00463       EventSortField sortField = EventSortUnsorted,
00464       SortDirection sortDirection = SortDirectionAscending );
00465 
00473     Event::List events( const QDateTime &qdt );
00474 
00486     Event::List events( const QDate &start, const QDate &end,
00487                         bool inclusive = false);
00488 
00500     Event::List events(
00501       const QDate &date,
00502       EventSortField sortField = EventSortUnsorted,
00503       SortDirection sortDirection = SortDirectionAscending );
00504 
00513     virtual Event::List rawEvents(
00514       EventSortField sortField = EventSortUnsorted,
00515       SortDirection sortDirection = SortDirectionAscending ) = 0;
00516 
00526     virtual Event::List rawEventsForDate( const QDateTime &qdt ) = 0;
00527 
00539     virtual Event::List rawEvents( const QDate &start, const QDate &end,
00540                                    bool inclusive = false ) = 0;
00541 
00553     virtual Event::List rawEventsForDate(
00554       const QDate &date,
00555       EventSortField sortField = EventSortUnsorted,
00556       SortDirection sortDirection = SortDirectionAscending ) = 0;
00557 
00566     virtual Event *event( const QString &uid ) = 0;
00567 
00568 // Todo Specific Methods //
00569 
00577     virtual bool addTodo( Todo *todo ) = 0;
00578 
00586     virtual bool deleteTodo( Todo *todo ) = 0;
00587 
00597     static Todo::List sortTodos( Todo::List *todoList,
00598                                  TodoSortField sortField,
00599                                  SortDirection sortDirection );
00600 
00609     virtual Todo::List todos(
00610       TodoSortField sortField = TodoSortUnsorted,
00611       SortDirection sortDirection = SortDirectionAscending );
00612 
00620     virtual Todo::List todos( const QDate &date );
00621 
00630     virtual Todo::List rawTodos(
00631       TodoSortField sortField = TodoSortUnsorted,
00632       SortDirection sortDirection = SortDirectionAscending ) = 0;
00633 
00641     virtual Todo::List rawTodosForDate( const QDate &date ) = 0;
00642 
00651     virtual Todo *todo( const QString &uid ) = 0;
00652 
00653 // Journal Specific Methods //
00654 
00662     virtual bool addJournal( Journal *journal ) = 0;
00663 
00671     virtual bool deleteJournal( Journal *journal ) = 0;
00672 
00682     static Journal::List sortJournals( Journal::List *journalList,
00683                                        JournalSortField sortField,
00684                                        SortDirection sortDirection );
00693     virtual Journal::List journals(
00694       JournalSortField sortField = JournalSortUnsorted,
00695       SortDirection sortDirection = SortDirectionAscending );
00696 
00704     virtual Journal::List journals( const QDate &date );
00705 
00714     virtual Journal::List rawJournals(
00715       JournalSortField sortField = JournalSortUnsorted,
00716       SortDirection sortDirection = SortDirectionAscending ) = 0;
00717 
00725     virtual Journal::List rawJournalsForDate( const QDate &date ) = 0;
00726 
00735     virtual Journal *journal( const QString &uid ) = 0;
00736 
00737 // Relations Specific Methods //
00738 
00745     virtual void setupRelations( Incidence *incidence );
00746 
00753     virtual void removeRelations( Incidence *incidence );
00754 
00755 // Filter Specific Methods //
00756 
00763     void setFilter( CalFilter *filter );
00764 
00771     CalFilter *filter();
00772 
00773 // Alarm Specific Methods //
00774 
00783     virtual Alarm::List alarms( const QDateTime &from,
00784                                 const QDateTime &to ) = 0;
00785 
00786 // Observer Specific Methods //
00787 
00793     class Observer
00794     {
00795       public:
00796         virtual ~Observer() {}
00804         virtual void calendarModified( bool /*modified*/,
00805                                        Calendar * /*calendar*/ ) {};
00806 
00812         virtual void calendarIncidenceAdded( Incidence * /*incidence*/ ) {}
00813 
00819         virtual void calendarIncidenceChanged( Incidence * /*incidence*/ ) {}
00820 
00826           virtual void calendarIncidenceDeleted( Incidence * /*incidence*/ ) {}
00827     };
00828 
00835     void registerObserver( Observer *observer );
00836 
00843     void unregisterObserver( Observer *observer );
00844 
00845   signals:
00849     void calendarChanged();
00850 
00854     void calendarSaved();
00855 
00859     void calendarLoaded();
00860 
00861   protected:
00867     void incidenceUpdated( IncidenceBase *incidenceBase );
00868 
00881     virtual void doSetTimeZoneId( const QString &/*timeZoneId*/ ) {}
00882 
00888     void notifyIncidenceAdded( Incidence *incidence );
00889 
00895     void notifyIncidenceChanged( Incidence *incidence );
00896 
00902     void notifyIncidenceDeleted( Incidence *incidence );
00903 
00908     virtual void customPropertyUpdated();
00909 
00916     void setObserversEnabled( bool enabled );
00917 
00918     //TODO: Move appendAlarms() and appendRecurringAlarms() from
00919     //      calendarlocal here, as protected static methods
00920     //      returning static Alarm::List
00921 
00922   private:
00926     void init();
00927 
00928     QString mProductId;
00929     Person mOwner;
00930     QString mTimeZoneId;
00931     bool mLocalTime;
00932 
00933     bool mModified;
00934 
00935     CalFilter *mFilter;
00936     CalFilter *mDefaultFilter;
00937 
00938     QPtrList<Observer> mObservers;
00939     bool mNewObserver;
00940     bool mObserversEnabled;
00941 
00942     // This list is used to put together related Todos
00943     QDict<Incidence> mOrphans;
00944     QDict<Incidence> mOrphanUids;
00945 
00946     class Private;
00947     Private *d;
00948   };
00949 
00950 }
00951 
00952 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys