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