From 3758c86d20161d60fe5911a937460b809d0bf390 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 11 Jun 2011 03:59:33 -0700 Subject: [PATCH] CPFormatter support for CPControl. --- AppKit/CPControl.j | 22 +++++++++++++++++++++- Foundation/CPNumberFormatter.j | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 0df00d6c6..18afec8f6 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -89,6 +89,8 @@ var CPControlBlackColor = [CPColor blackColor]; int _sendActionOn; BOOL _sendsActionOnEndEditing @accessors(property=sendsActionOnEndEditing); + CPFormatter _formatter @accessors(property=formatter); + // Mouse Tracking Support BOOL _continuousTracking; BOOL _trackingWasWithinFrame; @@ -502,6 +504,15 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (CPString)stringValue { + var formatted; + + if (_formatter) + { + formatted = [_formatter stringForObjectValue:_value]; + if (formatted !== nil && formatted !== undefined) + return formatted; + } + return (_value === undefined || _value === nil) ? "" : String(_value); } @@ -510,7 +521,16 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (void)setStringValue:(CPString)anObject { - [self setObjectValue:anObject]; + var value = anObject; + + if (_formatter) + { + var formattedValue = nil; + if ([_formatter getObjectValue:@ref(formattedValue) forString:value errorDescription:NULL]) + value = formattedValue; + } + + [self setObjectValue:value]; } - (void)takeDoubleValueFrom:(id)sender diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index 6628a3f5c..2e0921d4b 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -109,6 +109,27 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; return parseFloat(string); } +- (CPString)stringForObjectValue:(id)anObject +{ + if ([anObject isKindOfClass:[CPNumber class]]) + return [self stringFromNumber:anObject]; + else + return [anObject description]; +} + +- (CPString)editingStringForObjectValue:(id)anObject +{ + return [self stringForObjectValue:anObject]; +} + +- (BOOL)getObjectValue:(id)anObject forString:(CPString)aString errorDescription:(CPString)anError +{ + // TODO Error handling. + var value = [self numberFromString:aString]; + @deref(anObject, value); + return YES; +} + /*! @ignore Return the perMillSymbol if set, otherwise the locale default.