Monotone-Parent: 86254bf9ee207ad3d107e4b91fbc6cb00de4fb98

Monotone-Revision: 2e091eebec7082ccae481171b67c0091e367dcb1

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2006-08-18T22:56:47
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2006-08-18 22:56:47 +00:00
parent 971063dbc8
commit 2acc3ed007
5 changed files with 220 additions and 113 deletions
+9 -2
View File
@@ -289,14 +289,21 @@
NSString *s;
aptDescr = [NSMutableString stringWithCapacity:60];
[aptDescr appendString: @"Date: "];
[self appendTimeInfoFromApt:_apt
usingReferenceDate:_refDate
toBuffer:aptDescr];
if ((s = [self titleForApt:_apt :_refDate]) != nil)
[aptDescr appendFormat:@"\n%@", s];
[aptDescr appendFormat: @"\n%@%@",
@"Title: ",
s];
if ((s = [_apt valueForKey:@"location"]) != nil)
[aptDescr appendFormat:@"\n%@%@",
@"Location: ",
s];
if ((s = [_apt valueForKey:@"description"]) != nil)
[aptDescr appendFormat:@"\n%@", s];
return aptDescr;
}
+1 -1
View File
@@ -29,7 +29,7 @@
@interface UIxCalDayView : UIxCalView
{
NSCalendarDate *currentDate;
NSCalendarDate *currentDate;
}
- (void)setCurrentDate:(NSCalendarDate *)_date;
+176 -107
View File
@@ -34,128 +34,143 @@
@implementation UIxCalDayView
- (void)dealloc {
[self->currentDate release];
[super dealloc];
- (void) dealloc
{
[self->currentDate release];
[super dealloc];
}
- (void)setCurrentDate:(NSCalendarDate *)_date {
ASSIGN(self->currentDate, _date);
}
- (NSCalendarDate *)currentDate {
return self->currentDate;
- (void) setCurrentDate: (NSCalendarDate *) _date
{
ASSIGN(self->currentDate, _date);
}
- (BOOL)isCurrentDateInApt {
return [self isCurrentDateInApt:[self appointment]];
- (NSCalendarDate *) currentDate
{
return self->currentDate;
}
- (BOOL)isCurrentDateInApt:(id)_apt {
NSCalendarDate *dateStart, *dateEnd, *aptStart, *aptEnd;
NGCalendarDateRange *dateRange, *aptRange;
- (BOOL) isCurrentDateInApt
{
return [self isCurrentDateInApt: [self appointment]];
}
- (BOOL) isCurrentDateInApt: (id) _apt
{
NSCalendarDate *dateStart, *dateEnd, *aptStart, *aptEnd;
NGCalendarDateRange *dateRange, *aptRange;
dateStart = self->currentDate;
dateEnd = [dateStart dateByAddingYears:0 months:0 days:0
hours:1 minutes:0 seconds:0];
dateRange = [NGCalendarDateRange calendarDateRangeWithStartDate:dateStart
endDate:dateEnd];
aptStart = [self->appointment valueForKey:@"startDate"];
aptEnd = [self->appointment valueForKey:@"endDate"];
aptRange = [NGCalendarDateRange calendarDateRangeWithStartDate:aptStart
endDate:aptEnd];
return [dateRange doesIntersectWithDateRange:aptRange];
dateStart = self->currentDate;
dateEnd = [dateStart dateByAddingYears:0 months:0 days:0
hours:1 minutes:0 seconds:0];
dateRange = [NGCalendarDateRange calendarDateRangeWithStartDate:dateStart
endDate:dateEnd];
aptStart = [self->appointment valueForKey:@"startDate"];
aptEnd = [self->appointment valueForKey:@"endDate"];
aptRange = [NGCalendarDateRange calendarDateRangeWithStartDate:aptStart
endDate:aptEnd];
return [dateRange doesIntersectWithDateRange:aptRange];
}
- (NSArray *)dateRange {
/* default range is from dayStartHour to dayEndHour. Any values before
or after are also fine */
- (NSArray *) dateRange
{
/* default range is from dayStartHour to dayEndHour. Any values before
or after are also fine */
NSCalendarDate *min, *max;
NSArray *aptDateRanges;
NSCalendarDate *min, *max;
NSArray *aptDateRanges;
min = [[self startDate] hour:[self dayStartHour] minute:0];
max = [[self startDate] hour:[self dayEndHour] minute:0];
min = [[self startDate] hour:[self dayStartHour] minute:0];
max = [[self startDate] hour:[self dayEndHour] minute:0];
aptDateRanges = [[self appointments] valueForKey:@"startDate"];
if([aptDateRanges count] != 0) {
NSCalendarDate *d;
aptDateRanges = [aptDateRanges sortedArrayUsingSelector:@selector(compareAscending:)];
d = [aptDateRanges objectAtIndex:0];
if ([d isDateOnSameDay:min])
min = (NSCalendarDate *)[d earlierDate:min];
d = [aptDateRanges objectAtIndex:[aptDateRanges count] - 1];
if ([d isDateOnSameDay:max])
max = (NSCalendarDate *)[d laterDate:max];
}
return [self _getDatesFrom:min to:max];
aptDateRanges = [[self appointments] valueForKey:@"startDate"];
if([aptDateRanges count] != 0) {
NSCalendarDate *d;
aptDateRanges = [aptDateRanges sortedArrayUsingSelector:@selector(compareAscending:)];
d = [aptDateRanges objectAtIndex:0];
if ([d isDateOnSameDay:min])
min = (NSCalendarDate *)[d earlierDate:min];
d = [aptDateRanges objectAtIndex:[aptDateRanges count] - 1];
if ([d isDateOnSameDay:max])
max = (NSCalendarDate *)[d laterDate:max];
}
return [self _getDatesFrom:min to:max];
}
- (NSArray *)_getDatesFrom:(NSCalendarDate *)_from to:(NSCalendarDate *)_to {
NSMutableArray *dates;
unsigned i, count, offset;
- (NSArray *) _getDatesFrom: (NSCalendarDate *) _from
to: (NSCalendarDate *) _to
{
NSMutableArray *dates;
unsigned i, count, offset;
offset = [_from hourOfDay];
count = ([_to hourOfDay] + 1) - offset;
dates = [[NSMutableArray alloc] initWithCapacity:count];
for(i = 0; i < count; i++) {
NSCalendarDate *date;
offset = [_from hourOfDay];
count = ([_to hourOfDay] + 1) - offset;
dates = [[NSMutableArray alloc] initWithCapacity:count];
for(i = 0; i < count; i++) {
NSCalendarDate *date;
date = [_from hour:offset + i minute:0];
[dates addObject:date];
}
return [dates autorelease];
date = [_from hour:offset + i minute:0];
[dates addObject:date];
}
return [dates autorelease];
}
/* URLs */
- (NSDictionary *)prevDayQueryParameters {
NSCalendarDate *date;
date = [[self startDate] dateByAddingYears:0 months:0 days:-1
hours:0 minutes:0 seconds:0];
return [self queryParametersBySettingSelectedDate:date];
- (NSDictionary *) dayBeforePrevDayQueryParameters
{
return [self _dateQueryParametersWithOffset: -2];
}
- (NSDictionary *)nextDayQueryParameters {
NSCalendarDate *date;
date = [[self startDate] dateByAddingYears:0 months:0 days:1
hours:0 minutes:0 seconds:0];
return [self queryParametersBySettingSelectedDate:date];
- (NSDictionary *) prevDayQueryParameters
{
return [self _dateQueryParametersWithOffset: -1];
}
- (NSDictionary *)currentDateQueryParameters {
NSMutableDictionary *qp;
NSString *hmString;
NSCalendarDate *date;
date = [self currentDate];
hmString = [NSString stringWithFormat:@"%02d%02d",
[date hourOfDay], [date minuteOfHour]];
qp = [[self queryParameters] mutableCopy];
[self setSelectedDateQueryParameter:date inDictionary:qp];
[qp setObject:hmString forKey:@"hm"];
return [qp autorelease];
- (NSDictionary *) nextDayQueryParameters
{
return [self _dateQueryParametersWithOffset: 1];
}
- (NSDictionary *) dayAfterNextDayQueryParameters
{
return [self _dateQueryParametersWithOffset: 2];
}
- (NSDictionary *) currentDateQueryParameters
{
NSMutableDictionary *qp;
NSString *hmString;
NSCalendarDate *date;
date = [self currentDate];
hmString = [NSString stringWithFormat:@"%02d%02d",
[date hourOfDay], [date minuteOfHour]];
qp = [[self queryParameters] mutableCopy];
[self setSelectedDateQueryParameter:date inDictionary:qp];
[qp setObject:hmString forKey:@"hm"];
return [qp autorelease];
}
/* fetching */
- (NSCalendarDate *)startDate {
return [[self selectedDate] beginOfDay];
return [[self selectedDate] beginOfDay];
}
- (NSCalendarDate *)endDate {
return [[self startDate] endOfDay];
return [[self startDate] endOfDay];
}
/* appointments */
- (NSArray *)appointments {
return [self fetchCoreInfos];
- (NSArray *) appointments
{
return [self fetchCoreInfos];
}
- (NSArray *)aptsForCurrentDate {
@@ -175,17 +190,10 @@
apts = [self appointments];
filtered = [[NSMutableArray alloc] initWithCapacity:1];
count = [apts count];
for(i = 0; i < count; i++) {
for (i = 0; i < count; i++) {
id apt;
NSCalendarDate *aptStartDate;
/* NOTE: appointments are totally opaque objects, we don't know much
about them. The reason for this is that they are backend-dependent
and we'd like to use UIx for SOGo *and* ZideStore also.
We have to accept the fact that we know just a little bit
of their API which is completely KVC driven.
*/
apt = [apts objectAtIndex:i];
aptStartDate = [apt valueForKey:@"startDate"];
if([aptStartDate isGreaterThanOrEqualTo:start] &&
@@ -193,26 +201,87 @@
{
[filtered addObject:apt];
}
else {
/* multiple day range? */
NSCalendarDate *aptEndDate;
if ((aptEndDate = [apt valueForKey:@"endDate"])) {
if ([aptEndDate isLessThanOrEqualTo:end] ||
([aptStartDate isLessThan:start] &&
[aptEndDate isGreaterThan:end]))
{
[filtered addObject:apt];
}
}
}
}
return [filtered autorelease];
}
- (BOOL)hasAptsForCurrentDate {
- (NSArray *)allDayApts {
NSCalendarDate *start;
NSArray *apts;
NSMutableArray *filtered;
unsigned i, count;
if (self->allDayApts)
return self->allDayApts;
start = [self startDate];
apts = [self appointments];
filtered = [[NSMutableArray alloc] initWithCapacity:1];
count = [apts count];
for (i = 0; i < count; i++) {
id apt;
NSNumber *bv;
apt = [apts objectAtIndex:i];
bv = [apt valueForKey:@"isallday"];
if ([bv boolValue]) {
[filtered addObject:apt];
}
else {
NSCalendarDate *aptStartDate;
aptStartDate = [apt valueForKey:@"startDate"];
if([aptStartDate isLessThan:start]) {
[filtered addObject:apt];
}
}
}
ASSIGN(self->allDayApts, filtered);
[filtered release];
return self->allDayApts;
}
- (BOOL) hasAptsForCurrentDate
{
return [[self aptsForCurrentDate] count] != 0;
}
- (NSString *) _dayNameWithOffsetFromToday: (int) offset
{
NSCalendarDate *date;
date = [[self selectedDate] dateByAddingYears: 0
months: 0
days: offset];
return [self localizedNameForDayOfWeek: [date dayOfWeek]];
}
- (NSString *) dayBeforeYesterdayName
{
return [self _dayNameWithOffsetFromToday: -2];
}
- (NSString *) yesterdayName
{
return [self _dayNameWithOffsetFromToday: -1];
}
- (NSString *) currentDayName
{
return [self _dayNameWithOffsetFromToday: 0];
}
- (NSString *) tomorrowName
{
return [self _dayNameWithOffsetFromToday: 1];
}
- (NSString *) dayAfterTomorrowName
{
return [self _dayNameWithOffsetFromToday: 2];
}
@end
+3
View File
@@ -101,6 +101,9 @@
- (NSString *)aptStyle;
/* protected methods */
- (NSDictionary *) _dateQueryParametersWithOffset: (int) daysOffset;
@end
#endif /* __SOGo_UIxCalView_H__ */
+31 -3
View File
@@ -243,6 +243,21 @@ static BOOL shouldDisplayWeekend = NO;
hours:0 minutes:0 seconds:0];
}
- (NSCalendarDate *)prevMonth {
NSCalendarDate *date = [self thisMonth];
return [date dateByAddingYears:0 months:-1 days:0
hours:0 minutes:0 seconds:0];
}
- (NSString *) prevMonthAsString
{
return [self dateStringForDate: [self prevMonth]];
}
- (NSString *) nextMonthAsString
{
return [self dateStringForDate: [self nextMonth]];
}
/* current day related */
@@ -250,12 +265,14 @@ static BOOL shouldDisplayWeekend = NO;
[_day setTimeZone:[self viewTimeZone]];
ASSIGN(self->currentDay, _day);
}
- (NSCalendarDate *)currentDay {
- (NSCalendarDate *) currentDay {
return self->currentDay;
}
- (NSString *)currentDayName {
return [self localizedNameForDayOfWeek:[self->currentDay dayOfWeek]];
- (NSString *) currentDayName
{
return [self localizedNameForDayOfWeek: [self->currentDay dayOfWeek]];
}
- (id)holidayInfo {
@@ -363,6 +380,7 @@ static BOOL shouldDisplayWeekend = NO;
ed = [self endDate];
[self setAppointments:[folder fetchOverviewInfosFrom:sd to:ed]];
}
return self->appointments;
}
@@ -394,6 +412,16 @@ static BOOL shouldDisplayWeekend = NO;
/* date selection & conversion */
- (NSDictionary *) _dateQueryParametersWithOffset: (int) daysOffset
{
NSCalendarDate *date;
date = [[self startDate] dateByAddingYears: 0 months: 0
days: daysOffset
hours:0 minutes:0 seconds:0];
return [self queryParametersBySettingSelectedDate:date];
}
- (NSDictionary *)todayQueryParameters {
NSCalendarDate *date;