Revision: 3520
          http://skim-app.svn.sourceforge.net/skim-app/?rev=3520&view=rev
Author:   hofman
Date:     2008-03-20 11:50:58 -0700 (Thu, 20 Mar 2008)

Log Message:
-----------
Store row heights for note table in a custom dictionary rather than in an ivar 
in the notes.

Modified Paths:
--------------
    trunk/SKMainWindowController.h
    trunk/SKMainWindowController.m
    trunk/SKNoteOutlineView.h
    trunk/SKPDFAnnotationNote.h
    trunk/SKPDFAnnotationNote.m
    trunk/Skim.xcodeproj/project.pbxproj

Added Paths:
-----------
    trunk/SKCFDictionaryCallBacks.h
    trunk/SKCFDictionaryCallBacks.m

Added: trunk/SKCFDictionaryCallBacks.h
===================================================================
--- trunk/SKCFDictionaryCallBacks.h                             (rev 0)
+++ trunk/SKCFDictionaryCallBacks.h     2008-03-20 18:50:58 UTC (rev 3520)
@@ -0,0 +1,57 @@
+//
+//  SKCFDictionaryCallBacks.h
+//  Skim
+//
+//  Created by Christiaan Hofman on 3/20/08.
+/*
+ This software is Copyright (c) 2008
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Carbon/Carbon.h>
+
+extern const void *SKNSObjectRetain(CFAllocatorRef allocator, const void 
*value);
+
+extern void SKNSObjectRelease(CFAllocatorRef allocator, const void *value);
+
+extern CFStringRef SKNSObjectCopyDescription(const void *value);
+
+extern const void *SKFloatRetain(CFAllocatorRef allocator, const void *value);
+
+extern void SKFloatRelease(CFAllocatorRef allocator, const void *value);
+
+extern CFStringRef SKFloatCopyDescription(const void *value);
+
+extern Boolean SKFloatEqual(const void *value1, const void *value2);
+
+extern const CFDictionaryKeyCallBacks 
SKPointerEqualObjectDictionaryKeyCallbacks;
+
+extern const CFDictionaryValueCallBacks SKFloatDictionaryValueCallbacks;

Added: trunk/SKCFDictionaryCallBacks.m
===================================================================
--- trunk/SKCFDictionaryCallBacks.m                             (rev 0)
+++ trunk/SKCFDictionaryCallBacks.m     2008-03-20 18:50:58 UTC (rev 3520)
@@ -0,0 +1,87 @@
+//
+//  SKCFDictionaryCallBacks.m
+//  Skim
+//
+//  Created by Christiaan Hofman on 3/20/08.
+/*
+ This software is Copyright (c) 2008
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SKCFDictionaryCallBacks.h"
+
+
+const void *SKNSObjectRetain(CFAllocatorRef allocator, const void *value) {
+    return [(id)value retain];
+}
+
+void SKNSObjectRelease(CFAllocatorRef allocator, const void *value) {
+    [(id)value release];
+}
+
+CFStringRef SKNSObjectCopyDescription(const void *value) {
+    return (CFStringRef)[[(id)value description] retain];
+}
+
+const void *SKFloatRetain(CFAllocatorRef allocator, const void *value) {
+    float *floatPtr = (float *)CFAllocatorAllocate(allocator, sizeof(float), 
0);
+    *floatPtr = *(float *)value;
+    return floatPtr;
+}
+
+void SKFloatRelease(CFAllocatorRef allocator, const void *value) {
+    CFAllocatorDeallocate(allocator, (float *)value);
+}
+
+CFStringRef SKFloatCopyDescription(const void *value) {
+    return CFStringCreateWithFormat(NULL, NULL, CFSTR("%f"), *(float *)value);
+}
+
+Boolean        SKFloatEqual(const void *value1, const void *value2) {
+    return fabsf(*(float *)value1 - *(float *)value2) < 0.00000001;
+}
+
+const CFDictionaryKeyCallBacks SKPointerEqualObjectDictionaryKeyCallbacks = {
+    0,   // version
+    SKNSObjectRetain,
+    SKNSObjectRelease,
+    SKNSObjectCopyDescription,
+    NULL, // equal
+    NULL // hash
+};
+
+const CFDictionaryValueCallBacks SKFloatDictionaryValueCallbacks = {
+    0, // version
+    SKFloatRetain,
+    SKFloatRelease,
+    SKFloatCopyDescription,
+    SKFloatEqual
+};

Modified: trunk/SKMainWindowController.h
===================================================================
--- trunk/SKMainWindowController.h      2008-03-20 17:35:14 UTC (rev 3519)
+++ trunk/SKMainWindowController.h      2008-03-20 18:50:58 UTC (rev 3520)
@@ -142,6 +142,7 @@
     IBOutlet SKNoteOutlineView  *noteOutlineView;
     IBOutlet NSView             *noteView;
     NSMutableArray              *notes;
+    CFMutableDictionaryRef      rowHeights;
     BOOL                        updatingNoteSelection;
     
     IBOutlet NSArrayController  *snapshotArrayController;

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2008-03-20 17:35:14 UTC (rev 3519)
+++ trunk/SKMainWindowController.m      2008-03-20 18:50:58 UTC (rev 3520)
@@ -83,6 +83,7 @@
 #import "SKSheetController.h"
 #import "OBUtilities.h"
 #import "SKApplicationController.h"
+#import "SKCFDictionaryCallbacks.h"
 
 #define WINDOW_X_DELTA              0.0
 #define WINDOW_Y_DELTA              70.0
@@ -284,6 +285,7 @@
         lastViewedPages = [[NSMutableArray alloc] init];
         // @@ remove or set to nil for Leopard?
         pdfOutlineItems = [[NSMutableArray alloc] init];
+        rowHeights = CFDictionaryCreateMutable(NULL, 0, 
&SKPointerEqualObjectDictionaryKeyCallbacks, &SKFloatDictionaryValueCallbacks);
         savedNormalSetup = [[NSMutableDictionary alloc] init];
         leftSidePaneState = SKThumbnailSidePaneState;
         rightSidePaneState = SKNoteSidePaneState;
@@ -314,6 +316,7 @@
        [notes release];
        [snapshots release];
     [pageLabels release];
+       CFRelease(rowHeights);
     [lastViewedPages release];
        [leftSideWindow release];
        [rightSideWindow release];
@@ -1218,6 +1221,10 @@
         }
     }
     
+    if ([[note texts] count])
+        CFDictionaryRemoveValue(rowHeights, (const void *)[[note texts] 
lastObject]);
+    CFDictionaryRemoveValue(rowHeights, (const void *)note);
+    
     [notes removeObjectAtIndex:theIndex];
 }
 
@@ -3831,9 +3838,10 @@
 - (float)outlineView:(NSOutlineView *)ov heightOfRowByItem:(id)item {
     float rowHeight = 0.0;
     if ([ov isEqual:noteOutlineView]) {
-        // the item is an opaque wrapper object used for binding. The actual 
note is is given by -observedeObject. I don't know of any alternative (read 
public) way to get the actual item
-        if ([item respondsToSelector:@selector(rowHeight)])
-            rowHeight = [item rowHeight];
+        if (CFDictionaryContainsKey(rowHeights, (const void *)item))
+            rowHeight = *(float *)CFDictionaryGetValue(rowHeights, (const void 
*)item);
+        else if ([item type] == nil)
+            rowHeight = 85.0;
         return rowHeight > 0.0 ? rowHeight : [ov rowHeight] + 2.0;
     }
     return rowHeight > 0.0 ? rowHeight : [ov rowHeight];
@@ -3841,16 +3849,13 @@
 
 - (BOOL)outlineView:(NSOutlineView *)ov canResizeRowByItem:(id)item {
     if ([ov isEqual:noteOutlineView]) {
-        if ([item respondsToSelector:@selector(setRowHeight:)] == NO)
-            return NO;
-        else
-            return YES;
+        return YES;
     }
     return NO;
 }
 
-- (void)outlineView:(NSOutlineView *)ov setHeightOfRow:(int)newHeight 
byItem:(id)item {
-    [item setRowHeight:newHeight];
+- (void)outlineView:(NSOutlineView *)ov setHeightOfRow:(float)newHeight 
byItem:(id)item {
+    CFDictionarySetValue(rowHeights, (const void *)item, &newHeight);
 }
 
 - (NSArray *)noteItems:(NSArray *)items {
@@ -3998,7 +4003,8 @@
         [cell setObjectValue:[item string]];
         NSAttributedString *attrString = [cell attributedStringValue];
         NSRect rect = [attrString boundingRectWithSize:[item type] ? size : 
smallSize options:NSStringDrawingUsesLineFragmentOrigin];
-        [item setRowHeight:fmaxf(NSHeight(rect) + 3.0, rowHeight + 2.0)];
+        float height = fmaxf(NSHeight(rect) + 3.0, rowHeight + 2.0);
+        CFDictionarySetValue(rowHeights, (const void *)item, &height);
         row = [noteOutlineView rowForItem:item];
         if (row != -1)
             [rowIndexes addIndex:row];

Modified: trunk/SKNoteOutlineView.h
===================================================================
--- trunk/SKNoteOutlineView.h   2008-03-20 17:35:14 UTC (rev 3519)
+++ trunk/SKNoteOutlineView.h   2008-03-20 18:50:58 UTC (rev 3520)
@@ -59,7 +59,7 @@
 
 @interface NSObject (SKNoteOutlineViewDelegate)
 - (BOOL)outlineView:(NSOutlineView *)anOutlineView canResizeRowByItem:(id)item;
-- (void)outlineView:(NSOutlineView *)anOutlineView 
setHeightOfRow:(int)newHeight byItem:(id)item;
+- (void)outlineView:(NSOutlineView *)anOutlineView 
setHeightOfRow:(float)newHeight byItem:(id)item;
 - (void)outlineViewNoteTypesDidChange:(NSOutlineView *)anOutlineView;
 - (void)outlineViewCommandKeyPressedDuringNavigation:(NSOutlineView 
*)anOutlineView;
 @end

Modified: trunk/SKPDFAnnotationNote.h
===================================================================
--- trunk/SKPDFAnnotationNote.h 2008-03-20 17:35:14 UTC (rev 3519)
+++ trunk/SKPDFAnnotationNote.h 2008-03-20 18:50:58 UTC (rev 3520)
@@ -106,25 +106,19 @@
 
 #pragma mark -
 
[EMAIL PROTECTED] SKPDFAnnotationCircle : PDFAnnotationCircle {
-    float rowHeight;
-}
[EMAIL PROTECTED] SKPDFAnnotationCircle : PDFAnnotationCircle
 @end
 
 #pragma mark -
 
[EMAIL PROTECTED] SKPDFAnnotationSquare : PDFAnnotationSquare {
-    float rowHeight;
-}
[EMAIL PROTECTED] SKPDFAnnotationSquare : PDFAnnotationSquare
 @end
 
 #pragma mark -
 
[EMAIL PROTECTED] SKPDFAnnotationMarkup : PDFAnnotationMarkup
-{
[EMAIL PROTECTED] SKPDFAnnotationMarkup : PDFAnnotationMarkup {
     NSRect *lineRects;
     unsigned numberOfLines;
-    float rowHeight;
 }
 
 - (id)initWithSelection:(PDFSelection *)selection markupType:(int)type;
@@ -134,9 +128,7 @@
 
 #pragma mark -
 
[EMAIL PROTECTED] SKPDFAnnotationFreeText : PDFAnnotationFreeText {
-    float rowHeight;
-}
[EMAIL PROTECTED] SKPDFAnnotationFreeText : PDFAnnotationFreeText
 
 - (void)setFontName:(NSString *)fontName;
 - (void)setFontSize:(float)pointSize;
@@ -159,7 +151,6 @@
     NSTextStorage *textStorage;
     NSAttributedString *text;
     NSArray *texts;
-    float rowHeight;
 }
 
 - (void)setImage:(NSImage *)newImage;
@@ -172,9 +163,8 @@
 
 #pragma mark -
 
[EMAIL PROTECTED] SKPDFAnnotationLine : PDFAnnotationLine {
-    float rowHeight;
-}
[EMAIL PROTECTED] SKPDFAnnotationLine : PDFAnnotationLine
+
 - (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData;
 - (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData;
 - (void)setAsStartLineStyle:(int)style;
@@ -191,7 +181,6 @@
 
 @interface SKNoteText : NSObject {
     PDFAnnotation *annotation;
-    float rowHeight;
 }
 
 - (id)initWithAnnotation:(PDFAnnotation *)anAnnotation;
@@ -205,9 +194,6 @@
 - (unsigned int)pageIndex;
 - (NSAttributedString *)string;
 
-- (float)rowHeight;
-- (void)setRowHeight:(float)newRowHeight;
-
 - (void)handleAnnotationDidChangeNotification:(NSNotification *)notification;
 
 @end

Modified: trunk/SKPDFAnnotationNote.m
===================================================================
--- trunk/SKPDFAnnotationNote.m 2008-03-20 17:35:14 UTC (rev 3519)
+++ trunk/SKPDFAnnotationNote.m 2008-03-20 18:50:58 UTC (rev 3520)
@@ -691,7 +691,6 @@
         [[self border] setLineWidth:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKCircleNoteLineWidthKey]];
         [[self border] setDashPattern:[[NSUserDefaults standardUserDefaults] 
arrayForKey:SKCircleNoteDashPatternKey]];
         [[self border] setStyle:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKCircleNoteLineStyleKey]];
-        rowHeight = 0.0;
     }
     return self;
 }
@@ -734,14 +733,6 @@
             object:self userInfo:[NSDictionary 
dictionaryWithObjectsAndKeys:@"interiorColor", @"key", nil]];
 }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 #pragma mark Scripting support
 
 - (NSDictionary *)scriptingProperties {
@@ -786,7 +777,6 @@
         [[self border] setLineWidth:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKSquareNoteLineWidthKey]];
         [[self border] setDashPattern:[[NSUserDefaults standardUserDefaults] 
arrayForKey:SKSquareNoteDashPatternKey]];
         [[self border] setStyle:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKSquareNoteLineStyleKey]];
-        rowHeight = 0.0;
     }
     return self;
 }
@@ -829,14 +819,6 @@
             object:self userInfo:[NSDictionary 
dictionaryWithObjectsAndKeys:@"interiorColor", @"key", nil]];
 }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 #pragma mark Scripting support
 
 - (NSDictionary *)scriptingProperties {
@@ -943,8 +925,6 @@
         [quadPoints release];
         numberOfLines = 0;
         lineRects = NULL;
-        
-        rowHeight = 0.0;
     }
     return self;
 }
@@ -1159,14 +1139,6 @@
     }
 }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 #pragma mark Scripting support
 
 - (NSDictionary *)scriptingProperties {
@@ -1221,7 +1193,6 @@
         [border setStyle:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKFreeTextNoteLineStyleKey]];
         originalSetBorder(self, @selector(setBorder:), [border lineWidth] > 
0.0 ? border : nil);
         [border release];
-        rowHeight = 0.0;
     }
     return self;
 }
@@ -1268,14 +1239,6 @@
             object:self userInfo:[NSDictionary 
dictionaryWithObjectsAndKeys:@"font", @"key", nil]];
 }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 #pragma mark Scripting support
 
 - (NSDictionary *)scriptingProperties {
@@ -1348,7 +1311,6 @@
         textStorage = [[NSTextStorage allocWithZone:[self zone]] init];
         [textStorage setDelegate:self];
         text = [[NSAttributedString alloc] init];
-        rowHeight = 0.0;
     }
     return self;
 }
@@ -1509,14 +1471,6 @@
             object:self userInfo:[NSDictionary 
dictionaryWithObjectsAndKeys:@"text", @"key", nil]];
 }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 // override these Leopard methods to avoid showing the standard tool tips over 
our own
 - (NSString *)toolTip { return nil; }
 - (NSString *)toolTipNoLabel { return nil; }
@@ -1603,7 +1557,6 @@
         [border setStyle:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKLineNoteLineStyleKey]];
         originalSetBorder(self, @selector(setBorder:), [border lineWidth] > 
0.0 ? border : nil);
         [border release];
-        rowHeight = 0.0;
     }
     return self;
 }
@@ -1750,14 +1703,6 @@
     }
 }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 #pragma mark Scripting support
 
 - (NSDictionary *)scriptingProperties {
@@ -1899,7 +1844,6 @@
 - (id)initWithAnnotation:(PDFAnnotation *)anAnnotation {
     if (self = [super init]) {
         annotation = anAnnotation;
-        rowHeight = 85.0;
         [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(handleAnnotationDidChangeNotification:) 
                                                      
name:SKAnnotationDidChangeNotification object:annotation];
     }
@@ -1925,14 +1869,6 @@
 
 - (NSAttributedString *)string { return [annotation text]; }
 
-- (float)rowHeight {
-    return rowHeight;
-}
-
-- (void)setRowHeight:(float)newRowHeight {
-    rowHeight = newRowHeight;
-}
-
 - (void)handleAnnotationDidChangeNotification:(NSNotification *)notification {
     if ([[[notification userInfo] objectForKey:@"key"] 
isEqualToString:@"text"]) {
         [self willChangeValueForKey:@"string"];

Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj        2008-03-20 17:35:14 UTC (rev 
3519)
+++ trunk/Skim.xcodeproj/project.pbxproj        2008-03-20 18:50:58 UTC (rev 
3520)
@@ -119,6 +119,7 @@
                CE5F71560C8CDF9A008BE480 /* NSCell_SKExtensions.m in Sources */ 
= {isa = PBXBuildFile; fileRef = CE5F71540C8CDF9A008BE480 /* 
NSCell_SKExtensions.m */; };
                CE5FA1680C909886008BE480 /* SKFDFParser.m in Sources */ = {isa 
= PBXBuildFile; fileRef = CE5FA1660C909886008BE480 /* SKFDFParser.m */; };
                CE64E81A0D92BB97000AD050 /* ToolbarFontsBlack.tiff in Resources 
*/ = {isa = PBXBuildFile; fileRef = CE64E8190D92BB97000AD050 /* 
ToolbarFontsBlack.tiff */; };
+               CE64E8A30D92E670000AD050 /* SKCFDictionaryCallBacks.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE64E8A20D92E670000AD050 /* 
SKCFDictionaryCallBacks.m */; };
                CE67BB260BC44AC9007B6929 /* ZoomValues.strings in Resources */ 
= {isa = PBXBuildFile; fileRef = CE67BB240BC44AC9007B6929 /* ZoomValues.strings 
*/; };
                CE6A5B9E0D663491003B7CC3 /* ToolbarCustomize.tiff in Resources 
*/ = {isa = PBXBuildFile; fileRef = CE6A5B9D0D663491003B7CC3 /* 
ToolbarCustomize.tiff */; };
                CE6A5BB20D663771003B7CC3 /* ToolbarPrint.tiff in Resources */ = 
{isa = PBXBuildFile; fileRef = CE6A5BB10D663771003B7CC3 /* ToolbarPrint.tiff 
*/; };
@@ -579,6 +580,8 @@
                CE5FA1650C909886008BE480 /* SKFDFParser.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SKFDFParser.h; sourceTree = "<group>"; };
                CE5FA1660C909886008BE480 /* SKFDFParser.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SKFDFParser.m; sourceTree = "<group>"; };
                CE64E8190D92BB97000AD050 /* ToolbarFontsBlack.tiff */ = {isa = 
PBXFileReference; lastKnownFileType = image.tiff; name = 
ToolbarFontsBlack.tiff; path = Images/ToolbarFontsBlack.tiff; sourceTree = 
"<group>"; };
+               CE64E8A10D92E670000AD050 /* SKCFDictionaryCallBacks.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= SKCFDictionaryCallBacks.h; sourceTree = "<group>"; };
+               CE64E8A20D92E670000AD050 /* SKCFDictionaryCallBacks.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
path = SKCFDictionaryCallBacks.m; sourceTree = "<group>"; };
                CE67BB250BC44AC9007B6929 /* English */ = {isa = 
PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; 
name = English; path = English.lproj/ZoomValues.strings; sourceTree = 
"<group>"; };
                CE67BB290BC44AD5007B6929 /* Dutch */ = {isa = PBXFileReference; 
fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Dutch; path = 
Dutch.lproj/ZoomValues.strings; sourceTree = "<group>"; };
                CE68C62F0CEF891B00B082F1 /* German */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.nib; name = German; path = 
German.lproj/InfoWindow.nib; sourceTree = "<group>"; };
@@ -1012,6 +1015,8 @@
                CE070EC10B89063400733CC8 /* Categories */ = {
                        isa = PBXGroup;
                        children = (
+                               CE64E8A10D92E670000AD050 /* 
SKCFDictionaryCallBacks.h */,
+                               CE64E8A20D92E670000AD050 /* 
SKCFDictionaryCallBacks.m */,
                                CE4EC8810B7E6E920091F228 /* 
CIImage_BDSKExtensions.h */,
                                CE4EC8820B7E6E920091F228 /* 
CIImage_BDSKExtensions.m */,
                                CEBF85DF0CCE2DE70057A050 /* 
NSAffineTransform_SKExtensions.h */,
@@ -1876,6 +1881,7 @@
                                CE6DC77B0D687272003A072F /* 
SKPrintAccessoryViewController.m in Sources */,
                                CE6DC7BB0D689138003A072F /* 
PDFDocument_SKExtensions.m in Sources */,
                                CEA8FCD60D89C34A00E8A6F4 /* 
SKAnimatedBorderlessWindow.m in Sources */,
+                               CE64E8A30D92E670000AD050 /* 
SKCFDictionaryCallBacks.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };


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: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to