Revision: 2838
          http://skim-app.svn.sourceforge.net/skim-app/?rev=2838&view=rev
Author:   hofman
Date:     2007-09-05 11:51:35 -0700 (Wed, 05 Sep 2007)

Log Message:
-----------
More type-select improvements. Wrap more determination of event type in 
TypeSelectHelper. Correct check for characters to extend type-select.

Modified Paths:
--------------
    trunk/SKOutlineView.m
    trunk/SKPDFView.m
    trunk/SKTableView.m
    trunk/SKTypeSelectHelper.h
    trunk/SKTypeSelectHelper.m

Modified: trunk/SKOutlineView.m
===================================================================
--- trunk/SKOutlineView.m       2007-09-05 17:33:18 UTC (rev 2837)
+++ trunk/SKOutlineView.m       2007-09-05 18:51:35 UTC (rev 2838)
@@ -91,16 +91,14 @@
     unichar eventChar = [characters length] > 0 ? [characters 
characterAtIndex:0] : 0;
        unsigned modifierFlags = [theEvent modifierFlags] & 
NSDeviceIndependentModifierFlagsMask;
     
-    if ([typeSelectHelper isTypeSelectEvent:theEvent])
-        [typeSelectHelper processKeyDownEvent:theEvent];
-    else if ([typeSelectHelper isRepeatEvent:theEvent])
-        [typeSelectHelper repeatSearch];
-    else if (eventChar == NSHomeFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0)
+    if ([typeSelectHelper processKeyDownEvent:theEvent]) {
+    } else if (eventChar == NSHomeFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0) {
         [self scrollToBeginningOfDocument:nil];
-    else if (eventChar == NSEndFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0)
+    } else if (eventChar == NSEndFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0) {
         [self scrollToEndOfDocument:nil];
-    else
+    } else {
         [super keyDown:theEvent];
+    }
 }
 
 - (void)scrollToBeginningOfDocument:(id)sender {

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2007-09-05 17:33:18 UTC (rev 2837)
+++ trunk/SKPDFView.m   2007-09-05 18:51:35 UTC (rev 2838)
@@ -952,10 +952,7 @@
             [self setAnnotationMode:SKStrikeOutNote];
         } else if ([self toolMode] == SKNoteToolMode && modifiers == 0 && 
eventChar == 'l') {
             [self setAnnotationMode:SKLineNote];
-        } else if ([typeSelectHelper isTypeSelectEvent:theEvent]) {
-            [typeSelectHelper processKeyDownEvent:theEvent];
-        } else if ([typeSelectHelper isRepeatEvent:theEvent]) {
-            [typeSelectHelper repeatSearch];
+        } else if ([typeSelectHelper processKeyDownEvent:theEvent]) {
         } else {
             [super keyDown:theEvent];
         }

Modified: trunk/SKTableView.m
===================================================================
--- trunk/SKTableView.m 2007-09-05 17:33:18 UTC (rev 2837)
+++ trunk/SKTableView.m 2007-09-05 18:51:35 UTC (rev 2838)
@@ -69,18 +69,18 @@
     unichar eventChar = [characters length] > 0 ? [characters 
characterAtIndex:0] : 0;
        unsigned modifierFlags = [theEvent modifierFlags] & 
NSDeviceIndependentModifierFlagsMask;
     
-    if ([typeSelectHelper isTypeSelectEvent:theEvent])
-        [typeSelectHelper processKeyDownEvent:theEvent];
-    else if ([typeSelectHelper isRepeatEvent:theEvent])
+    if ([typeSelectHelper processKeyDownEvent:theEvent]) {
+    } else if ([typeSelectHelper isRepeatEvent:theEvent]) {
         [typeSelectHelper repeatSearch];
-       else if ((eventChar == NSDeleteCharacter || eventChar == 
NSDeleteFunctionKey) && modifierFlags == 0 && [self canDelete])
+       } else if ((eventChar == NSDeleteCharacter || eventChar == 
NSDeleteFunctionKey) && modifierFlags == 0 && [self canDelete]) {
         [self delete:self];
-    else if (eventChar == NSHomeFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0)
+    } else if (eventChar == NSHomeFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0) {
         [self scrollToBeginningOfDocument:nil];
-    else if (eventChar == NSEndFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0)
+    } else if (eventChar == NSEndFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0) {
         [self scrollToEndOfDocument:nil];
-    else
+    } else {
         [super keyDown:theEvent];
+    }
 }
 
 - (void)scrollToBeginningOfDocument:(id)sender {

Modified: trunk/SKTypeSelectHelper.h
===================================================================
--- trunk/SKTypeSelectHelper.h  2007-09-05 17:33:18 UTC (rev 2837)
+++ trunk/SKTypeSelectHelper.h  2007-09-05 18:51:35 UTC (rev 2838)
@@ -76,12 +76,15 @@
 
 - (void)rebuildTypeSelectSearchCache;
 
-- (void)processKeyDownEvent:(NSEvent *)keyEvent;
+- (BOOL)processKeyDownEvent:(NSEvent *)keyEvent;
+- (void)searchWithEvent:(NSEvent *)keyEvent;
 - (void)repeatSearch;
-- (void)stopSearch;
+- (void)cancelSearch;
 
 - (BOOL)isTypeSelectEvent:(NSEvent *)keyEvent;
+- (BOOL)isSearchEvent:(NSEvent *)keyEvent;
 - (BOOL)isRepeatEvent:(NSEvent *)keyEvent;
+- (BOOL)isCancelEvent:(NSEvent *)keyEvent;
 
 @end
 

Modified: trunk/SKTypeSelectHelper.m
===================================================================
--- trunk/SKTypeSelectHelper.m  2007-09-05 17:33:18 UTC (rev 2837)
+++ trunk/SKTypeSelectHelper.m  2007-09-05 18:51:35 UTC (rev 2838)
@@ -41,7 +41,8 @@
 
 static NSString *SKWindowDidChangeFirstResponderNotification = 
@"SKWindowDidChangeFirstResponderNotification";
 
-#define REPEAT_CHARACTER '/'
+#define REPEAT_CHARACTER 0x2F
+#define CANCEL_CHARACTER 0x1B
 
 @interface NSString (SKTypeAheadHelperExtensions)
 - (BOOL)containsStringStartingAtWord:(NSString *)string options:(int)mask 
range:(NSRange)range;
@@ -146,12 +147,28 @@
     searchCache = [[dataSource typeSelectHelperSelectionItems:self] retain];
 }
 
-- (void)processKeyDownEvent:(NSEvent *)keyEvent {
-    NSText *fieldEditor = [[NSApp keyWindow] fieldEditor:YES forObject:self];
+- (BOOL)processKeyDownEvent:(NSEvent *)keyEvent {
+    if ([self isSearchEvent:keyEvent]) {
+        [self searchWithEvent:keyEvent];
+        return YES;
+    } else if ([self isRepeatEvent:keyEvent]) {
+        [self repeatSearch];
+        return YES;
+    } else if ([self isCancelEvent:keyEvent]) {
+        [self cancelSearch];
+        return YES;
+    }
+    return NO;
+}
+
+- (void)searchWithEvent:(NSEvent *)keyEvent {
+    NSWindow *keyWindow = [NSApp keyWindow];
+    NSText *fieldEditor = [keyWindow fieldEditor:YES forObject:self];
     
     if (processing == NO) {
-        [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(typeSelectCleanTimeout:) 
name:SKWindowDidChangeFirstResponderNotification object:[NSApp keyWindow]];
-        [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(typeSelectCleanTimeout:) 
name:NSWindowDidResignKeyNotification object:[NSApp keyWindow]];
+        [[NSNotificationCenter defaultCenter] removeObserver:self];
+        [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(typeSelectCleanTimeout:) 
name:SKWindowDidChangeFirstResponderNotification object:keyWindow];
+        [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(typeSelectCleanTimeout:) 
name:NSWindowDidResignKeyNotification object:keyWindow];
         [fieldEditor setString:@""];
     }
     
@@ -182,33 +199,28 @@
     processing = NO;
 }
 
-- (void)stopSearch {
+- (void)cancelSearch {
     if (timer)
         [self typeSelectCleanTimeout:timer];
 }
 
 - (BOOL)isTypeSelectEvent:(NSEvent *)keyEvent {
+    return [self isSearchEvent:keyEvent] || [self isRepeatEvent:keyEvent] || 
[self isCancelEvent:keyEvent];
+}
+
+- (BOOL)isSearchEvent:(NSEvent *)keyEvent {
     if ([keyEvent type] != NSKeyDown)
         return NO;
     if ([keyEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask & 
~NSShiftKeyMask & ~NSAlternateKeyMask)
         return NO;
     
-    NSString *characters = [keyEvent charactersIgnoringModifiers];
-    int i, count = [characters length];
-    unichar character;
+    static NSCharacterSet *nonAlphanumericCharacterSet = nil;
+    if (nonAlphanumericCharacterSet == nil)
+        nonAlphanumericCharacterSet = [[[NSCharacterSet 
alphanumericCharacterSet] invertedSet] copy];
     
-    if (count == 0)
-        return NO;
+    NSCharacterSet *invalidCharacters = [self isProcessing] ? [NSCharacterSet 
controlCharacterSet] : nonAlphanumericCharacterSet;
     
-    for (i = 0; i < count; i++) {
-        character = [characters characterAtIndex:i];
-        if ([[NSCharacterSet alphanumericCharacterSet] 
characterIsMember:character])
-            continue;
-        if ([self isProcessing] && [[NSCharacterSet controlCharacterSet] 
characterIsMember:character])
-            continue;
-        return NO;
-    }
-    return YES;
+    return [[keyEvent characters] 
rangeOfCharacterFromSet:invalidCharacters].location == NSNotFound;
 }
 
 - (BOOL)isRepeatEvent:(NSEvent *)keyEvent {
@@ -222,6 +234,19 @@
     return modifierFlags == 0 && character == REPEAT_CHARACTER;
 }
 
+- (BOOL)isCancelEvent:(NSEvent *)keyEvent {
+    if ([keyEvent type] != NSKeyDown)
+        return NO;
+    if ([self isProcessing] == NO)
+        return NO;
+    
+    NSString *characters = [keyEvent charactersIgnoringModifiers];
+    unichar character = [characters length] > 0 ? [characters 
characterAtIndex:0] : 0;
+       unsigned modifierFlags = [keyEvent modifierFlags] & 
NSDeviceIndependentModifierFlagsMask;
+    
+    return modifierFlags == 0 && character == CANCEL_CHARACTER;
+}
+
 @end 
 
 #pragma mark -


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to