Revision: 2834
http://skim-app.svn.sourceforge.net/skim-app/?rev=2834&view=rev
Author: hofman
Date: 2007-09-05 06:52:22 -0700 (Wed, 05 Sep 2007)
Log Message:
-----------
Allow non-ascii characters for type-select. Use the current keyWindow's field
editor to compose text.
Modified Paths:
--------------
trunk/SKBookmarkController.m
trunk/SKMainWindowController.m
trunk/SKNotesDocument.m
trunk/SKOutlineView.m
trunk/SKPDFView.m
trunk/SKTableView.m
trunk/SKTypeSelectHelper.h
trunk/SKTypeSelectHelper.m
Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKBookmarkController.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -360,7 +360,7 @@
#pragma mark SKTypeSelectHelper datasource protocol
- (NSArray *)typeSelectHelperSelectionItems:(SKTypeSelectHelper
*)typeSelectHelper {
- return [bookmarks valueForKeyPath:@"label.lossyASCIIString"];
+ return [bookmarks valueForKey:@"label"];
}
- (unsigned int)typeSelectHelperCurrentlySelectedIndex:(SKTypeSelectHelper
*)typeSelectHelper {
Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKMainWindowController.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -3648,7 +3648,7 @@
if ([typeSelectHelper isEqual:[thumbnailTableView typeSelectHelper]] ||
[typeSelectHelper isEqual:[pdfView typeSelectHelper]]) {
return pageLabels;
} else if ([typeSelectHelper isEqual:[noteOutlineView typeSelectHelper]]) {
- return [[noteArrayController arrangedObjects]
valueForKeyPath:@"contents.lossyASCIIString"];
+ return [[noteArrayController arrangedObjects] valueForKey:@"contents"];
} else if ([typeSelectHelper isEqual:[outlineView typeSelectHelper]]) {
int i, count = [outlineView numberOfRows];
NSMutableArray *array = [NSMutableArray arrayWithCapacity:count];
Modified: trunk/SKNotesDocument.m
===================================================================
--- trunk/SKNotesDocument.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKNotesDocument.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -332,7 +332,7 @@
#pragma mark SKTypeSelectHelper datasource protocol
- (NSArray *)typeSelectHelperSelectionItems:(SKTypeSelectHelper
*)typeSelectHelper {
- return [[arrayController arrangedObjects]
valueForKeyPath:@"contents.lossyASCIIString"];
+ return [[arrayController arrangedObjects] valueForKey:@"contents"];
}
- (unsigned int)typeSelectHelperCurrentlySelectedIndex:(SKTypeSelectHelper
*)typeSelectHelper {
Modified: trunk/SKOutlineView.m
===================================================================
--- trunk/SKOutlineView.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKOutlineView.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -91,9 +91,9 @@
unichar eventChar = [characters length] > 0 ? [characters
characterAtIndex:0] : 0;
unsigned modifierFlags = [theEvent modifierFlags] &
NSDeviceIndependentModifierFlagsMask;
- if ([typeSelectHelper isTypeSelectCharacter:eventChar] && typeSelectHelper
&& modifierFlags == 0)
- [typeSelectHelper processKeyDownCharacter:eventChar];
- else if ([typeSelectHelper isRepeatCharacter:eventChar] && modifierFlags
== 0)
+ if ([typeSelectHelper isTypeSelectEvent:theEvent])
+ [typeSelectHelper processKeyDownEvent:theEvent];
+ else if ([typeSelectHelper isRepeatEvent:theEvent])
[typeSelectHelper repeatSearch];
else if (eventChar == NSHomeFunctionKey && (modifierFlags &
~NSFunctionKeyMask) == 0)
[self scrollToBeginningOfDocument:nil];
@@ -103,6 +103,13 @@
[super keyDown:theEvent];
}
+- (BOOL)resignFirstResponder {
+ BOOL shouldResign = [super resignFirstResponder];
+ if (shouldResign)
+ [typeSelectHelper stopSearch];
+ return shouldResign;
+}
+
- (void)scrollToBeginningOfDocument:(id)sender {
if ([self numberOfRows])
[self scrollRowToVisible:0];
Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKPDFView.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -952,9 +952,9 @@
[self setAnnotationMode:SKStrikeOutNote];
} else if ([self toolMode] == SKNoteToolMode && modifiers == 0 &&
eventChar == 'l') {
[self setAnnotationMode:SKLineNote];
- } else if ([typeSelectHelper isTypeSelectCharacter:eventChar] &&
modifiers == 0) {
- [typeSelectHelper processKeyDownCharacter:eventChar];
- } else if ([typeSelectHelper isRepeatCharacter:eventChar] && modifiers
== 0) {
+ } else if ([typeSelectHelper isTypeSelectEvent:theEvent]) {
+ [typeSelectHelper processKeyDownEvent:theEvent];
+ } else if ([typeSelectHelper isRepeatEvent:theEvent]) {
[typeSelectHelper repeatSearch];
} else {
[super keyDown:theEvent];
@@ -1441,6 +1441,13 @@
[[NSSpellChecker sharedSpellChecker] ignoreWord:[[sender selectedCell]
stringValue] inSpellDocumentWithTag:spellingTag];
}
+- (BOOL)resignFirstResponder {
+ BOOL shouldResign = [super resignFirstResponder];
+ if (shouldResign)
+ [typeSelectHelper stopSearch];
+ return shouldResign;
+}
+
#pragma mark Tracking mousemoved fix
- (void)setFrame:(NSRect)frame {
Modified: trunk/SKTableView.m
===================================================================
--- trunk/SKTableView.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKTableView.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -69,9 +69,9 @@
unichar eventChar = [characters length] > 0 ? [characters
characterAtIndex:0] : 0;
unsigned modifierFlags = [theEvent modifierFlags] &
NSDeviceIndependentModifierFlagsMask;
- if ([typeSelectHelper isTypeSelectCharacter:eventChar] && typeSelectHelper
&& modifierFlags == 0)
- [typeSelectHelper processKeyDownCharacter:eventChar];
- else if ([typeSelectHelper isRepeatCharacter:eventChar] && modifierFlags
== 0)
+ if ([typeSelectHelper isTypeSelectEvent:theEvent])
+ [typeSelectHelper processKeyDownEvent:theEvent];
+ else if ([typeSelectHelper isRepeatEvent:theEvent])
[typeSelectHelper repeatSearch];
else if ((eventChar == NSDeleteCharacter || eventChar ==
NSDeleteFunctionKey) && modifierFlags == 0 && [self canDelete])
[self delete:self];
@@ -83,6 +83,13 @@
[super keyDown:theEvent];
}
+- (BOOL)resignFirstResponder {
+ BOOL shouldResign = [super resignFirstResponder];
+ if (shouldResign)
+ [typeSelectHelper stopSearch];
+ return shouldResign;
+}
+
- (void)scrollToBeginningOfDocument:(id)sender {
if ([self numberOfRows])
[self scrollRowToVisible:0];
Modified: trunk/SKTypeSelectHelper.h
===================================================================
--- trunk/SKTypeSelectHelper.h 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKTypeSelectHelper.h 2007-09-05 13:52:22 UTC (rev 2834)
@@ -52,7 +52,7 @@
BOOL matchesImmediately;
NSArray *searchCache;
- NSMutableString *searchString;
+ NSString *searchString;
NSTimer *timer;
BOOL processing;
}
@@ -68,16 +68,20 @@
- (int)matchOption;
- (void)setMatchOption:(int)newValue;
+
+- (NSString *)searchString;
+- (void)setSearchString:(NSString *)newSearchString;
-- (void)rebuildTypeSelectSearchCache;
-
- (BOOL)isProcessing;
-- (void)processKeyDownCharacter:(unichar)character;
+- (void)rebuildTypeSelectSearchCache;
+
+- (void)processKeyDownEvent:(NSEvent *)keyEvent;
- (void)repeatSearch;
+- (void)stopSearch;
-- (BOOL)isTypeSelectCharacter:(unichar)character;
-- (BOOL)isRepeatCharacter:(unichar)character;
+- (BOOL)isTypeSelectEvent:(NSEvent *)keyEvent;
+- (BOOL)isRepeatEvent:(NSEvent *)keyEvent;
@end
Modified: trunk/SKTypeSelectHelper.m
===================================================================
--- trunk/SKTypeSelectHelper.m 2007-09-05 12:51:37 UTC (rev 2833)
+++ trunk/SKTypeSelectHelper.m 2007-09-05 13:52:22 UTC (rev 2834)
@@ -115,6 +115,17 @@
matchOption = newValue;
}
+- (NSString *)searchString {
+ return searchString;
+}
+
+- (void)setSearchString:(NSString *)newSearchString {
+ if (searchString != newSearchString) {
+ [searchString release];
+ searchString = [newSearchString retain];
+ }
+}
+
- (BOOL)isProcessing {
return processing;
}
@@ -128,12 +139,15 @@
searchCache = [[dataSource typeSelectHelperSelectionItems:self] retain];
}
-- (void)processKeyDownCharacter:(unichar)character {
+- (void)processKeyDownEvent:(NSEvent *)keyEvent {
+ NSText *fieldEditor = [[NSApp keyWindow] fieldEditor:YES forObject:self];
+
if (processing == NO)
- [searchString setString:@""];
+ [fieldEditor setString:@""];
// Append the new character to the search string
- [searchString appendFormat:@"%C", character];
+ [fieldEditor interpretKeyEvents:[NSArray arrayWithObject:keyEvent]];
+ [self setSearchString:[fieldEditor string]];
if ([dataSource
respondsToSelector:@selector(typeSelectHelper:updateSearchString:)])
[dataSource typeSelectHelper:self updateSearchString:searchString];
@@ -158,18 +172,45 @@
processing = NO;
}
-- (BOOL)isTypeSelectCharacter:(unichar)character {
- if ([[NSCharacterSet alphanumericCharacterSet]
characterIsMember:character])
- return YES;
- if ([self isProcessing] && [[NSCharacterSet controlCharacterSet]
characterIsMember:character] == NO)
- return YES;
- return NO;
+- (void)stopSearch {
+ if (timer)
+ [self typeSelectCleanTimeout:timer];
}
-- (BOOL)isRepeatCharacter:(unichar)character {
- return [self cyclesSimilarResults] && character == REPEAT_CHARACTER;
+- (BOOL)isTypeSelectEvent:(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;
+
+ if (count == 0)
+ return NO;
+
+ 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 YES;
}
+- (BOOL)isRepeatEvent:(NSEvent *)keyEvent {
+ if ([keyEvent type] != NSKeyDown)
+ return NO;
+
+ NSString *characters = [keyEvent charactersIgnoringModifiers];
+ unichar character = [characters length] > 0 ? [characters
characterAtIndex:0] : 0;
+ unsigned modifierFlags = [keyEvent modifierFlags] &
NSDeviceIndependentModifierFlagsMask;
+
+ return modifierFlags == 0 && character == REPEAT_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