Skip to content

Commit

Permalink
Merge pull request #1676 from deltaprojects/master
Browse files Browse the repository at this point in the history
CPNumberFormatterPercentStyle and CPTableView hidden column bug fix
  • Loading branch information
aljungberg committed Sep 24, 2012
2 parents c8a37b4 + 02a885e commit 566cd6c
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 6 deletions.
14 changes: 8 additions & 6 deletions AppKit/CPTableView.j
Expand Up @@ -3376,12 +3376,14 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
rowIndex = 0,
rowsCount = rowArray.length;

for (; rowIndex < rowsCount; ++rowIndex)
{
var row = rowArray[rowIndex],
dataView = dataViewsForTableColumn[row];

[dataView setFrame:[self frameOfDataViewAtColumn:column row:row]];
if (dataViewsForTableColumn) {
for (; rowIndex < rowsCount; ++rowIndex)
{
var row = rowArray[rowIndex],
dataView = dataViewsForTableColumn[row];

[dataView setFrame:[self frameOfDataViewAtColumn:column row:row]];
}
}
}
}
Expand Down
11 changes: 11 additions & 0 deletions Foundation/CPNumberFormatter.j
Expand Up @@ -90,13 +90,19 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain;

- (CPString)stringFromNumber:(CPNumber)number
{
if (_numberStyle == CPNumberFormatterPercentStyle)
{
number *= 100.0;
}

var dcmn = [number isKindOfClass:CPDecimalNumber] ? number : [[CPDecimalNumber alloc] _initWithJSNumber:number];

// TODO Add locale support.
switch (_numberStyle)
{
case CPNumberFormatterCurrencyStyle:
case CPNumberFormatterDecimalStyle:
case CPNumberFormatterPercentStyle:
UPDATE_NUMBER_HANDLER_IF_NECESSARY();

dcmn = [dcmn decimalNumberByRoundingAccordingToBehavior:_numberHandler];
Expand Down Expand Up @@ -133,6 +139,11 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain;
else
string = _currencyCode + string;
}

if (_numberStyle == CPNumberFormatterPercentStyle)
{
string += "%";
}

return string;
default:
Expand Down
35 changes: 35 additions & 0 deletions Tests/AppKit/CPTableViewTest.j
Expand Up @@ -267,6 +267,41 @@
[contentBindingTable reloadData];
}

- (void)testInitiallyHiddenColumns
{
var table = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 400, 400)],
tableColumn1 = [[CPTableColumn alloc] initWithIdentifier:@"A"],
tableColumn2 = [[CPTableColumn alloc] initWithIdentifier:@"B"],
delegate = [ContentBindingTableDelegate new];

[delegate setTester:self];
[table setDelegate:delegate];

[delegate setTableEntries:[[@"A1", @"B1"], [@"A2", @"B2"], [@"A3", @"B3"]]];
[table bind:@"content" toObject:delegate withKeyPath:@"tableEntries" options:nil];

[[theWindow contentView] addSubview:table];

[tableColumn1 setHidden:YES];

[tableColumn1 setWidth:50.0];
[tableColumn2 setWidth:100.0];

[table addTableColumn:tableColumn1];
[table addTableColumn:tableColumn2];

[table reloadData];

[[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];

[self assertTrue:[table bounds].size.width > 100 && [table bounds].size.width < 200];

[tableColumn1 setHidden:NO];
[tableColumn1 setWidth:100.0];

[self assertTrue:[table bounds].size.width >= 200];
}

@end

@implementation FirstResponderConfigurableTableView : CPTableView
Expand Down
17 changes: 17 additions & 0 deletions Tests/Foundation/CPNumberFormatterTest.j
Expand Up @@ -143,6 +143,23 @@
[self assert:@"SEK0.02" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.015"]]];
}

- (void)testPercentStyle
{
var numberFormatter = [CPNumberFormatter new];
[numberFormatter setNumberStyle:CPNumberFormatterPercentStyle];

[self assert:@"1%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.01"]]];
[self assert:@"100%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.0"]]];
[self assert:@"150%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.5"]]];

[numberFormatter setMinimumFractionDigits:1];
[numberFormatter setMaximumFractionDigits:1];

[self assert:@"1.0%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.01"]]];
[self assert:@"100.2%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.002"]]];
[self assert:@"150.7%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.507"]]];
}

- (void)testSetGeneratesDecimalNumbers_
{
var numberFormatter = [CPNumberFormatter new];
Expand Down

0 comments on commit 566cd6c

Please sign in to comment.