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

Reply via email to