From 9f4dd3c2b895048f565ec3f65755d97b3553199e Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 3 Mar 2010 14:56:27 +0100 Subject: [PATCH] added various hacks to make the cptokenfield work with the new enstore admin --- AppKit/CPTokenField.j | 50 +++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 64cacd109..30a3e7a16 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -89,24 +89,16 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; [_autocompleteScrollView setHasHorizontalScroller:NO]; [_autocompleteContainer addSubview:_autocompleteScrollView]; - _autocompleteView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; + _autocompleteView = [[CPTableView alloc] initWithFrame:CPRectMakeZero()]; var tableColumn = [[CPTableColumn alloc] initWithIdentifier:CPTokenFieldTableColumnIdentifier]; - [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; - - var dataView = [[CPTextField alloc] init]; - [dataView setValue:[CPFont systemFontOfSize:13.0] forThemeAttribute:@"font"]; - [dataView setValue:[CPColor colorWithHexString:@"3a3b3f"] forThemeAttribute:@"text-color"]; - [dataView setValue:CGInsetMake(0.0, 0.0, 3.0, 10.0) forThemeAttribute:@"content-inset"]; - [dataView setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment"]; - [tableColumn setDataView:dataView]; - + [tableColumn setResizingMask:CPTableColumnAutoresizingMask]; [_autocompleteView addTableColumn:tableColumn]; [_autocompleteView setDataSource:self]; [_autocompleteView setDelegate:self]; [_autocompleteView setAllowsMultipleSelection:NO]; - // [_autocompleteView setHeaderView:nil]; + [_autocompleteView setHeaderView:nil]; [_autocompleteView setCornerView:nil]; [_autocompleteView setRowHeight:30.0]; [_autocompleteView setGridStyleMask:CPTableViewSolidHorizontalGridLineMask]; @@ -140,7 +132,9 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; [self _hideCompletions]; - var token = _cachedCompletions[[_autocompleteView selectedRow]]; + var token = _cachedCompletions[[_autocompleteView selectedRow]], + shouldRemoveLastObject = token !== @"" && [self _inputElement].value !== @""; + if (!token) token = [self _inputElement].value; @@ -165,11 +159,15 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; // Remove the uncompleted token and add the token string. // Explicitely remove the last object because the array contains strings and removeObject uses isEqual to compare objects - var indexOfLastObject = [objectValue count] - 1; - if (!indexOfLastObject) - indexOfLastObject = 0; - - [objectValue removeObjectAtIndex:indexOfLastObject]; + if (shouldRemoveLastObject) + { + var indexOfLastObject = [objectValue count] - 1; + if (!indexOfLastObject) + indexOfLastObject = 0; + + [objectValue removeObjectAtIndex:indexOfLastObject]; + } + [objectValue addObject:token]; [self setObjectValue:objectValue]; @@ -209,6 +207,8 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; [objectValue removeObjectAtIndex:indexOfToken]; [self setObjectValue:objectValue]; + + [self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]]; } - (CPIndexSet)_selectedTokenIndexes @@ -354,6 +354,11 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; return [super objectValue]; } +- (CPString)stringValue +{ + return [[self objectValue] componentsJoinedByString:@","]; +} + - (id)objectValue { var objectValue = []; @@ -368,9 +373,7 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; } if ([self _inputElement].value != @"") - { [objectValue addObject:[self _inputElement].value]; - } return objectValue; } @@ -407,6 +410,13 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; [super setObjectValue:objectValue]; } +// Incredible hack to disable supers implementation +// so it cannot change our object value and break the tokenfield +- (void)_setStringValue:(id)aValue +{ +} + + // ======== // = VIEW = // ======== @@ -723,6 +733,8 @@ var CPTokenFieldTableColumnIdentifier = @"CPTokenFieldTableColumnIdentifier"; [_autocompleteContainer setHidden:NO]; var frameOrigin = [self convertPoint:[self bounds].origin toView:nil]; [_autocompleteContainer setFrameOrigin:CPPointMake(frameOrigin.x, frameOrigin.y + frame.size.height)]; + [_autocompleteContainer setFrameSize:CPSizeMake(CPRectGetWidth([self bounds]), 100.0)]; + [_autocompleteScrollView setFrameSize:CPSizeMake([_autocompleteContainer frame].size.width - 19.0, 90.0)]; } else [_autocompleteContainer setHidden:YES];