KCal Library
recurrence.h
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 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
00150 KDateTime startDateTime() const;
00152 QDate startDate() const;
00158 void setStartDateTime( const KDateTime &start );
00159
00166 bool allDay() const;
00170 void setAllDay( bool allDay );
00171
00173 void setRecurReadOnly( bool readOnly );
00174
00176 bool recurReadOnly() const;
00177
00179 bool recurs() const;
00180
00183 ushort recurrenceType() const;
00184
00190 static ushort recurrenceType( const RecurrenceRule *rrule );
00191
00198 bool recursOn( const QDate &date, const KDateTime::Spec &timeSpec ) const;
00199
00207 bool recursAt( const KDateTime &dt ) const;
00208
00213 void unsetRecurs();
00214
00218 void clear();
00219
00226 TimeList recurTimesOn( const QDate &date, const KDateTime::Spec &timeSpec ) const;
00227
00240 DateTimeList timesInInterval( const KDateTime &start, const KDateTime &end ) const;
00241
00248 KDateTime getNextDateTime( const KDateTime &preDateTime ) const;
00249
00258 KDateTime getPreviousDateTime( const KDateTime &afterDateTime ) const;
00259
00261 int frequency() const;
00262
00264 void setFrequency( int freq );
00265
00270 int duration() const;
00271
00274 void setDuration( int duration );
00275
00279 int durationTo( const KDateTime &dt ) const;
00280
00284 int durationTo( const QDate &date ) const;
00285
00289 KDateTime endDateTime() const;
00290
00294 QDate endDate() const;
00295
00299 void setEndDate( const QDate &endDate );
00300
00303 void setEndDateTime( const KDateTime &endDateTime );
00304
00319 void shiftTimes( const KDateTime::Spec &oldSpec, const KDateTime::Spec &newSpec );
00320
00331 void setMinutely( int freq );
00332
00346 void setHourly( int freq );
00347
00361 void setDaily( int freq );
00362
00374 void setWeekly( int freq, int weekStart = 1 );
00387 void setWeekly( int freq, const QBitArray &days, int weekStart = 1 );
00388
00392 void addWeeklyDays( const QBitArray &days );
00398 int weekStart() const;
00399
00401 QBitArray days() const;
00402
00417 void setMonthly( int freq );
00418
00426 void addMonthlyPos( short pos, const QBitArray &days );
00427 void addMonthlyPos( short pos, ushort day );
00428
00433 void addMonthlyDate( short day );
00434
00436 QList<RecurrenceRule::WDayPos> monthPositions() const;
00437
00439
00440 QList<int> monthDays() const;
00441
00464 void setYearly( int freq );
00465
00472 void addYearlyDay( int day );
00473
00482 void addYearlyDate( int date );
00483
00489 void addYearlyMonth( short _rNum );
00490
00507 void addYearlyPos( short pos, const QBitArray &days );
00508
00514 QList<int> yearDays() const;
00515
00523 QList<int> yearDates() const;
00524
00533 QList<int> yearMonths() const;
00534
00544 QList<RecurrenceRule::WDayPos> yearPositions() const;
00545
00547 static const QDate MAX_DATE;
00548
00552 void dump() const;
00553
00554
00555 RecurrenceRule::List rRules() const;
00556 void addRRule( RecurrenceRule *rrule );
00557 void removeRRule( RecurrenceRule *rrule );
00558
00559 RecurrenceRule::List exRules() const;
00560 void addExRule( RecurrenceRule *exrule );
00561 void removeExRule( RecurrenceRule *exrule );
00562
00563
00564 DateTimeList rDateTimes() const;
00565 DateList rDates() const;
00566 void setRDateTimes( const DateTimeList &rdates );
00567 void setRDates( const DateList &rdates );
00568 void addRDateTime( const KDateTime &rdate );
00569 void addRDate( const QDate &rdate );
00570
00571
00572 DateTimeList exDateTimes() const;
00573 DateList exDates() const;
00574 void setExDateTimes( const DateTimeList &exdates );
00575 void setExDates( const DateList &exdates );
00576 void addExDateTime( const KDateTime &exdate );
00577 void addExDate( const QDate &exdate );
00578
00579 RecurrenceRule *defaultRRule( bool create = false ) const;
00580 RecurrenceRule *defaultRRuleConst() const;
00581 void updated();
00582
00590 void addObserver( RecurrenceObserver *observer );
00597 void removeObserver( RecurrenceObserver *observer );
00598
00599 void recurrenceChanged( RecurrenceRule * );
00600
00601 protected:
00602 RecurrenceRule *setNewRecurrenceType( RecurrenceRule::PeriodType type, int freq );
00603
00604 private:
00605
00606 class Private;
00607 Private *const d;
00608
00609 };
00610
00611 }
00612
00613 #endif