Revision: 4609
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4609&view=rev
Author:   hofman
Date:     2008-09-11 10:03:42 +0000 (Thu, 11 Sep 2008)

Log Message:
-----------
Always wrap outline items in our custom objects, so we have a consistent class 
to deal with in the rest of the code. This also allows some extra convenience 
accessors, so we don't need to check for selectors in the datasource code.

Modified Paths:
--------------
    trunk/SKMainWindowController.h
    trunk/SKMainWindowController.m
    trunk/SKMainWindowController_UI.m
    trunk/SKPDFOutline.h
    trunk/SKPDFOutline.m

Modified: trunk/SKMainWindowController.h
===================================================================
--- trunk/SKMainWindowController.h      2008-09-11 00:30:01 UTC (rev 4608)
+++ trunk/SKMainWindowController.h      2008-09-11 10:03:42 UTC (rev 4609)
@@ -83,7 +83,7 @@
 
 extern NSString *SKMainWindowPageColumnIdentifer;
 
[EMAIL PROTECTED] PDFAnnotation, PDFOutline, PDFSelection, SKThumbnail, 
SKGroupedSearchResult;
[EMAIL PROTECTED] PDFAnnotation, SKPDFOutline, PDFSelection, SKThumbnail, 
SKGroupedSearchResult;
 @class SKPDFView, SKSecondaryPDFView, SKTocOutlineView, SKNoteOutlineView, 
SKThumbnailTableView, SKSnapshotTableView, SKSplitView, BDSKCollapsibleView, 
BDSKEdgeView, BDSKGradientView, SKColorSwatch, SKStatusBar;
 @class SKFullScreenWindow, SKNavigationWindow, SKSideWindow, 
SKSnapshotWindowController, SKProgressController, SKPageSheetController, 
SKScaleSheetController, SKPasswordSheetController, SKBookmarkSheetController;
 
@@ -123,7 +123,7 @@
     
     IBOutlet SKTocOutlineView   *outlineView;
     IBOutlet NSView             *tocView;
-    id                          pdfOutline;
+    SKPDFOutline                *pdfOutline;
     BOOL                        updatingOutlineSelection;
     
     IBOutlet NSObjectController *ownerController;

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2008-09-11 00:30:01 UTC (rev 4608)
+++ trunk/SKMainWindowController.m      2008-09-11 10:03:42 UTC (rev 4609)
@@ -670,10 +670,7 @@
     
     // update the outline
     [pdfOutline release];
-    if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_4)
-        pdfOutline = [[pdfDoc outlineRoot] retain];
-    else
-        pdfOutline = [[SKPDFOutline alloc] initWithOutline:[pdfDoc 
outlineRoot] parent:nil];
+    pdfOutline = [[SKPDFOutline alloc] initWithOutline:[pdfDoc outlineRoot] 
parent:nil];
     
     updatingOutlineSelection = YES;
     // If this is a reload following a TeX run and the user just killed the 
outline for some reason, we get a crash if the outlineView isn't reloaded, so 
no longer make it conditional on pdfOutline != nil
@@ -3492,11 +3489,14 @@
        int i, numRows = [outlineView numberOfRows];
        for (i = 0; i < numRows; i++) {
                // Get the destination of the given row....
-               PDFOutline *outlineItem = (PDFOutline *)[outlineView itemAtRow: 
i];
+               SKPDFOutline *outlineItem = [outlineView itemAtRow:i];
+        PDFPage *page = [outlineItem page];
                
-               if ([[[outlineItem destination] page ] pageIndex] == pageIndex) 
{
+        if (page == nil) {
+            continue;
+               } else if ([page pageIndex] == pageIndex) {
             break;
-        } else if ([[[outlineItem destination] page] pageIndex] > pageIndex) {
+        } else if ([page pageIndex] > pageIndex) {
                        if (i > 0) --i;
             break;     
                }

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2008-09-11 00:30:01 UTC (rev 4608)
+++ trunk/SKMainWindowController_UI.m   2008-09-11 10:03:42 UTC (rev 4609)
@@ -63,6 +63,7 @@
 #import "SKApplication.h"
 #import "NSMenu_SKExtensions.h"
 #import "SKLineInspector.h"
+#import "SKPDFOutline.h"
 
 static NSString *SKMainWindowLabelColumnIdentifer = @"label";
 static NSString *SKMainWindowNoteColumnIdentifer = @"note";
@@ -516,7 +517,7 @@
     if ([ov isEqual:outlineView]) {
         if (item == nil && [[pdfView document] isLocked] == NO)
             item = pdfOutline;
-        return [(PDFOutline *)item numberOfChildren];
+        return [(SKPDFOutline *)item numberOfChildren];
     } else if ([ov isEqual:noteOutlineView]) {
         if (item == nil)
             return [[noteArrayController arrangedObjects] count];
@@ -530,7 +531,7 @@
     if ([ov isEqual:outlineView]) {
         if (item == nil && [[pdfView document] isLocked] == NO)
             item = pdfOutline;
-        id obj = [(PDFOutline *)item childAtIndex:anIndex];
+        id obj = [(SKPDFOutline *)item childAtIndex:anIndex];
         return obj;
     } else if ([ov isEqual:noteOutlineView]) {
         if (item == nil)
@@ -545,7 +546,7 @@
     if ([ov isEqual:outlineView]) {
         if (item == nil && [[pdfView document] isLocked] == NO)
             item = pdfOutline;
-        return ([(PDFOutline *)item numberOfChildren] > 0);
+        return ([(SKPDFOutline *)item numberOfChildren] > 0);
     } else if ([ov isEqual:noteOutlineView]) {
         return [[item texts] count] > 0;
     }
@@ -555,10 +556,11 @@
 - (id)outlineView:(NSOutlineView *)ov objectValueForTableColumn:(NSTableColumn 
*)tableColumn byItem:(id)item{
     if ([ov isEqual:outlineView]) {
         NSString *tcID = [tableColumn identifier];
-        if([tcID isEqualToString:SKMainWindowLabelColumnIdentifer])
-            return [(PDFOutline *)item label];
-        else if([tcID isEqualToString:SKMainWindowPageColumnIdentifer])
-            return [[[(PDFOutline *)item destination] page] displayLabel];
+        if([tcID isEqualToString:SKMainWindowLabelColumnIdentifer]) {
+            return [(SKPDFOutline *)item label];
+        } else if([tcID isEqualToString:SKMainWindowPageColumnIdentifer]) {
+            return [[(SKPDFOutline *)item page] displayLabel];
+        }
     } else if ([ov isEqual:noteOutlineView]) {
         NSString *tcID = [tableColumn  identifier];
         if ([tcID isEqualToString:SKMainWindowNoteColumnIdentifer])
@@ -637,13 +639,12 @@
 - (void)outlineViewSelectionDidChange:(NSNotification *)notification{
        // Get the destination associated with the search result list. Tell the 
PDFView to go there.
        if ([[notification object] isEqual:outlineView] && 
(updatingOutlineSelection == NO)){
-        id outlineItem = [outlineView itemAtRow: [outlineView selectedRow]];
-        PDFDestination *dest = [(PDFOutline *)outlineItem destination];
+        SKPDFOutline *outlineItem = [outlineView itemAtRow: [outlineView 
selectedRow]];
         updatingOutlineSelection = YES;
-        if (dest)
-            [self goToDestination:dest];
-        else if ([outlineItem respondsToSelector:@selector(action)] && 
[(PDFOutline *)outlineItem action])
-            [pdfView performAction:[(PDFOutline *)outlineItem action]];
+        if ([outlineItem destination])
+            [self goToDestination:[outlineItem destination]];
+        else if ([outlineItem action])
+            [pdfView performAction:[outlineItem action]];
         updatingOutlineSelection = NO;
         if ([self isPresentation] && [[NSUserDefaults standardUserDefaults] 
boolForKey:SKAutoHidePresentationContentsKey])
             [self hideLeftSideWindow];
@@ -961,7 +962,7 @@
         int i, count = [outlineView numberOfRows];
         NSMutableArray *array = [NSMutableArray arrayWithCapacity:count];
         for (i = 0; i < count; i++) 
-            [array addObject:[[(PDFOutline *)[outlineView itemAtRow:i] label] 
lossyASCIIString]];
+            [array addObject:[[(SKPDFOutline *)[outlineView itemAtRow:i] 
label] lossyASCIIString]];
         return array;
     }
     return nil;

Modified: trunk/SKPDFOutline.h
===================================================================
--- trunk/SKPDFOutline.h        2008-09-11 00:30:01 UTC (rev 4608)
+++ trunk/SKPDFOutline.h        2008-09-11 10:03:42 UTC (rev 4609)
@@ -55,10 +55,14 @@
 - (unsigned int)numberOfChildren;
 - (SKPDFOutline *)childAtIndex:(unsigned int)anIndex;
 
+- (NSString *)label;
+
 - (PDFDestination *)destination;
 
-- (NSString *)label;
+- (PDFAction *)action;
 
+- (PDFPage *)page;
+
 - (BOOL)isOpen;
 
 @end

Modified: trunk/SKPDFOutline.m
===================================================================
--- trunk/SKPDFOutline.m        2008-09-11 00:30:01 UTC (rev 4608)
+++ trunk/SKPDFOutline.m        2008-09-11 10:03:42 UTC (rev 4609)
@@ -45,10 +45,10 @@
 
 - (id)initWithOutline:(PDFOutline *)anOutline parent:(SKPDFOutline *)aParent {
     if (self = [super init]) {
-        if (outline) {
+        if (anOutline) {
             outline = [anOutline retain];
             parent = aParent;
-            children = [[NSMutableArray alloc] init];
+            children = nil;
         } else {
             [self release];
             self = nil;
@@ -88,14 +88,30 @@
     return [children objectAtIndex:anIndex];
 }
 
+- (NSString *)label {
+    return [outline label];
+}
+
 - (PDFDestination *)destination {
     return [outline destination];
 }
 
-- (NSString *)label {
-    return [outline label];
+- (PDFAction *)action {
+    if ([outline respondsToSelector:_cmd])
+        return [outline action];
+    else
+        return nil;
 }
 
+- (PDFPage *)page {
+    if ([outline respondsToSelector:@selector(destination)])
+        return [[outline destination] page];
+    else if ([outline respondsToSelector:@selector(action)] && [[outline 
action] respondsToSelector:@selector(destination)])
+        return [[(PDFActionGoTo *)[outline action] destination] page];
+    else
+        return nil;
+}
+
 - (BOOL)isOpen {
     if ([outline respondsToSelector:_cmd])
         return [outline isOpen];


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 the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to