diff --git a/SoObjects/SOGo/GNUmakefile b/SoObjects/SOGo/GNUmakefile index 1ec3ad1d8..39f6dca18 100644 --- a/SoObjects/SOGo/GNUmakefile +++ b/SoObjects/SOGo/GNUmakefile @@ -30,8 +30,8 @@ libSOGo_HEADER_FILES = \ \ LDAPUserManager.h \ LDAPSource.h \ + SOGoDateFormatter.h \ SOGoPermissions.h \ - WOContext+Agenor.h \ SOGoDAVRendererTypes.h \ NSArray+Utilities.h \ NSDictionary+URL.h \ @@ -55,10 +55,10 @@ libSOGo_OBJC_FILES = \ SOGoGroupFolder.m \ SOGoCustomGroupFolder.m \ \ + SOGoDateFormatter.m \ SOGoPermissions.m \ LDAPUserManager.m \ LDAPSource.m \ - WOContext+Agenor.m \ SOGoDAVRendererTypes.m \ AgenorUserDefaults.m \ NSArray+Utilities.m \ diff --git a/SoObjects/SOGo/SOGoDateFormatter.h b/SoObjects/SOGo/SOGoDateFormatter.h new file mode 100644 index 000000000..3889bff51 --- /dev/null +++ b/SoObjects/SOGo/SOGoDateFormatter.h @@ -0,0 +1,68 @@ +/* + 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. +*/ + +#ifndef __SOGoDateFormatter_H_ +#define __SOGoDateFormatter_H_ + +#import + +@class NSCalendarDate; +@class NSDictionary; +@class NSString; + +@interface SOGoDateFormatter : NSFormatter +{ + NSDictionary *locale; + NSString *shortDateFormat; + NSString *longDateFormat; + NSString *timeFormat; +} + +- (void) setLocale: (NSDictionary *) newLocale; +- (void) setShortDateFormat: (NSString *) newDateFormat; +- (void) setLongDateFormat: (NSString *) newDateFormat; +- (void) setTimeFormat: (NSString *) newDateFormat; + +- (NSString *) shortFormattedDate: (NSCalendarDate *) date; +- (NSString *) formattedDate: (NSCalendarDate *) date; +- (NSString *) formattedTime: (NSCalendarDate *) date; +- (NSString *) formattedDateAndTime: (NSCalendarDate *) date; + +- (NSString *) stringForObjectValue: (id) date; + +// - (void) setFullWeekdayNameAndDetails; + +// - (NSString *) date: (NSCalendarDate *) date +// withFormat: (unsigned int) format; +// - (NSString *) date: (NSCalendarDate *) date +// withNSFormat: (NSNumber *) format; + + +// - (NSString *) shortDayOfWeek: (int)_day; +// - (NSString *) fullDayOfWeek: (int)_day; +// - (NSString *) shortMonthOfYear: (int)_month; +// - (NSString *) fullMonthOfYear: (int)_month; + +// - (NSString *) fullWeekdayNameAndDetailsForDate: (NSCalendarDate *)_date; + +@end + +#endif /* __SOGoDateFormatter_H_ */ diff --git a/SoObjects/SOGo/SOGoDateFormatter.m b/SoObjects/SOGo/SOGoDateFormatter.m new file mode 100644 index 000000000..9bddd7626 --- /dev/null +++ b/SoObjects/SOGo/SOGoDateFormatter.m @@ -0,0 +1,251 @@ +/* + 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. +*/ + +#import +#import + +#import "SOGoDateFormatter.h" + +@implementation SOGoDateFormatter + +- (id) init +{ + if ((self = [super init])) + { + locale = nil; +// locale = [_locale retain]; + +// if ([[locale objectForKey:@"NSLocaleCode"] isEqualToString: @"fr"]) +// shortDateFormat = SOGoDateDMYFormat; +// else +// shortDateFormat = SOGoDateISOFormat; + shortDateFormat = nil; + longDateFormat = nil; + timeFormat = nil; + } + + return self; +} + +- (void) dealloc +{ + [longDateFormat release]; + [shortDateFormat release]; + [timeFormat release]; + [locale release]; + [super dealloc]; +} + +/* accessors */ + +- (void) setLocale: (NSDictionary *) newLocale +{ + ASSIGN (locale, newLocale); + ASSIGN (shortDateFormat, [locale objectForKey: NSShortDateFormatString]); + ASSIGN (longDateFormat, [locale objectForKey: NSDateFormatString]); + ASSIGN (timeFormat, [locale objectForKey: NSTimeFormatString]); +} + +- (void) setShortDateFormat: (NSString *) newFormat +{ + ASSIGN (shortDateFormat, newFormat); +} + +- (void) setLongDateFormat: (NSString *) newFormat +{ + ASSIGN (longDateFormat, newFormat); +} + +- (void) setTimeFormat: (NSString *) newFormat +{ + ASSIGN (timeFormat, newFormat); +} + +// - (void) setFullWeekdayNameAndDetails +// { +// auxFormatAction = formatAction; +// formatAction = @selector(fullWeekdayNameAndDetailsForDate:); +// } + +/* operation */ + +- (NSString *) _date: (NSCalendarDate *) date + withFormat: (NSString *) format +{ + NSString *formattedDate; + + if (format && locale) + formattedDate + = [date descriptionWithCalendarFormat: format locale: locale]; + else + formattedDate = nil; + + return formattedDate; +} + +- (NSString *) shortFormattedDate: (NSCalendarDate *) date +{ + return [self _date: date withFormat: shortDateFormat]; +} + +- (NSString *) formattedDate: (NSCalendarDate *) date +{ + return [self _date: date withFormat: longDateFormat]; +} + +- (NSString *) formattedTime: (NSCalendarDate *) date +{ + return [self _date: date withFormat: timeFormat]; +} + +- (NSString *) formattedDateAndTime: (NSCalendarDate *) date +{ + NSString *format; + + format = [NSString stringWithFormat: @"%@ %@ %%Z", + longDateFormat, timeFormat]; + + return [self _date: date withFormat: format]; +} + +- (NSString *) stringForObjectValue: (id) object +{ + NSString *formattedString; + + if ([object isKindOfClass: [NSCalendarDate class]]) + formattedString = [self formattedDateAndTime: object]; + else + formattedString = nil; + + return formattedString; +} + +// /* Helpers */ + +// - (NSString *)shortDayOfWeek:(int)_day { +// return [[locale objectForKey:@"NSShortWeekDayNameArray"] +// objectAtIndex:_day]; +// } + +// - (NSString *)fullDayOfWeek:(int)_day { +// return [[locale objectForKey:@"NSWeekDayNameArray"] +// objectAtIndex:_day]; +// } + +// - (NSString *)shortMonthOfYear:(int)_month { +// return [[locale objectForKey:@"NSShortMonthNameArray"] +// objectAtIndex:_month - 1]; +// } + +// - (NSString *)fullMonthOfYear:(int)_month { +// return [[locale objectForKey:@"NSMonthNameArray"] +// objectAtIndex:_month - 1]; +// } + + +/* Private API */ + +// - (NSString *) fullWeekdayNameAndDetailsForDate: (NSCalendarDate *) _date +// { +// NSMutableString *desc; + +// if (_date) +// { +// desc = [NSMutableString stringWithCapacity:24]; +// [desc appendString:[self fullDayOfWeek:[_date dayOfWeek]]]; +// [desc appendString:@", "]; +// [desc appendString:[self performSelector:auxFormatAction +// withObject:_date]]; +// [desc appendString:@" "]; +// [desc appendFormat:@"%02d:%02d ", [_date hourOfDay], [_date minuteOfHour]]; +// [desc appendString:[[_date timeZone] abbreviation]]; +// } +// else +// desc = nil; + +// return desc; +// } + +// - (NSString *) _separatorForFormat: (unsigned int) format +// { +// NSString *separator; + +// switch (format & (3)) +// { +// case SOGoDateDotFormat: +// separator = @"."; +// break; +// case SOGoDateDashFormat: +// separator = @"."; +// break; +// default: +// separator = @"/"; +// } + +// return separator; +// } + +// - (NSString *) _dateFormatForDate: (NSCalendarDate *) date +// withFormat: (unsigned int) format +// andSeparator: (NSString *) separator +// { +// NSString *day, *month, *year; +// NSString *formattedDate; + +// day = [NSString stringWithFormat: @"%.2d", [date dayOfMonth]]; +// month = [NSString stringWithFormat: @"%.2d", [date monthOfYear]]; +// if (format & SOGoDateTwoDigitsYearFormat) +// year = [NSString stringWithFormat: @"%.2d", [date yearOfCommonEra] % 100]; +// else +// year = [NSString stringWithFormat: @"%.4d", [date yearOfCommonEra]]; + +// if (format & SOGoDateDMYFormat) +// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@", +// day, separator, month, separator, year]; +// else if (format & SOGoDateMDYFormat) +// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@", +// month, separator, day, separator, year]; +// else +// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@", +// year, separator, month, separator, day]; + +// return formattedDate; +// } + +// - (NSString *) date: (NSCalendarDate *) date +// withFormat: (unsigned int) format +// { +// NSString *separator; + +// separator = [self _separatorForFormat: format]; + +// return [self _dateFormatForDate: date +// withFormat: format +// andSeparator: separator]; +// } + +// - (NSString *) date: (NSCalendarDate *) date +// withNSFormat: (NSNumber *) format +// { +// return [self date: date withFormat: [format unsignedIntValue]]; +// } + +@end /* SOGoDateFormatter */ diff --git a/UI/SOGoUI/SOGoDateFormatter.h b/UI/SOGoUI/SOGoDateFormatter.h deleted file mode 100644 index 2e084842b..000000000 --- a/UI/SOGoUI/SOGoDateFormatter.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - 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. -*/ - -#ifndef __SOGoDateFormatter_H_ -#define __SOGoDateFormatter_H_ - -#import - -@class NSString, NSCalendarDate, NSDictionary; - -@interface SOGoDateFormatter : NSFormatter -{ - NSDictionary *locale; - SEL formatAction; - SEL auxFormatAction; -} - -- (id)initWithLocale:(NSDictionary *)_locale; - -- (void)setISODateFormat; -- (void)setFrenchDateFormat; - -- (void)setFullWeekdayNameAndDetails; - -- (NSString *)stringForObjectValue:(id)_obj; -- (NSString *) stringForSecondsSinceThe70s: (unsigned int) seconds; - -- (NSString *)shortDayOfWeek:(int)_day; -- (NSString *)fullDayOfWeek:(int)_day; -- (NSString *)shortMonthOfYear:(int)_month; -- (NSString *)fullMonthOfYear:(int)_month; - -- (NSString *)isoDateFormatForDate:(NSCalendarDate *)_date; -- (NSString *)fullWeekdayNameAndDetailsForDate:(NSCalendarDate *)_date; - -@end - -#endif /* __SOGoDateFormatter_H_ */ diff --git a/UI/SOGoUI/SOGoDateFormatter.m b/UI/SOGoUI/SOGoDateFormatter.m deleted file mode 100644 index c618be415..000000000 --- a/UI/SOGoUI/SOGoDateFormatter.m +++ /dev/null @@ -1,134 +0,0 @@ -/* - 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. -*/ - -#include "SOGoDateFormatter.h" -#include "common.h" - -@implementation SOGoDateFormatter - -- (id)initWithLocale:(NSDictionary *)_locale { - if ((self = [super init])) { - self->locale = [_locale retain]; - - if ([[self->locale objectForKey:@"NSLocaleCode"] isEqualToString:@"fr"]) - [self setFrenchDateFormat]; - else - [self setISODateFormat]; - } - return self; -} - -- (void)dealloc { - [self->locale release]; - [super dealloc]; -} - -/* accessors */ - -- (void)setISODateFormat { - self->formatAction = @selector(isoDateFormatForDate:); -} - -- (void)setFrenchDateFormat { - self->formatAction = @selector(frenchDateFormatForDate:); -} - -- (void)setFullWeekdayNameAndDetails { - self->auxFormatAction = self->formatAction; - self->formatAction = @selector(fullWeekdayNameAndDetailsForDate:); -} - -/* operation */ - -- (NSString *) stringForObjectValue: (id) _obj -{ - return [self performSelector:self->formatAction - withObject:_obj]; -} - -- (NSString *) stringForSecondsSinceThe70s: (unsigned int) seconds -{ - return [self stringForObjectValue: - [NSCalendarDate dateWithTimeIntervalSince1970: seconds]]; -} - -/* Helpers */ - -- (NSString *)shortDayOfWeek:(int)_day { - return [[self->locale objectForKey:@"NSShortWeekDayNameArray"] - objectAtIndex:_day]; -} - -- (NSString *)fullDayOfWeek:(int)_day { - return [[self->locale objectForKey:@"NSWeekDayNameArray"] - objectAtIndex:_day]; -} - -- (NSString *)shortMonthOfYear:(int)_month { - return [[self->locale objectForKey:@"NSShortMonthNameArray"] - objectAtIndex:_month - 1]; -} - -- (NSString *)fullMonthOfYear:(int)_month { - return [[self->locale objectForKey:@"NSMonthNameArray"] - objectAtIndex:_month - 1]; -} - - -/* Private API */ - -- (NSString *)isoDateFormatForDate:(NSCalendarDate *)_date { - char buf[16]; - - if (_date == nil) return nil; - snprintf(buf, sizeof(buf), - "%04d-%02d-%02d", - [_date yearOfCommonEra], [_date monthOfYear], [_date dayOfMonth]); - return [NSString stringWithCString:buf]; -} - -- (NSString *)frenchDateFormatForDate:(NSCalendarDate *)_date { - char buf[16]; - - if (_date == nil) return nil; - snprintf(buf, sizeof(buf), - "%02d/%02d/%04d", - [_date dayOfMonth], [_date monthOfYear], [_date yearOfCommonEra]); - return [NSString stringWithCString:buf]; -} - -- (NSString *)fullWeekdayNameAndDetailsForDate:(NSCalendarDate *)_date { - NSMutableString *desc; - - if (_date == nil) return nil; - - desc = [NSMutableString stringWithCapacity:24]; - [desc appendString:[self fullDayOfWeek:[_date dayOfWeek]]]; - [desc appendString:@", "]; - [desc appendString:[self performSelector:self->auxFormatAction - withObject:_date]]; - [desc appendString:@" "]; - [desc appendFormat:@"%02d:%02d ", [_date hourOfDay], [_date minuteOfHour]]; - [desc appendString:[[_date timeZone] abbreviation]]; - return desc; -} - -@end /* SOGoDateFormatter */