diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 95f5248f8..26a93d318 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -98,60 +98,65 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", if (self = [super initWithFrame:frame]) { _selectedRange = CPMakeRange(0, 0); - - _tokenScrollView = [[CPScrollView alloc] initWithFrame:CGRectMakeZero()]; - [_tokenScrollView setHasHorizontalScroller:NO]; - [_tokenScrollView setHasVerticalScroller:NO]; - [_tokenScrollView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - - var contentView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; - [contentView setAutoresizingMask:CPViewWidthSizable]; - [_tokenScrollView setDocumentView:contentView]; - - [self addSubview:_tokenScrollView]; - _tokenIndex = 0; - - _cachedCompletions = []; _completionDelay = [CPTokenField defaultCompletionDelay]; - _tokenizingCharacterSet = [[self class] defaultTokenizingCharacterSet]; - - _autocompleteContainer = [[CPView alloc] initWithFrame:CPRectMake(0.0, 0.0, frame.size.width, 92.0)]; - [_autocompleteContainer setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; - - _autocompleteScrollView = [[CPScrollView alloc] initWithFrame:CPRectMake(1.0, 1.0, frame.size.width - 2.0, 90.0)]; - [_autocompleteScrollView setAutohidesScrollers:YES]; - [_autocompleteScrollView setHasHorizontalScroller:NO]; - [_autocompleteContainer addSubview:_autocompleteScrollView]; - - _autocompleteView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; - - var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; - [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; - [_autocompleteView addTableColumn:tableColumn]; - - [_autocompleteView setDataSource:self]; - [_autocompleteView setDelegate:self]; - [_autocompleteView setAllowsMultipleSelection:NO]; - [_autocompleteView setHeaderView:nil]; - [_autocompleteView setCornerView:nil]; - [_autocompleteView setRowHeight:30.0]; - [_autocompleteView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; - [_autocompleteView setBackgroundColor:[CPColor clearColor]]; - [_autocompleteView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; - - [_autocompleteScrollView setDocumentView:_autocompleteView]; - [self setBezeled:YES]; + [self _init]; + [self setObjectValue:[]]; + [self setNeedsLayout]; } return self; } +- (void)_init +{ + var frame = [self frame]; + + _tokenScrollView = [[CPScrollView alloc] initWithFrame:CGRectMakeZero()]; + [_tokenScrollView setHasHorizontalScroller:NO]; + [_tokenScrollView setHasVerticalScroller:NO]; + [_tokenScrollView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + + var contentView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + [contentView setAutoresizingMask:CPViewWidthSizable]; + [_tokenScrollView setDocumentView:contentView]; + + [self addSubview:_tokenScrollView]; + + _cachedCompletions = []; + + _autocompleteContainer = [[CPView alloc] initWithFrame:CPRectMake(0.0, 0.0, frame.size.width, 92.0)]; + [_autocompleteContainer setBackgroundColor:[_CPMenuWindow backgroundColorForBackgroundStyle:_CPMenuWindowPopUpBackgroundStyle]]; + + _autocompleteScrollView = [[CPScrollView alloc] initWithFrame:CPRectMake(1.0, 1.0, frame.size.width - 2.0, 90.0)]; + [_autocompleteScrollView setAutohidesScrollers:YES]; + [_autocompleteScrollView setHasHorizontalScroller:NO]; + [_autocompleteContainer addSubview:_autocompleteScrollView]; + + _autocompleteView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; + + var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; + [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; + [_autocompleteView addTableColumn:tableColumn]; + + [_autocompleteView setDataSource:self]; + [_autocompleteView setDelegate:self]; + [_autocompleteView setAllowsMultipleSelection:NO]; + [_autocompleteView setHeaderView:nil]; + [_autocompleteView setCornerView:nil]; + [_autocompleteView setRowHeight:30.0]; + [_autocompleteView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; + [_autocompleteView setBackgroundColor:[CPColor clearColor]]; + [_autocompleteView setGridColor:[CPColor colorWithRed:242.0 / 255.0 green:243.0 / 255.0 blue:245.0 / 255.0 alpha:1.0]]; + + [_autocompleteScrollView setDocumentView:_autocompleteView]; +} + // =============== // = CONVENIENCE = // =============== @@ -1292,3 +1297,37 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", } @end + + +var CPTokenFieldTokenizingCharacterSetKey = "CPTokenFieldTokenizingCharacterSetKey", + CPTokenFieldCompletionDelayKey = "CPTokenFieldCompletionDelay"; + +@implementation CPTokenField (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super initWithCoder:aCoder]; + + if (self) + { + _tokenizingCharacterSet = [aCoder decodeObjectForKey:CPTokenFieldTokenizingCharacterSetKey] || [[self class] defaultTokenizingCharacterSet]; + _completionDelay = [aCoder decodeDoubleForKey:CPTokenFieldCompletionDelayKey] || [[self class] defaultCompletionDelay]; + + [self _init]; + + [self setNeedsLayout]; + [self setNeedsDisplay:YES]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeInt:_tokenizingCharacterSet forKey:CPTokenFieldTokenizingCharacterSetKey]; + [aCoder encodeDouble:_completionDelay forKey:CPTokenFieldCompletionDelayKey]; +} + +@end \ No newline at end of file diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j new file mode 100644 index 000000000..1cbc071e0 --- /dev/null +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -0,0 +1,20 @@ +@import + +@implementation CPTokenFieldTest : OJTestCase +{ +} + +- (void)testArchiving +{ + var tokenField = [CPTokenField new]; + [tokenField setCompletionDelay:5.0]; + [tokenField setTokenizingCharacterSet:[CPCharacterSet characterSetWithCharactersInString:@","]]; + + var archived = [CPKeyedArchiver archivedDataWithRootObject:tokenField], + unarchived = [CPKeyedUnarchiver unarchiveObjectWithData:archived]; + + [self assert:[unarchived completionDelay] equals:5.0]; + [self assert:[unarchived tokenizingCharacterSet] equals:[CPCharacterSet characterSetWithCharactersInString:@","]]; +} + +@end \ No newline at end of file