Codebase list agenda.app / HEAD HourFormatter.m
HEAD

Tree @HEAD (Download .tar.gz)

HourFormatter.m @HEADraw · history · blame

/* emacs buffer mode hint -*- objc -*- */

#import "HourFormatter.h"

@implementation HourFormatter
+ (NSString *)stringForObjectValue:(id)anObject
{
  int hours;
  int minutes;

  if (![anObject isKindOfClass:[NSNumber class]])
    return nil;
  hours = [anObject intValue] / 3600;
  minutes = [anObject intValue] / 60 - hours * 60;
  return [NSString stringWithFormat:@"%dh%02d", hours, minutes];
}

- (NSString *)stringForObjectValue:(id)anObject
{
  return [HourFormatter stringForObjectValue:anObject];
}

- (BOOL)getObjectValue:(id *)anObject forString:(NSString *)string errorDescription:(NSString **)error
{
  NSNumberFormatter *nf;
  NSNumber *hours;
  NSNumber *minutes;
  NSArray *components = [string componentsSeparatedByString:@"h"];

  if (!components || [components count] != 2) {
    if (error)
      *error = [[NSString alloc] initWithString:@"Bad time formatting : cannot find hours and minutes separated by h"];
    return NO;
  }
  nf = AUTORELEASE([[NSNumberFormatter alloc] init]);
  hours = [nf numberFromString:[components objectAtIndex:0]];
  minutes = [nf numberFromString:[components objectAtIndex:1]];
  if (!hours || !minutes) {
    if (error)
      *error = [[NSString alloc] initWithString:@"Bad time formatting"];
    return NO;
  }
  if ([hours intValue] < 0 || [hours intValue] > 23) {
    if (error)
      *error = [[NSString alloc] initWithString:@"Hours must be between 0 and 23"];
    return NO;
  }
  if ([minutes intValue] < 0 || [minutes intValue] > 59) {
    if (error)
      *error = [[NSString alloc] initWithString:@"Minutes must be between 0 and 59"];
    return NO;
  }
  *anObject = [[NSNumber alloc] initWithInt:[hours intValue] * 3600 + [minutes intValue] * 60.0];
  return YES;
}

- (NSAttributedString *)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(NSDictionary *)attributes
{
  return nil;
}
@end