mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-20 19:05:25 +00:00
see ChangeLog
Monotone-Revision: 9054022ef1ca8aeba6e34842d27d9b94ce002b89 Monotone-Author: dev-unix.inverse.qc.ca Monotone-Date: 2006-06-15T19:34:10 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
Copyright (C) 2004 SKYRIX Software AG
|
||||
|
||||
This file is part of OpenGroupware.org.
|
||||
|
||||
OGo is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with OGo; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA.
|
||||
*/
|
||||
// $Id: UIxCalDayView.m 663 2005-07-05 18:13:24Z znek $
|
||||
|
||||
|
||||
#import "UIxCalDayView.h"
|
||||
#include "common.h"
|
||||
#include <EOControl/EOControl.h>
|
||||
#include <NGExtensions/NGCalendarDateRange.h>
|
||||
|
||||
|
||||
@interface UIxCalDayView (PrivateAPI)
|
||||
- (BOOL)isCurrentDateInApt:(id)_apt;
|
||||
- (NSArray *)_getDatesFrom:(NSCalendarDate *)_from to:(NSCalendarDate *)_to;
|
||||
@end
|
||||
|
||||
@implementation UIxCalDayView
|
||||
|
||||
- (void)dealloc {
|
||||
[self->currentDate release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)setCurrentDate:(NSCalendarDate *)_date {
|
||||
ASSIGN(self->currentDate, _date);
|
||||
}
|
||||
- (NSCalendarDate *)currentDate {
|
||||
return self->currentDate;
|
||||
}
|
||||
|
||||
- (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];
|
||||
}
|
||||
|
||||
- (NSArray *)dateRange {
|
||||
/* default range is from dayStartHour to dayEndHour. Any values before
|
||||
or after are also fine */
|
||||
|
||||
NSCalendarDate *min, *max;
|
||||
NSArray *aptDateRanges;
|
||||
|
||||
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];
|
||||
}
|
||||
|
||||
- (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;
|
||||
|
||||
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 *)nextDayQueryParameters {
|
||||
NSCalendarDate *date;
|
||||
|
||||
date = [[self startDate] dateByAddingYears:0 months:0 days:1
|
||||
hours:0 minutes:0 seconds:0];
|
||||
return [self queryParametersBySettingSelectedDate:date];
|
||||
}
|
||||
|
||||
- (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];
|
||||
}
|
||||
- (NSCalendarDate *)endDate {
|
||||
return [[self startDate] endOfDay];
|
||||
}
|
||||
|
||||
|
||||
/* appointments */
|
||||
|
||||
- (NSArray *)appointments {
|
||||
return [self fetchCoreInfos];
|
||||
}
|
||||
|
||||
- (NSArray *)aptsForCurrentDate {
|
||||
NSArray *apts;
|
||||
NSMutableArray *filtered;
|
||||
unsigned i, count;
|
||||
NSCalendarDate *start, *end;
|
||||
|
||||
start = self->currentDate;
|
||||
end = [start dateByAddingYears:0
|
||||
months:0
|
||||
days:0
|
||||
hours:0
|
||||
minutes:59
|
||||
seconds:59];
|
||||
|
||||
apts = [self appointments];
|
||||
filtered = [[NSMutableArray alloc] initWithCapacity:1];
|
||||
count = [apts count];
|
||||
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] &&
|
||||
[aptStartDate isLessThan:end])
|
||||
{
|
||||
[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 {
|
||||
return [[self aptsForCurrentDate] count] != 0;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user