From 07330a0ca83a13732f22bb7f98147c42cb7d9631 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 23 Oct 2010 13:49:36 -0300 Subject: [PATCH] Select tokens by clicking on them. Select multiple tokens by holding down shift. Also fixed a bug when deleting multiple tokens at a time. --- AppKit/CPTokenField.j | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 0c0fbdbdd..c63d0a779 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -72,6 +72,8 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", CPArray _cachedCompletions; CPCharacterSet _tokenizingCharacterSet @accessors(property=tokenizingCharacterSet); + + CPEvent _mouseDownEvent; } + (CPCharacterSet)defaultTokenizingCharacterSet @@ -263,7 +265,7 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", { var tokens = [self objectValue]; - for (var i = 0; i < _selectedRange.length; i++) + for (var i = _selectedRange.length - 1; i >= 0; i--) [tokens removeObjectAtIndex:_selectedRange.location + i]; var collapsedSelection = _selectedRange.location; @@ -391,12 +393,32 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", - (void)mouseDown:(CPEvent)anEvent { + _mouseDownEvent = anEvent; + [self _selectToken:nil byExtendingSelection:NO]; - // CPTokenFieldFocusInput = YES; [super mouseDown:anEvent]; } +- (void)mouseUp:(CPEvent)anEvent +{ + _mouseDownEvent = nil; +} + +- (void)mouseDownOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent +{ + _mouseDownEvent = anEvent; +} + +- (void)mouseUpOnToken:(_CPTokenFieldToken)aToken withEvent:(CPEvent)anEvent +{ + if (_mouseDownEvent && CGPointEqualToPoint([_mouseDownEvent locationInWindow], [anEvent locationInWindow])) + { + [[self window] makeFirstResponder:self]; + [self _selectToken:aToken byExtendingSelection:[anEvent modifierFlags] & CPShiftKeyMask]; + } +} + // =========== // = CONTROL = // =========== @@ -1083,7 +1105,12 @@ var CPThemeStateAutoCompleting = @"CPThemeStateAutoCompleting", - (void)mouseDown:(CPEvent)anEvent { - [_tokenField mouseDown:anEvent]; + [_tokenField mouseDownOnToken:self withEvent:anEvent]; +} + +- (void)mouseUp:(CPEvent)anEvent +{ + [_tokenField mouseUpOnToken:self withEvent:anEvent]; } - (void)_delete:(id)sender