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
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to