Revision: 3158 http://skim-app.svn.sourceforge.net/skim-app/?rev=3158&view=rev Author: hofman Date: 2007-11-05 15:34:09 -0800 (Mon, 05 Nov 2007)
Log Message: ----------- Add a table for find results grouped by page displaying relevance as number of results. Modified Paths: -------------- trunk/Dutch.lproj/MainWindow.nib/classes.nib trunk/Dutch.lproj/MainWindow.nib/data.dependency trunk/Dutch.lproj/MainWindow.nib/info.nib trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib trunk/English.lproj/MainWindow.nib/classes.nib trunk/English.lproj/MainWindow.nib/info.nib trunk/English.lproj/MainWindow.nib/keyedobjects.nib trunk/French.lproj/MainWindow.nib/classes.nib trunk/French.lproj/MainWindow.nib/info.nib trunk/French.lproj/MainWindow.nib/keyedobjects.nib trunk/Italian.lproj/MainWindow.nib/classes.nib trunk/Italian.lproj/MainWindow.nib/info.nib trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib trunk/NSImage_SKExtensions.m trunk/SKMainWindowController.h trunk/SKMainWindowController.m trunk/Spanish.lproj/MainWindow.nib/classes.nib trunk/Spanish.lproj/MainWindow.nib/info.nib trunk/Spanish.lproj/MainWindow.nib/keyedobjects.nib Modified: trunk/Dutch.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -49,6 +49,7 @@ changeColor = id; changeColorFill = id; changeDisplayBox = id; + changeFindPaneState = id; changeFont = id; changeLeftSidePaneState = id; changeRightSidePaneState = id; @@ -119,8 +120,12 @@ currentRightSideView = NSView; displayBoxPopUpButton = NSPopUpButton; findArrayController = NSArrayController; + findButton = NSSegmentedControl; findTableView = NSTableView; findView = NSView; + groupedFindArrayController = NSArrayController; + groupedFindTableView = NSTableView; + groupedFindView = NSView; leftSideButton = NSSegmentedControl; leftSideCollapsibleView = BDSKCollapsibleView; leftSideContentView = NSView; Modified: trunk/Dutch.lproj/MainWindow.nib/data.dependency =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-11-05 23:34:09 UTC (rev 3158) @@ -5,7 +5,6 @@ <key>IBPaletteDependency</key> <array> <string>PDFKit</string> - <string>Controllers</string> </array> </dict> </plist> Modified: trunk/Dutch.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -3,7 +3,7 @@ <plist version="1.0"> <dict> <key>IBDocumentLocation</key> - <string>68 81 564 369 0 0 1440 938 </string> + <string>92 75 564 369 0 0 1440 938 </string> <key>IBEditorPositions</key> <dict> <key>168</key> @@ -22,11 +22,20 @@ <string>610 420 220 442 0 0 1440 938 </string> <key>694</key> <string>610 420 220 442 0 0 1440 938 </string> + <key>796</key> + <string>642 252 220 442 0 0 1440 938 </string> + <key>813</key> + <string>642 592 115 102 0 0 1440 938 </string> </dict> <key>IBFramework Version</key> <string>446.1</string> <key>IBLockedObjects</key> <array/> + <key>IBOpenObjects</key> + <array> + <integer>796</integer> + <integer>813</integer> + </array> <key>IBSystem Version</key> <string>8R218</string> </dict> Modified: trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/English.lproj/MainWindow.nib/classes.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/English.lproj/MainWindow.nib/classes.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -49,6 +49,7 @@ changeColor = id; changeColorFill = id; changeDisplayBox = id; + changeFindPaneState = id; changeFont = id; changeLeftSidePaneState = id; changeRightSidePaneState = id; @@ -119,8 +120,12 @@ currentRightSideView = NSView; displayBoxPopUpButton = NSPopUpButton; findArrayController = NSArrayController; + findButton = NSSegmentedControl; findTableView = NSTableView; findView = NSView; + groupedFindArrayController = NSArrayController; + groupedFindTableView = NSTableView; + groupedFindView = NSView; leftSideButton = NSSegmentedControl; leftSideCollapsibleView = BDSKCollapsibleView; leftSideContentView = NSView; Modified: trunk/English.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/English.lproj/MainWindow.nib/info.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/English.lproj/MainWindow.nib/info.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>592 461 255 329 0 0 1440 938 </string> + <string>592 476 255 329 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -22,6 +22,10 @@ <string>610 420 220 442 0 0 1440 938 </string> <key>694</key> <string>610 420 220 442 0 0 1440 938 </string> + <key>796</key> + <string>610 420 220 442 0 0 1440 938 </string> + <key>830</key> + <string>662 590 115 102 0 0 1440 938 </string> </dict> <key>IBFramework Version</key> <string>446.1</string> @@ -29,15 +33,17 @@ <array/> <key>IBOpenObjects</key> <array> + <integer>694</integer> + <integer>796</integer> + <integer>314</integer> + <integer>256</integer> <integer>511</integer> - <integer>694</integer> + <integer>830</integer> <integer>502</integer> <integer>224</integer> + <integer>5</integer> <integer>168</integer> - <integer>5</integer> - <integer>256</integer> <integer>687</integer> - <integer>314</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/English.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/French.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/French.lproj/MainWindow.nib/classes.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/French.lproj/MainWindow.nib/classes.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -49,6 +49,7 @@ changeColor = id; changeColorFill = id; changeDisplayBox = id; + changeFindPaneState = id; changeFont = id; changeLeftSidePaneState = id; changeRightSidePaneState = id; @@ -119,8 +120,12 @@ currentRightSideView = NSView; displayBoxPopUpButton = NSPopUpButton; findArrayController = NSArrayController; + findButton = NSSegmentedControl; findTableView = NSTableView; findView = NSView; + groupedFindArrayController = NSArrayController; + groupedFindTableView = NSTableView; + groupedFindView = NSView; leftSideButton = NSSegmentedControl; leftSideCollapsibleView = BDSKCollapsibleView; leftSideContentView = NSView; Modified: trunk/French.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/French.lproj/MainWindow.nib/info.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/French.lproj/MainWindow.nib/info.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>592 462 255 329 0 0 1440 938 </string> + <string>592 476 255 329 0 0 1440 938 </string> <key>224</key> <string>690 581 220 442 0 0 1600 1178 </string> <key>256</key> @@ -22,6 +22,10 @@ <string>690 581 220 442 0 0 1600 1178 </string> <key>694</key> <string>690 581 220 442 0 0 1600 1178 </string> + <key>789</key> + <string>642 252 220 442 0 0 1440 938 </string> + <key>791</key> + <string>642 592 115 102 0 0 1440 938 </string> </dict> <key>IBFramework Version</key> <string>446.1</string> @@ -29,11 +33,13 @@ <array/> <key>IBOpenObjects</key> <array> - <integer>256</integer> + <integer>168</integer> + <integer>789</integer> + <integer>791</integer> <integer>314</integer> - <integer>168</integer> + <integer>502</integer> <integer>5</integer> - <integer>502</integer> + <integer>256</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/French.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -49,6 +49,7 @@ changeColor = id; changeColorFill = id; changeDisplayBox = id; + changeFindPaneState = id; changeFont = id; changeLeftSidePaneState = id; changeRightSidePaneState = id; @@ -119,8 +120,12 @@ currentRightSideView = NSView; displayBoxPopUpButton = NSPopUpButton; findArrayController = NSArrayController; + findButton = NSSegmentedControl; findTableView = NSTableView; findView = NSView; + groupedFindArrayController = NSArrayController; + groupedFindTableView = NSTableView; + groupedFindView = NSView; leftSideButton = NSSegmentedControl; leftSideCollapsibleView = BDSKCollapsibleView; leftSideContentView = NSView; Modified: trunk/Italian.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Italian.lproj/MainWindow.nib/info.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Italian.lproj/MainWindow.nib/info.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>592 461 255 331 0 0 1440 938 </string> + <string>592 475 255 331 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -22,6 +22,10 @@ <string>610 420 220 442 0 0 1440 938 </string> <key>677</key> <string>610 420 220 442 0 0 1440 938 </string> + <key>773</key> + <string>642 252 220 442 0 0 1440 938 </string> + <key>791</key> + <string>642 592 115 102 0 0 1440 938 </string> </dict> <key>IBFramework Version</key> <string>446.1</string> @@ -29,15 +33,17 @@ <array/> <key>IBOpenObjects</key> <array> - <integer>511</integer> - <integer>168</integer> + <integer>791</integer> <integer>224</integer> + <integer>5</integer> <integer>314</integer> - <integer>502</integer> - <integer>5</integer> + <integer>168</integer> + <integer>256</integer> <integer>677</integer> - <integer>256</integer> + <integer>773</integer> <integer>676</integer> + <integer>502</integer> + <integer>511</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/NSImage_SKExtensions.m =================================================================== --- trunk/NSImage_SKExtensions.m 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/NSImage_SKExtensions.m 2007-11-05 23:34:09 UTC (rev 3158) @@ -79,6 +79,8 @@ static NSImage *thumbnailViewAdornImage = nil; static NSImage *noteViewAdornImage = nil; static NSImage *snapshotViewAdornImage = nil; + static NSImage *findViewAdornImage = nil; + static NSImage *groupedFindViewAdornImage = nil; static NSImage *textToolAdornImage = nil; static NSImage *moveToolAdornImage = nil; static NSImage *magnifyToolAdornImage = nil; @@ -279,6 +281,40 @@ [snapshotViewAdornImage unlockFocus]; [snapshotViewAdornImage setName:@"SnapshotViewAdorn"]; + findViewAdornImage = [[NSImage alloc] initWithSize:size]; + [findViewAdornImage lockFocus]; + [shadow set]; + [color setStroke]; + path = [NSBezierPath bezierPath]; + [path moveToPoint:NSMakePoint(8.0, 2.5)]; + [path lineToPoint:NSMakePoint(19.0, 2.5)]; + [path moveToPoint:NSMakePoint(8.0, 5.5)]; + [path lineToPoint:NSMakePoint(19.0, 5.5)]; + [path moveToPoint:NSMakePoint(8.0, 8.5)]; + [path lineToPoint:NSMakePoint(19.0, 8.5)]; + [path moveToPoint:NSMakePoint(8.0, 11.5)]; + [path lineToPoint:NSMakePoint(19.0, 11.5)]; + [path stroke]; + [findViewAdornImage unlockFocus]; + [findViewAdornImage setName:@"FindViewAdorn"]; + + groupedFindViewAdornImage = [[NSImage alloc] initWithSize:size]; + [groupedFindViewAdornImage lockFocus]; + [shadow set]; + [color setStroke]; + path = [NSBezierPath bezierPath]; + [path moveToPoint:NSMakePoint(8.0, 2.5)]; + [path lineToPoint:NSMakePoint(12.0, 2.5)]; + [path moveToPoint:NSMakePoint(8.0, 5.5)]; + [path lineToPoint:NSMakePoint(15.0, 5.5)]; + [path moveToPoint:NSMakePoint(8.0, 8.5)]; + [path lineToPoint:NSMakePoint(17.0, 8.5)]; + [path moveToPoint:NSMakePoint(8.0, 11.5)]; + [path lineToPoint:NSMakePoint(19.0, 11.5)]; + [path stroke]; + [groupedFindViewAdornImage unlockFocus]; + [groupedFindViewAdornImage setName:@"GroupedFindViewAdorn"]; + textToolAdornImage = [[NSImage alloc] initWithSize:size]; [textToolAdornImage lockFocus]; [shadow set]; Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/SKMainWindowController.h 2007-11-05 23:34:09 UTC (rev 3158) @@ -48,6 +48,11 @@ SKSnapshotSidePaneState } SKRightSidePaneState; +typedef enum _SKFindPaneState { + SKSingularFindPaneState, + SKGroupedFindPaneState +} SKFindPaneState; + enum { SKDefaultWindowOption, SKMaximizeWindowOption, @@ -124,6 +129,13 @@ CFMutableSetRef temporaryAnnotations; NSTimer *temporaryAnnotationTimer; + IBOutlet NSArrayController *groupedFindArrayController; + IBOutlet NSTableView *groupedFindTableView; + IBOutlet NSView *groupedFindView; + NSMutableArray *groupedSearchResults; + IBOutlet NSSegmentedControl *findButton; + SKFindPaneState findPaneState; + IBOutlet NSArrayController *noteArrayController; IBOutlet SKNoteOutlineView *noteOutlineView; IBOutlet NSView *noteView; @@ -254,6 +266,7 @@ - (IBAction)toggleRightSidePane:(id)sender; - (IBAction)changeLeftSidePaneState:(id)sender; - (IBAction)changeRightSidePaneState:(id)sender; +- (IBAction)changeFindPaneState:(id)sender; - (IBAction)toggleStatusBar:(id)sender; - (IBAction)searchPDF:(id)sender; - (IBAction)enterFullScreen:(id)sender; @@ -311,6 +324,8 @@ - (void)setLeftSidePaneState:(SKLeftSidePaneState)newLeftSidePaneState; - (SKRightSidePaneState)rightSidePaneState; - (void)setRightSidePaneState:(SKRightSidePaneState)newRightSidePaneState; +- (SKFindPaneState)findPaneState; +- (void)setFindPaneState:(SKFindPaneState)newFindPaneState; - (BOOL)leftSidePaneIsOpen; - (BOOL)rightSidePaneIsOpen; @@ -321,6 +336,8 @@ - (void)fadeInThumbnailView; - (void)displaySearchView; - (void)fadeInSearchView; +- (void)displayGroupedSearchView; +- (void)fadeInGroupedSearchView; - (void)displayNoteView; - (void)displaySnapshotView; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/SKMainWindowController.m 2007-11-05 23:34:09 UTC (rev 3158) @@ -176,7 +176,7 @@ - (void)goToSelectedOutlineItem; -- (void)goToFindResults:(NSArray *)findResults; +- (void)updateFindResultHighlights:(BOOL)scroll; - (void)showHoverWindowForDestination:(PDFDestination *)dest; @@ -223,6 +223,7 @@ [self setShouldCloseDocument:YES]; isPresentation = NO; searchResults = [[NSMutableArray alloc] init]; + groupedSearchResults = [[NSMutableArray alloc] init]; thumbnails = [[NSMutableArray alloc] init]; notes = [[NSMutableArray alloc] init]; snapshots = [[NSMutableArray alloc] init]; @@ -252,6 +253,7 @@ [(id)temporaryAnnotations release]; [dirtySnapshots release]; [searchResults release]; + [groupedSearchResults release]; [pdfOutline release]; [thumbnails release]; [notes release]; @@ -417,6 +419,10 @@ [snapshotArrayController setSortDescriptors:[NSArray arrayWithObjects:pageIndexSortDescriptor, nil]]; [ownerController setContent:self]; + NSSortDescriptor *scoreSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"score" ascending:NO] autorelease]; + [groupedFindArrayController setSortDescriptors:[NSArray arrayWithObjects:scoreSortDescriptor, nil]]; + [[[groupedFindTableView tableColumnWithIdentifier:@"relevance"] dataCell] setEnabled:NO]; + // NB: the next line will load the PDF document and annotations, so necessary setup must be finished first! // windowControllerDidLoadNib: is not called automatically because the document overrides makeWindowControllers [[self document] windowControllerDidLoadNib:self]; @@ -918,6 +924,7 @@ // these will be invalid. If needed, the document will restore them [[self mutableArrayValueForKey:@"searchResults"] removeAllObjects]; + [[self mutableArrayValueForKey:@"groupedSearchResults"] removeAllObjects]; [[self mutableArrayValueForKey:@"notes"] removeAllObjects]; [[self mutableArrayValueForKey:@"thumbnails"] removeAllObjects]; @@ -1100,6 +1107,25 @@ } } +- (SKFindPaneState)findPaneState { + return findPaneState; +} + +- (void)setFindPaneState:(SKFindPaneState)newFindPaneState { + if (findPaneState != newFindPaneState) { + findPaneState = newFindPaneState; + + if (findPaneState == SKSingularFindPaneState) { + if ([groupedFindView window]) + [self displaySearchView]; + } else if (findPaneState == SKGroupedFindPaneState) { + if ([findView window]) + [self displayGroupedSearchView]; + } + [self updateFindResultHighlights:YES]; + } +} + - (BOOL)leftSidePaneIsOpen { int state; if ([self isFullScreen]) @@ -2015,6 +2041,10 @@ [self setRightSidePaneState:[sender tag]]; } +- (IBAction)changeFindPaneState:(id)sender { + [self setFindPaneState:[sender tag]]; +} + - (void)scrollSecondaryPdfView { NSPoint point = [pdfView bounds].origin; PDFPage *page = [pdfView pageForPoint:point nearest:YES]; @@ -2445,11 +2475,25 @@ - (void)replaceSideView:(NSView *)oldView withView:(NSView *)newView animate:(BOOL)animate { if ([newView window] == nil) { - BOOL wasFirstResponder = [[[oldView window] firstResponder] isDescendantOf:oldView]; + BOOL wasFirstResponder; - if ([oldView isEqual:tocView] || [oldView isEqual:findView]) + if ([oldView isEqual:tocView] || [oldView isEqual:findView] || [oldView isEqual:groupedFindView]) [[SKPDFHoverWindow sharedHoverWindow] orderOut:self]; + if ((oldView == findView || oldView == groupedFindView) && (newView != findView && newView != groupedFindView)) { + NSView *view = [leftSideButton superview]; + wasFirstResponder = [[[findButton window] firstResponder] isEqual:findButton]; + [leftSideButton setFrame:[findButton frame]]; + [findButton retain]; + [[findButton superview] replaceSubview:findButton with:leftSideButton]; + [view addSubview:findButton]; + [findButton release]; + if (wasFirstResponder) + [[leftSideButton window] makeFirstResponder:leftSideButton]; + } + + wasFirstResponder = [[[oldView window] firstResponder] isDescendantOf:oldView]; + [newView setFrame:[oldView frame]]; [newView setHidden:animate]; [[oldView superview] addSubview:newView]; @@ -2476,6 +2520,18 @@ [oldView removeFromSuperview]; [oldView setHidden:NO]; [[newView window] recalculateKeyViewLoop]; + + if ((oldView != findView && oldView != groupedFindView) && (newView == findView || newView == groupedFindView)) { + NSView *view = [findButton superview]; + wasFirstResponder = [[[leftSideButton window] firstResponder] isEqual:leftSideButton]; + [findButton setFrame:[leftSideButton frame]]; + [leftSideButton retain]; + [[leftSideButton superview] replaceSubview:leftSideButton with:findButton]; + [view addSubview:leftSideButton]; + [leftSideButton release]; + if (wasFirstResponder) + [[findButton window] makeFirstResponder:findButton]; + } } } @@ -2513,6 +2569,16 @@ currentLeftSideView = findView; } +- (void)displayGroupedSearchView { + [self replaceSideView:currentLeftSideView withView:groupedFindView animate:NO]; + currentLeftSideView = groupedFindView; +} + +- (void)fadeInGroupedSearchView { + [self replaceSideView:currentLeftSideView withView:groupedFindView animate:YES]; + currentLeftSideView = groupedFindView; +} + - (void)displayNoteView { [self replaceSideView:currentRightSideView withView:noteView animate:NO]; currentRightSideView = noteView; @@ -2528,9 +2594,13 @@ - (void)documentDidBeginDocumentFind:(NSNotification *)note { if (findPanelFind == NO) { + NSString *message = [NSLocalizedString(@"Searching", @"Message in search table header") stringByAppendingEllipsis]; [findArrayController removeObjects:searchResults]; - [[[findTableView tableColumnWithIdentifier:@"results"] headerCell] setStringValue:[NSLocalizedString(@"Searching", @"Message in search table header") stringByAppendingEllipsis]]; + [[[findTableView tableColumnWithIdentifier:@"results"] headerCell] setStringValue:message]; [[findTableView headerView] setNeedsDisplay:YES]; + [[[groupedFindTableView tableColumnWithIdentifier:@"relevance"] headerCell] setStringValue:message]; + [[groupedFindTableView headerView] setNeedsDisplay:YES]; + [groupedFindArrayController removeObjects:groupedSearchResults]; [statusBar setProgressIndicatorStyle:SKProgressIndicatorBarStyle]; [[statusBar progressIndicator] setMaxValue:[[note object] pageCount]]; [[statusBar progressIndicator] setDoubleValue:0.0]; @@ -2540,10 +2610,15 @@ - (void)documentDidEndDocumentFind:(NSNotification *)note { if (findPanelFind == NO) { + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"%i Results", @"Message in search table header"), [searchResults count]]; [self willChangeValueForKey:@"searchResults"]; [self didChangeValueForKey:@"searchResults"]; - [[[findTableView tableColumnWithIdentifier:@"results"] headerCell] setStringValue:[NSString stringWithFormat:NSLocalizedString(@"%i Results", @"Message in search table header"), [searchResults count]]]; + [self willChangeValueForKey:@"groupedSearchResults"]; + [self didChangeValueForKey:@"groupedSearchResults"]; + [[[findTableView tableColumnWithIdentifier:@"results"] headerCell] setStringValue:message]; [[findTableView headerView] setNeedsDisplay:YES]; + [[[groupedFindTableView tableColumnWithIdentifier:@"relevance"] headerCell] setStringValue:message]; + [[groupedFindTableView headerView] setNeedsDisplay:YES]; [statusBar stopAnimation:self]; [statusBar setProgressIndicatorStyle:SKProgressIndicatorNone]; } @@ -2556,9 +2631,32 @@ - (void)didMatchString:(PDFSelection *)instance { if (findPanelFind == NO) { [searchResults addObject:instance]; + + PDFPage *page = [[instance pages] objectAtIndex:0]; + NSMutableDictionary *dict = [groupedSearchResults lastObject]; + if ([[dict valueForKey:@"pageIndex"] unsignedIntValue] != [page pageIndex]) { + dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithUnsignedInt:[page pageIndex]], @"pageIndex", + [page label], @"pageLabel", + [NSMutableArray array], @"results", nil]; + [groupedSearchResults addObject:dict]; + } + [[dict valueForKey:@"results"] addObject:instance]; + + unsigned int max = 0; + NSEnumerator *dictEnum = [groupedSearchResults objectEnumerator]; + while (dict = [dictEnum nextObject]) + max = MAX(max, [[dict valueForKey:@"results"] count]); + + dictEnum = [groupedSearchResults objectEnumerator]; + while (dict = [dictEnum nextObject]) + [dict setValue:[NSNumber numberWithFloat:(float)[[dict valueForKey:@"results"] count] / max] forKey:@"score"]; + if ([searchResults count] % 50 == 0) { [self willChangeValueForKey:@"searchResults"]; [self didChangeValueForKey:@"searchResults"]; + [self willChangeValueForKey:@"groupedSearchResults"]; + [self didChangeValueForKey:@"groupedSearchResults"]; } } } @@ -2650,7 +2748,10 @@ [self fadeInOutlineView]; } else { [[pdfView document] beginFindString:[sender stringValue] withOptions:NSCaseInsensitiveSearch]; - [self fadeInSearchView]; + if (findPaneState == SKSingularFindPaneState) + [self fadeInSearchView]; + else + [self fadeInGroupedSearchView]; NSPasteboard *findPboard = [NSPasteboard pasteboardWithName:NSFindPboard]; [findPboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; @@ -2679,6 +2780,7 @@ [pdfView setCurrentSelection:selection]; [pdfView scrollSelectionToVisible:self]; [findTableView deselectAll:self]; + [groupedFindTableView deselectAll:self]; if ([[NSUserDefaults standardUserDefaults] boolForKey:SKShouldHighlightSearchResultsKey]) { [self removeTemporaryAnnotations]; [self addAnnotationsForSelection:selection]; @@ -2689,9 +2791,15 @@ } } -- (void)goToFindResults:(NSArray *)findResults { +- (void)updateFindResultHighlights:(BOOL)scroll { BOOL highlight = [[NSUserDefaults standardUserDefaults] boolForKey:SKShouldHighlightSearchResultsKey]; + NSArray *findResults = nil; + if (findPaneState == SKSingularFindPaneState && [findView window]) + findResults = [findArrayController selectedObjects]; + else if (findPaneState == SKGroupedFindPaneState && [groupedFindView window]) + findResults = [[groupedFindArrayController selectedObjects] valueForKeyPath:@"@unionOfArrays.results"]; + // union all selected objects NSEnumerator *selE = [findResults objectEnumerator]; PDFSelection *sel; @@ -2700,8 +2808,10 @@ PDFSelection *currentSel = [[[selE nextObject] copy] autorelease]; [pdfView setCurrentSelection:currentSel]; - [pdfView scrollSelectionToVisible:self]; + if (scroll && [findResults count]) + [pdfView scrollSelectionToVisible:self]; + [self removeTemporaryAnnotations]; // add an annotation so it's easier to see the search result @@ -2713,6 +2823,8 @@ if (highlight) [self addAnnotationsForSelection:sel]; } + + [pdfView setCurrentSelection:currentSel]; } - (IBAction)searchNotes:(id)sender { @@ -3240,28 +3352,15 @@ } } else if ([key isEqualToString:SKSearchHighlightColorKey]) { if ([[NSUserDefaults standardUserDefaults] boolForKey:SKShouldHighlightSearchResultsKey] && - [[searchField stringValue] length] && [findTableView numberOfSelectedRows]) { + [[searchField stringValue] length] && + (([findView window] && [findTableView numberOfSelectedRows]) || ([groupedFindView window] && [groupedFindTableView numberOfSelectedRows]))) { // clear the selection - [self removeTemporaryAnnotations]; - - NSEnumerator *selE = [[findArrayController selectedObjects] objectEnumerator]; - PDFSelection *sel; - - while (sel = [selE nextObject]) - [self addAnnotationsForSelection:sel]; + [self updateFindResultHighlights:NO]; } } else if ([key isEqualToString:SKShouldHighlightSearchResultsKey]) { - if ([[searchField stringValue] length] && [findTableView numberOfSelectedRows]) { + if ([[searchField stringValue] length] && ([findTableView numberOfSelectedRows] || [groupedFindTableView numberOfSelectedRows])) { // clear the selection - [self removeTemporaryAnnotations]; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:SKShouldHighlightSearchResultsKey]) { - NSEnumerator *selE = [[findArrayController selectedObjects] objectEnumerator]; - PDFSelection *sel; - - while (sel = [selE nextObject]) - [self addAnnotationsForSelection:sel]; - } + [self updateFindResultHighlights:NO]; } } else if ([key isEqualToString:SKThumbnailSizeKey]) { [self resetThumbnailSizeIfNeeded]; @@ -3278,9 +3377,8 @@ [outlineView setFont:font]; [noteOutlineView setFont:font]; [findTableView setFont:font]; + [groupedFindTableView setFont:font]; [self updatePageColumnWidthForTableView:outlineView]; - [self updatePageColumnWidthForTableView:noteOutlineView]; - [self updatePageColumnWidthForTableView:findTableView]; } } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; @@ -3709,10 +3807,15 @@ - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { if ([[aNotification object] isEqual:findTableView]) { - [self goToFindResults:[findArrayController selectedObjects]]; + [self updateFindResultHighlights:YES]; if ([self isPresentation] && [[NSUserDefaults standardUserDefaults] boolForKey:SKAutoHidePresentationContentsKey]) [self hideLeftSideWindow]; + } else if ([[aNotification object] isEqual:groupedFindTableView]) { + [self updateFindResultHighlights:YES]; + + if ([self isPresentation] && [[NSUserDefaults standardUserDefaults] boolForKey:SKAutoHidePresentationContentsKey]) + [self hideLeftSideWindow]; } else if ([[aNotification object] isEqual:thumbnailTableView]) { if (updatingThumbnailSelection == NO) { int row = [thumbnailTableView selectedRow]; @@ -3821,6 +3924,8 @@ - (BOOL)tableView:(NSTableView *)tv shouldTrackTableColumn:(NSTableColumn *)aTableColumn row:(int)row { if ([tv isEqual:findTableView]) { return YES; + } else if ([tv isEqual:groupedFindTableView]) { + return YES; } return NO; } @@ -3829,12 +3934,17 @@ if ([tv isEqual:findTableView]) { PDFDestination *dest = [[[findArrayController arrangedObjects] objectAtIndex:row] destination]; [self showHoverWindowForDestination:dest]; + } else if ([tv isEqual:groupedFindTableView]) { + PDFDestination *dest = [[[[[groupedFindArrayController arrangedObjects] objectAtIndex:row] valueForKey:@"results"] objectAtIndex:0] destination]; + [self showHoverWindowForDestination:dest]; } } - (void)tableView:(NSTableView *)tv mouseExitedTableColumn:(NSTableColumn *)aTableColumn row:(int)row { if ([tv isEqual:findTableView]) { [[SKPDFHoverWindow sharedHoverWindow] hide]; + } else if ([tv isEqual:groupedFindTableView]) { + [[SKPDFHoverWindow sharedHoverWindow] hide]; } } @@ -5007,7 +5117,7 @@ [menuItem setTitle:NSLocalizedString(@"Show Notes Pane", @"Menu item title")]; return [self isPresentation] == NO; } else if (action == @selector(changeLeftSidePaneState:)) { - [menuItem setState:(int)leftSidePaneState == [menuItem tag] ? ([findTableView window] ? NSMixedState : NSOnState) : NSOffState]; + [menuItem setState:(int)leftSidePaneState == [menuItem tag] ? (([findTableView window] || [groupedFindTableView window]) ? NSMixedState : NSOnState) : NSOffState]; return [menuItem tag] == SKThumbnailSidePaneState || pdfOutline; } else if (action == @selector(changeRightSidePaneState:)) { [menuItem setState:(int)rightSidePaneState == [menuItem tag] ? NSOnState : NSOffState]; Modified: trunk/Spanish.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Spanish.lproj/MainWindow.nib/classes.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Spanish.lproj/MainWindow.nib/classes.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -49,6 +49,7 @@ changeColor = id; changeColorFill = id; changeDisplayBox = id; + changeFindPaneState = id; changeFont = id; changeLeftSidePaneState = id; changeRightSidePaneState = id; @@ -119,8 +120,12 @@ currentRightSideView = NSView; displayBoxPopUpButton = NSPopUpButton; findArrayController = NSArrayController; + findButton = NSSegmentedControl; findTableView = NSTableView; findView = NSView; + groupedFindArrayController = NSArrayController; + groupedFindTableView = NSTableView; + groupedFindView = NSView; leftSideButton = NSSegmentedControl; leftSideCollapsibleView = BDSKCollapsibleView; leftSideContentView = NSView; Modified: trunk/Spanish.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Spanish.lproj/MainWindow.nib/info.nib 2007-11-05 16:30:20 UTC (rev 3157) +++ trunk/Spanish.lproj/MainWindow.nib/info.nib 2007-11-05 23:34:09 UTC (rev 3158) @@ -3,11 +3,11 @@ <plist version="1.0"> <dict> <key>IBDocumentLocation</key> - <string>68 81 564 369 0 0 1440 938 </string> + <string>102 81 564 369 0 0 1440 938 </string> <key>IBEditorPositions</key> <dict> <key>168</key> - <string>592 462 255 329 0 0 1440 938 </string> + <string>592 476 255 329 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> @@ -22,6 +22,10 @@ <string>610 420 220 442 0 0 1440 938 </string> <key>694</key> <string>610 420 220 442 0 0 1440 938 </string> + <key>794</key> + <string>642 252 220 442 0 0 1440 938 </string> + <key>811</key> + <string>642 592 115 102 0 0 1440 938 </string> </dict> <key>IBFramework Version</key> <string>446.1</string> @@ -29,12 +33,14 @@ <array/> <key>IBOpenObjects</key> <array> + <integer>511</integer> + <integer>224</integer> + <integer>5</integer> + <integer>502</integer> + <integer>794</integer> + <integer>811</integer> <integer>687</integer> - <integer>502</integer> - <integer>224</integer> - <integer>511</integer> <integer>168</integer> - <integer>5</integer> </array> <key>IBSystem Version</key> <string>8R218</string> Modified: trunk/Spanish.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) 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