39 using namespace KCalCore;
46 class KCalCore::OccurrenceIterator::Private
51 occurrenceIt(occurrenceList)
66 : incidence(i), date(d)
73 QList<Occurrence> occurrenceList;
74 QListIterator<Occurrence> occurrenceIt;
82 bool occurrenceIsHidden(
const Calendar &calendar,
84 const KDateTime &occurrenceDate)
91 if (todo && (occurrenceDate < todo->dtDue())) {
94 }
else if (inc->hasRecurrenceId()) {
96 if (mainTodo && mainTodo->isCompleted()) {
107 if (inc->hasRecurrenceId()) {
111 QHash<KDateTime, Incidence::Ptr> recurrenceIds;
114 if (incidenceRecStart.isValid())
115 recurrenceIds.insert(exception->recurrenceId().toTimeSpec(incidenceRecStart.timeSpec()), exception);
117 const bool isAllDay = inc->allDay();
118 const DateTimeList occurrences = inc->recurrence()->timesInInterval(start, end);
121 foreach(KDateTime occurrenceDate, occurrences) {
124 occurrenceDate.setDateOnly(isAllDay);
126 bool resetIncidence =
false;
127 if (recurrenceIds.contains(occurrenceDate)) {
133 incidence = recurrenceIds.value(occurrenceDate);
134 occurrenceDate = incidence->dtStart();
135 resetIncidence = !incidence->thisAndFuture();
136 offset = incidence->recurrenceId().secsTo_long(incidence->dtStart());
137 }
else if (inc != incidence) {
138 occurrenceDate = occurrenceDate.addSecs(offset);
140 if (!occurrenceIsHidden(calendar, incidence, occurrenceDate)) {
141 occurrenceList << Private::Occurrence(incidence, occurrenceDate);
143 if (resetIncidence) {
149 occurrenceList << Private::Occurrence(inc, inc->dtStart());
152 occurrenceIt = QListIterator<Private::Occurrence>(occurrenceList);
157 static uint
qHash(
const KDateTime &dt)
159 return qHash(dt.toString());
174 const KDateTime &start,
175 const KDateTime &end)
194 const QDate journalStart = journal->dtStart().toTimeSpec(start.timeSpec()).date();
195 if (journal->dtStart().isValid() &&
196 journalStart >= start.date() &&
197 journalStart <= end.date())
207 d->setupIterator(calendar, incidences);
212 const KDateTime &start,
213 const KDateTime &end)
222 OccurrenceIterator::~OccurrenceIterator()
226 bool OccurrenceIterator::hasNext()
const
228 return d->occurrenceIt.hasNext();
233 d->current = d->occurrenceIt.next();
238 return d->current.incidence;
243 return d->current.date;