mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-23 04:15:26 +00:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
@interface UIxCalDayView : UIxCalView
|
||||
{
|
||||
NSCalendarDate *currentDate;
|
||||
NSCalendarDate *currentDate;
|
||||
}
|
||||
|
||||
- (void)setCurrentDate:(NSCalendarDate *)_date;
|
||||
|
||||
+176
-107
@@ -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
|
||||
|
||||
@@ -101,6 +101,9 @@
|
||||
|
||||
- (NSString *)aptStyle;
|
||||
|
||||
/* protected methods */
|
||||
- (NSDictionary *) _dateQueryParametersWithOffset: (int) daysOffset;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* __SOGo_UIxCalView_H__ */
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user