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