00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef KCAL_RECURRENCE_H
00025 #define KCAL_RECURRENCE_H
00026
00027 #include "kcal_export.h"
00028 #include "recurrencerule.h"
00029
00030 #include <kdatetime.h>
00031
00032 #include <QtCore/QString>
00033 #include <QtCore/QBitArray>
00034 #include <QtCore/QList>
00035
00036 namespace KCal {
00037
00038 class RecurrenceRule;
00039
00091 class KCAL_EXPORT_DEPRECATED Recurrence : public RecurrenceRule::RuleObserver
00092 {
00093 public:
00094 class RecurrenceObserver
00095 {
00096 public:
00097 virtual ~RecurrenceObserver() {}
00099 virtual void recurrenceUpdated( Recurrence *r ) = 0;
00100 };
00101
00103 enum {
00104 rNone = 0,
00105 rMinutely = 0x001,
00106 rHourly = 0x0002,
00107 rDaily = 0x0003,
00108 rWeekly = 0x0004,
00109 rMonthlyPos = 0x0005,
00110 rMonthlyDay = 0x0006,
00111 rYearlyMonth = 0x0007,
00112 rYearlyDay = 0x0008,
00113 rYearlyPos = 0x0009,
00114 rOther = 0x000A,
00115 rMax=0x00FF
00116 };
00117
00121 Recurrence();
00127 Recurrence( const Recurrence &r );
00131 virtual ~Recurrence();
00132
00139 bool operator==( const Recurrence &r ) const;
00146 bool operator!=( const Recurrence &r ) const { return !operator==(r); }
00147
00154 Recurrence &operator=( const Recurrence &r );
00155
00158 KDateTime startDateTime() const;
00160 QDate startDate() const;
00166 void setStartDateTime( const KDateTime &start );
00167
00174 bool allDay() const;
00178 void setAllDay( bool allDay );
00179
00181 void setRecurReadOnly( bool readOnly );
00182
00184 bool recurReadOnly() const;
00185
00187 bool recurs() const;
00188
00191 ushort recurrenceType() const;
00192
00198 static ushort recurrenceType( const RecurrenceRule *rrule );
00199
00206 bool recursOn( const QDate &date, const KDateTime::Spec &timeSpec ) const;
00207
00215 bool recursAt( const KDateTime &dt ) const;
00216
00221 void unsetRecurs();
00222
00226 void clear();
00227
00234 TimeList recurTimesOn( const QDate &date, const KDateTime::Spec &timeSpec ) const;
00235
00248 DateTimeList timesInInterval( const KDateTime &start, const KDateTime &end ) const;
00249
00256 KDateTime getNextDateTime( const KDateTime &preDateTime ) const;
00257
00266 KDateTime getPreviousDateTime( const KDateTime &afterDateTime ) const;
00267
00269 int frequency() const;
00270
00272 void setFrequency( int freq );
00273
00278 int duration() const;
00279
00282 void setDuration( int duration );
00283
00287 int durationTo( const KDateTime &dt ) const;
00288
00292 int durationTo( const QDate &date ) const;
00293
00297 KDateTime endDateTime() const;
00298
00302 QDate endDate() const;
00303
00307 void setEndDate( const QDate &endDate );
00308
00311 void setEndDateTime( const KDateTime &endDateTime );
00312
00327 void shiftTimes( const KDateTime::Spec &oldSpec, const KDateTime::Spec &newSpec );
00328
00339 void setMinutely( int freq );
00340
00354 void setHourly( int freq );
00355
00369 void setDaily( int freq );
00370
00382 void setWeekly( int freq, int weekStart = 1 );
00395 void setWeekly( int freq, const QBitArray &days, int weekStart = 1 );
00396
00400 void addWeeklyDays( const QBitArray &days );
00406 int weekStart() const;
00407
00409 QBitArray days() const;
00410
00425 void setMonthly( int freq );
00426
00434 void addMonthlyPos( short pos, const QBitArray &days );
00435 void addMonthlyPos( short pos, ushort day );
00436
00441 void addMonthlyDate( short day );
00442
00444 QList<RecurrenceRule::WDayPos> monthPositions() const;
00445
00447
00448 QList<int> monthDays() const;
00449
00472 void setYearly( int freq );
00473
00480 void addYearlyDay( int day );
00481
00490 void addYearlyDate( int date );
00491
00497 void addYearlyMonth( short _rNum );
00498
00515 void addYearlyPos( short pos, const QBitArray &days );
00516
00522 QList<int> yearDays() const;
00523
00531 QList<int> yearDates() const;
00532
00541 QList<int> yearMonths() const;
00542
00552 QList<RecurrenceRule::WDayPos> yearPositions() const;
00553
00555 static const QDate MAX_DATE;
00556
00560 void dump() const;
00561
00562
00563 RecurrenceRule::List rRules() const;
00568 void addRRule( RecurrenceRule *rrule );
00569
00576 void removeRRule( RecurrenceRule *rrule );
00577
00582 void deleteRRule( RecurrenceRule *rrule );
00583
00584
00585 RecurrenceRule::List exRules() const;
00586
00591 void addExRule( RecurrenceRule *exrule );
00592
00599 void removeExRule( RecurrenceRule *exrule );
00600
00605 void deleteExRule( RecurrenceRule *exrule );
00606
00607
00608 DateTimeList rDateTimes() const;
00609 DateList rDates() const;
00610 void setRDateTimes( const DateTimeList &rdates );
00611 void setRDates( const DateList &rdates );
00612 void addRDateTime( const KDateTime &rdate );
00613 void addRDate( const QDate &rdate );
00614
00615
00616 DateTimeList exDateTimes() const;
00617 DateList exDates() const;
00618 void setExDateTimes( const DateTimeList &exdates );
00619 void setExDates( const DateList &exdates );
00620 void addExDateTime( const KDateTime &exdate );
00621 void addExDate( const QDate &exdate );
00622
00623 RecurrenceRule *defaultRRule( bool create = false ) const;
00624 RecurrenceRule *defaultRRuleConst() const;
00625 void updated();
00626
00634 void addObserver( RecurrenceObserver *observer );
00641 void removeObserver( RecurrenceObserver *observer );
00642
00643 void recurrenceChanged( RecurrenceRule * );
00644
00645 protected:
00646 RecurrenceRule *setNewRecurrenceType( RecurrenceRule::PeriodType type, int freq );
00647
00648 private:
00649
00650 class Private;
00651 Private *const d;
00652
00653 };
00654
00655 }
00656
00657 #endif