+- (void)setTransparency:(NSString *)_transparency {
+ ASSIGNCOPY(self->transparency, _transparency);
+}
+- (NSString *)transparency {
+ return self->transparency;
+}
+
+/* convenience */
+
+- (BOOL)isOpaque {
+ NSString *s;
+
+ s = [self transparency];
+ if (s && [[s uppercaseString] isEqualToString:@"TRANSPARENT"])
+ return NO;
+ return YES; /* default is OPAQUE, see RFC2445, Section 4.8.2.7 */
+}
+
+/* TODO: FIX THIS!
+ The problem is, that startDate/endDate are inappropriately modelled here.
+ We'd need to have a special iCalDate in order to fix all the mess.
+ For the time being, we chose allday to mean 00:00 - 23:59 in startDate's
+ timezone.
+*/
+- (BOOL)isAllDay {
+ NSCalendarDate *ed;
+
+ if (![self hasEndDate])
+ return NO;
+
+ ed = [[[self endDate] copy] autorelease];
+ [ed setTimeZone:[self->startDate timeZone]];
+ if (([self->startDate hourOfDay] == 0) &&
+ ([self->startDate minuteOfHour] == 0) &&
+ ([ed hourOfDay] == 23) &&
+ ([ed minuteOfHour] == 59))
+ return YES;
+ return NO;
+}
+
+- (BOOL)isWithinCalendarDateRange:(NGCalendarDateRange *)_range {
+ if (![self isRecurrent]) {
+ if (self->startDate && self->endDate) {
+ NGCalendarDateRange *r;
+
+ r = [NGCalendarDateRange calendarDateRangeWithStartDate:self->startDate
+ endDate:self->endDate];
+ return [_range containsDateRange:r];
+ }
+ else {
+ return [_range containsDate:self->startDate];
+ }
+ }
+ else {
+ NGCalendarDateRange *fir;
+
+ fir = [NGCalendarDateRange calendarDateRangeWithStartDate:self->startDate
+ endDate:self->endDate];
+
+ return [self isWithinCalendarDateRange:_range
+ firstInstanceCalendarDateRange:fir];
+ }
+ return NO;
+}
+
+- (NSArray *)recurrenceRangesWithinCalendarDateRange:(NGCalendarDateRange *)_r {
+ NGCalendarDateRange *fir;
+
+ if (![self isRecurrent])
+ return nil;
+
+ fir = [NGCalendarDateRange calendarDateRangeWithStartDate:self->startDate
+ endDate:self->endDate];
+ return [self recurrenceRangesWithinCalendarDateRange:_r
+ firstInstanceCalendarDateRange:fir];
+}
+
+- (NSCalendarDate *)lastPossibleRecurrenceStartDate {
+ NGCalendarDateRange *fir;
+
+ if (![self isRecurrent])
+ return nil;
+
+ fir = [NGCalendarDateRange calendarDateRangeWithStartDate:self->startDate
+ endDate:self->endDate];
+ return [self lastPossibleRecurrenceStartDateUsingFirstInstanceCalendarDateRange:fir];
+}
+