Revision: 2925
          http://skim-app.svn.sourceforge.net/skim-app/?rev=2925&view=rev
Author:   hofman
Date:     2007-09-15 05:52:53 -0700 (Sat, 15 Sep 2007)

Log Message:
-----------
Use toolbar for bookmarks window. Toggle status bar. Update localizations. Move 
bookmarks to a separate file.

Modified Paths:
--------------
    trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib
    trunk/Dutch.lproj/BookmarksWindow.nib/info.nib
    trunk/Dutch.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/Dutch.lproj/Localizable.strings
    trunk/Dutch.lproj/NotesDocument.nib/info.nib
    trunk/Dutch.lproj/NotesDocument.nib/keyedobjects.nib
    trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib
    trunk/English.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/French.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/French.lproj/Localizable.strings
    trunk/Italian.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/Italian.lproj/Localizable.strings
    trunk/NSImage_SKExtensions.h
    trunk/NSImage_SKExtensions.m
    trunk/SKApplicationController.m
    trunk/SKBookmarkController.h
    trunk/SKBookmarkController.m
    trunk/Skim.xcodeproj/project.pbxproj

Added Paths:
-----------
    trunk/Images/ToolbarNewFolder.tiff
    trunk/Images/ToolbarNewSeparator.tiff
    trunk/SKBookmark.h
    trunk/SKBookmark.m

Modified: trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib
===================================================================
--- trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib   2007-09-15 10:28:27 UTC 
(rev 2924)
+++ trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib   2007-09-15 12:52:53 UTC 
(rev 2925)
@@ -38,7 +38,8 @@
             OUTLETS = {leftCell = id; rightCell = id; }; 
             SUPERCLASS = NSControl; 
         }, 
-        {CLASS = SKTableView; LANGUAGE = ObjC; SUPERCLASS = NSTableView; }
+        {CLASS = SKTableView; LANGUAGE = ObjC; SUPERCLASS = NSTableView; }, 
+        {CLASS = SKTextWithIconCell; LANGUAGE = ObjC; SUPERCLASS = 
NSTextFieldCell; }
     ); 
     IBVersion = 1; 
 }
\ No newline at end of file

Modified: trunk/Dutch.lproj/BookmarksWindow.nib/info.nib
===================================================================
--- trunk/Dutch.lproj/BookmarksWindow.nib/info.nib      2007-09-15 10:28:27 UTC 
(rev 2924)
+++ trunk/Dutch.lproj/BookmarksWindow.nib/info.nib      2007-09-15 12:52:53 UTC 
(rev 2925)
@@ -6,10 +6,6 @@
        <string>69 58 356 240 0 0 1440 938 </string>
        <key>IBFramework Version</key>
        <string>446.1</string>
-       <key>IBOpenObjects</key>
-       <array>
-               <integer>5</integer>
-       </array>
        <key>IBSystem Version</key>
        <string>8R218</string>
 </dict>

Modified: trunk/Dutch.lproj/BookmarksWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)

Modified: trunk/Dutch.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/Dutch.lproj/NotesDocument.nib/info.nib
===================================================================
--- trunk/Dutch.lproj/NotesDocument.nib/info.nib        2007-09-15 10:28:27 UTC 
(rev 2924)
+++ trunk/Dutch.lproj/NotesDocument.nib/info.nib        2007-09-15 12:52:53 UTC 
(rev 2925)
@@ -6,10 +6,6 @@
        <string>69 58 356 240 0 0 1440 938 </string>
        <key>IBFramework Version</key>
        <string>446.1</string>
-       <key>IBOpenObjects</key>
-       <array>
-               <integer>5</integer>
-       </array>
        <key>IBSystem Version</key>
        <string>8R218</string>
 </dict>

Modified: trunk/Dutch.lproj/NotesDocument.nib/keyedobjects.nib
===================================================================
(Binary files differ)

Modified: trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)

Modified: trunk/English.lproj/BookmarksWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)

Modified: trunk/French.lproj/BookmarksWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)

Modified: trunk/French.lproj/Localizable.strings
===================================================================
(Binary files differ)

Added: trunk/Images/ToolbarNewFolder.tiff
===================================================================
(Binary files differ)


Property changes on: trunk/Images/ToolbarNewFolder.tiff
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/Images/ToolbarNewSeparator.tiff
===================================================================
(Binary files differ)


Property changes on: trunk/Images/ToolbarNewSeparator.tiff
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/Italian.lproj/BookmarksWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)

Modified: trunk/Italian.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/NSImage_SKExtensions.h
===================================================================
--- trunk/NSImage_SKExtensions.h        2007-09-15 10:28:27 UTC (rev 2924)
+++ trunk/NSImage_SKExtensions.h        2007-09-15 12:52:53 UTC (rev 2925)
@@ -41,4 +41,6 @@
 
 @interface NSImage (SKExtensions)
 + (void)makeAdornImages;
++ (NSImage *)iconWithSize:(NSSize)iconSize forToolboxCode:(OSType)code;
++ (NSImage *)imageWithIconForToolboxCode:(OSType)code;
 @end

Modified: trunk/NSImage_SKExtensions.m
===================================================================
--- trunk/NSImage_SKExtensions.m        2007-09-15 10:28:27 UTC (rev 2924)
+++ trunk/NSImage_SKExtensions.m        2007-09-15 12:52:53 UTC (rev 2925)
@@ -545,4 +545,30 @@
     [shadow release];
 }
 
++ (NSImage *)iconWithSize:(NSSize)iconSize forToolboxCode:(OSType) code {
+       IconRef iconref;
+       OSErr myErr = GetIconRef (kOnSystemDisk, kSystemIconsCreator, code, 
&iconref);
+       
+       NSImage *image = [[NSImage alloc] 
initWithSize:NSMakeSize(iconSize.width, iconSize.height)]; 
+       CGRect rect =  CGRectMake(0.0, 0.0, iconSize.width, iconSize.height);
+       
+       [image lockFocus]; 
+       PlotIconRefInContext((CGContextRef)[[NSGraphicsContext currentContext] 
graphicsPort],
+                         &rect,
+                                                kAlignAbsoluteCenter, 
//kAlignNone,
+                                                kTransformNone,
+                                                NULL /*inLabelColor*/,
+                                                kPlotIconRefNormalFlags,
+                                                iconref); 
+       [image unlockFocus]; 
+       
+       myErr = ReleaseIconRef(iconref);
+       
+       return [image autorelease];
+}
+
++ (NSImage *)imageWithIconForToolboxCode:(OSType) code {
+    return [self iconWithSize:NSMakeSize(32,32) forToolboxCode:code];
+}
+
 @end

Modified: trunk/SKApplicationController.m
===================================================================
--- trunk/SKApplicationController.m     2007-09-15 10:28:27 UTC (rev 2924)
+++ trunk/SKApplicationController.m     2007-09-15 12:52:53 UTC (rev 2925)
@@ -43,6 +43,7 @@
 #import "SKDocument.h"
 #import "SKMainWindowController.h"
 #import "SKBookmarkController.h"
+#import "SKBookmark.h"
 #import "BDAlias.h"
 #import "SKVersionNumber.h"
 #import "NSUserDefaultsController_SKExtensions.h"

Added: trunk/SKBookmark.h
===================================================================
--- trunk/SKBookmark.h                          (rev 0)
+++ trunk/SKBookmark.h  2007-09-15 12:52:53 UTC (rev 2925)
@@ -0,0 +1,90 @@
+//
+//  SKBookmark.h
+//  Skim
+//
+//  Created by Christiaan Hofman on 9/15/07.
+/*
+ This software is Copyright (c) 2007
+ 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 <Cocoa/Cocoa.h>
+
+extern NSString *SKBookmarkChangedNotification;
+extern NSString *SKBookmarkWillBeRemovedNotification;
+
+enum {
+    SKBookmarkTypeBookmark,
+    SKBookmarkTypeFolder,
+    SKBookmarkTypeSeparator
+};
+
[EMAIL PROTECTED] SKBookmark : NSObject <NSCopying> {
+    NSString *path;
+    NSData *aliasData;
+    NSString *label;
+    unsigned int pageIndex;
+    NSMutableArray *children;
+    SKBookmark *parent;
+    int bookmarkType;
+}
+
+- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel;
+- (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel;
+- (id)initFolderWithChildren:(NSArray *)aChildren label:(NSString *)aLabel;
+- (id)initFolderWithLabel:(NSString *)aLabel;
+- (id)initSeparator;
+- (id)initWithDictionary:(NSDictionary *)dictionary;
+
+- (NSDictionary *)dictionaryValue;
+
+- (int)bookmarkType;
+
+- (NSString *)path;
+- (NSData *)aliasData;
+- (NSString *)resolvedPath;
+- (NSImage *)icon;
+- (unsigned int)pageIndex;
+- (NSNumber *)pageNumber;
+- (NSString *)label;
+- (void)setLabel:(NSString *)newLabel;
+
+- (SKBookmark *)parent;
+- (void)setParent:(SKBookmark *)newParent;
+- (NSArray *)children;
+- (void)insertChild:(SKBookmark *)child atIndex:(unsigned int)index;
+- (void)addChild:(SKBookmark *)child;
+- (void)removeChild:(SKBookmark *)child;
+
+- (BOOL)isDescendantOf:(SKBookmark *)bookmark;
+- (BOOL)isDescendantOfArray:(NSArray *)bookmarks;
+
[EMAIL PROTECTED]

Added: trunk/SKBookmark.m
===================================================================
--- trunk/SKBookmark.m                          (rev 0)
+++ trunk/SKBookmark.m  2007-09-15 12:52:53 UTC (rev 2925)
@@ -0,0 +1,271 @@
+//
+//  SKBookmark.m
+//  Skim
+//
+//  Created by Christiaan Hofman on 9/15/07.
+/*
+ This software is Copyright (c) 2007
+ 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 "SKBookmark.h"
+#import "SKBookmarkController.h"
+#import "BDAlias.h"
+
+NSString *SKBookmarkChangedNotification = @"SKBookmarkChangedNotification";
+NSString *SKBookmarkWillBeRemovedNotification = 
@"SKBookmarkWillBeRemovedNotification";
+
[EMAIL PROTECTED] SKBookmark
+
++ (NSImage *)smallImageForFile:(NSString *)filePath {
+    static NSMutableDictionary *smallIcons = nil;
+    if (smallIcons == nil)
+        smallIcons = [[NSMutableDictionary alloc] init];
+    
+    NSString *extension = [filePath pathExtension];
+    NSImage *icon = [smallIcons objectForKey:extension];
+    
+    if (icon == nil) {
+        NSImage *image = [[NSWorkspace sharedWorkspace] 
iconForFileType:extension];
+        NSRect sourceRect = {NSZeroPoint, [image size]};
+        NSRect targetRect = NSMakeRect(0.0, 0.0, 16.0, 16.0);
+        icon = [[NSImage alloc] initWithSize:targetRect.size];
+        [icon lockFocus];
+        [[NSGraphicsContext currentContext] 
setImageInterpolation:NSImageInterpolationHigh];
+        [image drawInRect:targetRect fromRect:sourceRect 
operation:NSCompositeCopy fraction:1.0];
+        [icon unlockFocus];
+        [smallIcons setObject:icon forKey:extension];
+        [icon release];
+    }
+    return icon;
+}
+
+- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel {
+    if (self = [super init]) {
+        bookmarkType = SKBookmarkTypeBookmark;
+        path = [aPath copy];
+        aliasData = [aData copy];
+        pageIndex = aPageIndex;
+        label = [aLabel copy];
+        children = nil;
+    }
+    return self;
+}
+
+- (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel {
+    return [self initWithPath:aPath aliasData:[[BDAlias aliasWithPath:aPath] 
aliasData] pageIndex:aPageIndex label:aLabel];
+}
+
+- (id)initFolderWithChildren:(NSArray *)aChildren label:(NSString *)aLabel {
+    if (self = [super init]) {
+        bookmarkType = SKBookmarkTypeFolder;
+        path = nil;
+        aliasData = nil;
+        pageIndex = NSNotFound;
+        label = [aLabel copy];
+        children = [aChildren mutableCopy];
+        [children makeObjectsPerformSelector:@selector(setParent:) 
withObject:self];
+    }
+    return self;
+}
+
+- (id)initFolderWithLabel:(NSString *)aLabel {
+    return [self initFolderWithChildren:[NSArray array] label:aLabel];
+}
+
+- (id)initSeparator {
+    if (self = [super init]) {
+        bookmarkType = SKBookmarkTypeSeparator;
+        path = nil;
+        aliasData = nil;
+        pageIndex = NSNotFound;
+        label = nil;
+        children = nil;
+    }
+    return self;
+}
+
+- (id)initWithDictionary:(NSDictionary *)dictionary {
+    if ([[dictionary objectForKey:@"type"] isEqualToString:@"folder"]) {
+        NSEnumerator *dictEnum = [[dictionary objectForKey:@"children"] 
objectEnumerator];
+        NSDictionary *dict;
+        NSMutableArray *newChildren = [NSMutableArray array];
+        while (dict = [dictEnum nextObject])
+            [newChildren addObject:[[[[self class] alloc] 
initWithDictionary:dict] autorelease]];
+        return [self initFolderWithChildren:newChildren label:[dictionary 
objectForKey:@"label"]];
+    } else if ([[dictionary objectForKey:@"type"] 
isEqualToString:@"separator"]) {
+        return [self initSeparator];
+    } else {
+        return [self initWithPath:[dictionary objectForKey:@"path"] 
aliasData:[dictionary objectForKey:@"_BDAlias"] pageIndex:[[dictionary 
objectForKey:@"pageIndex"] unsignedIntValue] label:[dictionary 
objectForKey:@"label"]];
+    }
+}
+
+- (id)copyWithZone:(NSZone *)aZone {
+    if (bookmarkType == SKBookmarkTypeFolder)
+        return [[[self class] allocWithZone:aZone] 
initFolderWithChildren:[[[NSArray alloc] initWithArray:children copyItems:YES] 
autorelease] label:label];
+    else if (bookmarkType == SKBookmarkTypeSeparator)
+        return [[[self class] allocWithZone:aZone] initSeparator];
+    else
+        return [[[self class] allocWithZone:aZone] initWithPath:path 
aliasData:aliasData pageIndex:pageIndex label:label];
+}
+
+- (void)dealloc {
+    [[[SKBookmarkController sharedBookmarkController] undoManager] 
removeAllActionsWithTarget:self];
+    [path release];
+    [aliasData release];
+    [label release];
+    [children release];
+    [super dealloc];
+}
+
+- (NSString *)description {
+    if (bookmarkType == SKBookmarkTypeFolder)
+        return [NSString stringWithFormat:@"<%@: label=%@, children=%@>", 
[self class], label, children];
+    else if (bookmarkType == SKBookmarkTypeSeparator)
+        return [NSString stringWithFormat:@"<%@: separator>", [self class]];
+    else
+        return [NSString stringWithFormat:@"<%@: label=%@, path=%@, page=%i>", 
[self class], label, path, pageIndex];
+}
+
+- (NSDictionary *)dictionaryValue {
+    if (bookmarkType == SKBookmarkTypeFolder)
+        return [NSDictionary dictionaryWithObjectsAndKeys:@"folder", @"type", 
[children valueForKey:@"dictionaryValue"], @"children", label, @"label", nil];
+    else if (bookmarkType == SKBookmarkTypeSeparator)
+        return [NSDictionary dictionaryWithObjectsAndKeys:@"separator", 
@"type", nil];
+    else
+        return [NSDictionary dictionaryWithObjectsAndKeys:@"bookmark", 
@"type", path, @"path", aliasData, @"_BDAlias", [NSNumber 
numberWithUnsignedInt:pageIndex], @"pageIndex", label, @"label", nil];
+}
+
+- (int)bookmarkType {
+    return bookmarkType;
+}
+
+- (NSString *)path {
+    return [[path retain] autorelease];
+}
+
+- (NSData *)aliasData {
+    return aliasData;
+}
+
+- (NSString *)resolvedPath {
+    NSString *resolvedPath = [[BDAlias aliasWithData:aliasData] fullPathNoUI];
+    if (resolvedPath == nil)
+        resolvedPath = path;
+    return resolvedPath;
+}
+
+- (NSImage *)icon {
+    if ([self bookmarkType] == SKBookmarkTypeFolder)
+        return [NSImage imageNamed:@"SmallFolder"];
+    else if (bookmarkType == SKBookmarkTypeSeparator)
+        return nil;
+    else
+        return [[self class] smallImageForFile:[self resolvedPath]];
+}
+
+- (unsigned int)pageIndex {
+    return pageIndex;
+}
+
+- (NSNumber *)pageNumber {
+    return pageIndex == NSNotFound ? nil : [NSNumber 
numberWithUnsignedInt:pageIndex + 1];
+}
+
+- (NSString *)label {
+    return label;
+}
+
+- (void)setLabel:(NSString *)newLabel {
+    if (label != newLabel) {
+        NSUndoManager *undoManager = [[SKBookmarkController 
sharedBookmarkController] undoManager];
+        [(SKBookmark *)[undoManager prepareWithInvocationTarget:self] 
setLabel:label];
+        [label release];
+        label = [newLabel retain];
+        [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkChangedNotification object:self];
+    }
+}
+
+- (SKBookmark *)parent {
+    return parent;
+}
+
+- (void)setParent:(SKBookmark *)newParent {
+    parent = newParent;
+}
+
+- (NSArray *)children {
+    return children;
+}
+
+- (void)insertChild:(SKBookmark *)child atIndex:(unsigned int)index {
+    NSUndoManager *undoManager = [[SKBookmarkController 
sharedBookmarkController] undoManager];
+    [(SKBookmark *)[undoManager prepareWithInvocationTarget:self] 
removeChild:child];
+    [children insertObject:child atIndex:index];
+    [child setParent:self];
+    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkChangedNotification object:self];
+}
+
+- (void)addChild:(SKBookmark *)child {
+    [self insertChild:child atIndex:[children count]];
+}
+
+- (void)removeChild:(SKBookmark *)child {
+    NSUndoManager *undoManager = [[SKBookmarkController 
sharedBookmarkController] undoManager];
+    [(SKBookmark *)[undoManager prepareWithInvocationTarget:self] 
insertChild:child atIndex:[[self children] indexOfObject:child]];
+    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkWillBeRemovedNotification object:self];
+    [child setParent:nil];
+    [children removeObject:child];
+    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkChangedNotification object:self];
+}
+
+- (BOOL)isDescendantOf:(SKBookmark *)bookmark {
+    if (self == bookmark)
+        return YES;
+    NSEnumerator *childEnum = [[bookmark children] objectEnumerator];
+    SKBookmark *child;
+    while (child = [childEnum nextObject]) {
+        if ([self isDescendantOf:child])
+            return YES;
+    }
+    return NO;
+}
+
+- (BOOL)isDescendantOfArray:(NSArray *)bookmarks {
+    NSEnumerator *bmEnum = [bookmarks objectEnumerator];
+    SKBookmark *bm = nil;
+    while (bm = [bmEnum nextObject]) {
+        if ([self isDescendantOf:bm]) return YES;
+    }
+    return NO;
+}
+
[EMAIL PROTECTED]

Modified: trunk/SKBookmarkController.h
===================================================================
--- trunk/SKBookmarkController.h        2007-09-15 10:28:27 UTC (rev 2924)
+++ trunk/SKBookmarkController.h        2007-09-15 12:52:53 UTC (rev 2925)
@@ -41,12 +41,6 @@
 
 @class SKBookmarkOutlineView, SKStatusBar;
 
-enum {
-    SKBookmarkTypeBookmark,
-    SKBookmarkTypeFolder,
-    SKBookmarkTypeSeparator
-};
-
 @interface SKBookmarkController : NSWindowController {
     IBOutlet SKBookmarkOutlineView *outlineView;
     IBOutlet SKStatusBar *statusBar;
@@ -54,6 +48,7 @@
     NSMutableArray *recentDocuments;
     NSUndoManager *undoManager;
     NSArray *draggedBookmarks;
+    NSMutableDictionary *toolbarItems;
 }
 
 + (id)sharedBookmarkController;
@@ -75,6 +70,8 @@
 - (IBAction)doubleClickBookmark:(id)sender;
 - (IBAction)insertBookmarkFolder:(id)sender;
 - (IBAction)insertBookmarkSeparator:(id)sender;
+- (IBAction)deleteBookmark:(id)sender;
+- (IBAction)toggleStatusBar:(id)sender;
 
 - (NSArray *)recentDocuments;
 - (void)addRecentDocumentForPath:(NSString *)path 
pageIndex:(unsigned)pageIndex snapshots:(NSArray *)setups;
@@ -83,49 +80,8 @@
 
 - (NSUndoManager *)undoManager;
 
[EMAIL PROTECTED]
+- (void)setupToolbar;
 
-
[EMAIL PROTECTED] SKBookmark : NSObject <NSCopying> {
-    NSString *path;
-    NSData *aliasData;
-    NSString *label;
-    unsigned int pageIndex;
-    NSMutableArray *children;
-    SKBookmark *parent;
-    int bookmarkType;
-}
-
-- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel;
-- (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel;
-- (id)initFolderWithChildren:(NSArray *)aChildren label:(NSString *)aLabel;
-- (id)initFolderWithLabel:(NSString *)aLabel;
-- (id)initSeparator;
-- (id)initWithDictionary:(NSDictionary *)dictionary;
-
-- (NSDictionary *)dictionaryValue;
-
-- (int)bookmarkType;
-
-- (NSString *)path;
-- (NSData *)aliasData;
-- (NSString *)resolvedPath;
-- (NSImage *)icon;
-- (unsigned int)pageIndex;
-- (NSNumber *)pageNumber;
-- (NSString *)label;
-- (void)setLabel:(NSString *)newLabel;
-
-- (SKBookmark *)parent;
-- (void)setParent:(SKBookmark *)newParent;
-- (NSArray *)children;
-- (void)insertChild:(SKBookmark *)child atIndex:(unsigned int)index;
-- (void)addChild:(SKBookmark *)child;
-- (void)removeChild:(SKBookmark *)child;
-
-- (BOOL)isDescendantOf:(SKBookmark *)bookmark;
-- (BOOL)isDescendantOfArray:(NSArray *)bookmarks;
-
 @end
 
 

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2007-09-15 10:28:27 UTC (rev 2924)
+++ trunk/SKBookmarkController.m        2007-09-15 12:52:53 UTC (rev 2925)
@@ -37,6 +37,7 @@
  */
 
 #import "SKBookmarkController.h"
+#import "SKBookmark.h"
 #import "BDAlias.h"
 #import "SKDocument.h"
 #import "SKMainWindowController.h"
@@ -45,11 +46,16 @@
 #import "SKTypeSelectHelper.h"
 #import "SKStatusBar.h"
 #import "SKTextWithIconCell.h"
+#import "SKToolbarItem.h"
+#import "NSImage_SKExtensions.h"
 
 static NSString *SKBookmarkRowsPboardType = @"SKBookmarkRowsPboardType";
-static NSString *SKBookmarkChangedNotification = 
@"SKBookmarkChangedNotification";
-static NSString *SKBookmarkWillBeRemovedNotification = 
@"SKBookmarkWillBeRemovedNotification";
 
+static NSString *SKBookmarksToolbarIdentifier = 
@"SKBookmarksToolbarIdentifier";
+static NSString *SKBookmarksNewFolderToolbarItemIdentifier = 
@"SKBookmarksNewFolderToolbarItemIdentifier";
+static NSString *SKBookmarksNewSeparatorToolbarItemIdentifier = 
@"SKBookmarksNewSeparatorToolbarItemIdentifier";
+static NSString *SKBookmarksDeleteToolbarItemIdentifier = 
@"SKBookmarksDeleteToolbarItemIdentifier";
+
 @implementation SKBookmarkController
 
 static unsigned int maxRecentDocumentsCount = 0;
@@ -113,14 +119,22 @@
     [bookmarks release];
     [recentDocuments release];
     [draggedBookmarks release];
+    [toolbarItems release];
+    [statusBar release];
     [super dealloc];
 }
 
 - (NSString *)windowNibName { return @"BookmarksWindow"; }
 
 - (void)windowDidLoad {
+    [self setupToolbar];
+    
     [self setWindowFrameAutosaveName:@"SKBookmarksWindow"];
     
+    [statusBar retain];
+    if ([[NSUserDefaults standardUserDefaults] 
boolForKey:@"SKShowBookmarkStatusBar"] == NO)
+        [self toggleStatusBar:nil];
+    
     SKTypeSelectHelper *typeSelectHelper = [[[SKTypeSelectHelper alloc] init] 
autorelease];
     [typeSelectHelper setDataSource:self];
     [outlineView setTypeSelectHelper:typeSelectHelper];
@@ -130,6 +144,21 @@
     [outlineView setDoubleAction:@selector(doubleClickBookmark:)];
 }
 
+- (void)updateStatus {
+    int row = [outlineView selectedRow];
+    NSString *message = @"";
+    if (row != -1) {
+        SKBookmark *bookmark = [outlineView itemAtRow:row];
+        if ([bookmark bookmarkType] == SKBookmarkTypeBookmark) {
+            message = [bookmark resolvedPath];
+        } else if ([bookmark bookmarkType] == SKBookmarkTypeFolder) {
+            int count = [[bookmark children] count];
+            message = count == 1 ? NSLocalizedString(@"1 item", @"Status 
message") : [NSString stringWithFormat:NSLocalizedString(@"%i items", @"Status 
message"), count];
+        }
+    }
+    [statusBar setLeftStringValue:message];
+}
+
 #pragma mark Bookmarks
 
 - (NSArray *)bookmarks {
@@ -398,6 +427,15 @@
     [outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] 
byExtendingSelection:NO];
 }
 
+- (IBAction)deleteBookmark:(id)sender {
+    [outlineView delete:sender];
+}
+
+- (IBAction)toggleStatusBar:(id)sender {
+    [statusBar toggleBelowView:[outlineView enclosingScrollView] offset:1.0];
+    [[NSUserDefaults standardUserDefaults] setBool:[statusBar isVisible] 
forKey:@"SKShowBookmarkStatusBar"];
+}
+
 #pragma mark Undo support
 
 - (NSUndoManager *)undoManager {
@@ -516,6 +554,10 @@
     return nil;
 }
 
+- (void)outlineViewSelectionDidChange:(NSNotification *)notification {
+    [self updateStatus];
+}
+
 - (void)outlineView:(NSOutlineView *)ov deleteItems:(NSArray *)items {
     NSEnumerator *itemEnum = [[self minimumCoverForBookmarks:items] 
reverseObjectEnumerator];
     SKBookmark *item;
@@ -557,241 +599,108 @@
 }
 
 - (void)typeSelectHelper:(SKTypeSelectHelper *)typeSelectHelper 
updateSearchString:(NSString *)searchString {
-    NSString *message = @"";
     if (searchString)
-        message = [NSString stringWithFormat:NSLocalizedString(@"Finding: 
\"[EMAIL PROTECTED]"", @"Status message"), searchString];
-    [statusBar setLeftStringValue:message];
+        [statusBar setLeftStringValue:[NSString 
stringWithFormat:NSLocalizedString(@"Finding: \"[EMAIL PROTECTED]"", @"Status 
message"), searchString]];
+    else
+        [self updateStatus];
 }
 
[EMAIL PROTECTED]
+#pragma mark Toolbar
 
-#pragma mark -
-
[EMAIL PROTECTED] SKBookmark
-
-+ (NSImage *)smallImageForFile:(NSString *)filePath {
-    static NSMutableDictionary *smallIcons = nil;
-    if (smallIcons == nil)
-        smallIcons = [[NSMutableDictionary alloc] init];
+- (void)setupToolbar {
+    // Create a new toolbar instance, and attach it to our document window
+    NSToolbar *toolbar = [[[NSToolbar alloc] 
initWithIdentifier:SKBookmarksToolbarIdentifier] autorelease];
+    SKToolbarItem *item;
     
-    NSString *extension = [filePath pathExtension];
-    NSImage *icon = [smallIcons objectForKey:extension];
+    toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:3];
     
-    if (icon == nil) {
-        NSImage *image = [[NSWorkspace sharedWorkspace] 
iconForFileType:extension];
-        NSRect sourceRect = {NSZeroPoint, [image size]};
-        NSRect targetRect = NSMakeRect(0.0, 0.0, 16.0, 16.0);
-        icon = [[NSImage alloc] initWithSize:targetRect.size];
-        [icon lockFocus];
-        [[NSGraphicsContext currentContext] 
setImageInterpolation:NSImageInterpolationHigh];
-        [image drawInRect:targetRect fromRect:sourceRect 
operation:NSCompositeCopy fraction:1.0];
-        [icon unlockFocus];
-        [smallIcons setObject:icon forKey:extension];
-        [icon release];
-    }
-    return icon;
+    // Set up toolbar properties: Allow customization, give a default display 
mode, and remember state in user defaults
+    [toolbar setAllowsUserCustomization: YES];
+    [toolbar setAutosavesConfiguration: YES];
+    [toolbar setDisplayMode: NSToolbarDisplayModeDefault];
+    
+    // We are the delegate
+    [toolbar setDelegate: self];
+    
+    // Add template toolbar items
+    
+    item = [[SKToolbarItem alloc] 
initWithItemIdentifier:SKBookmarksNewFolderToolbarItemIdentifier];
+    [item setLabels:NSLocalizedString(@"New Folder", @"Toolbar item label")];
+    [item setToolTip:NSLocalizedString(@"Add a New Folder", @"Tool tip 
message")];
+    [item setImageNamed:@"ToolbarNewFolder"];
+    [item setTarget:self];
+    [item setAction:@selector(insertBookmarkFolder:)];
+    [toolbarItems setObject:item 
forKey:SKBookmarksNewFolderToolbarItemIdentifier];
+    [item release];
+    
+    item = [[SKToolbarItem alloc] 
initWithItemIdentifier:SKBookmarksNewSeparatorToolbarItemIdentifier];
+    [item setLabels:NSLocalizedString(@"New Separator", @"Toolbar item 
label")];
+    [item setToolTip:NSLocalizedString(@"Add a New Separator", @"Tool tip 
message")];
+    [item setImageNamed:@"ToolbarNewSeparator"];
+    [item setTarget:self];
+    [item setAction:@selector(insertBookmarkSeparator:)];
+    [toolbarItems setObject:item 
forKey:SKBookmarksNewSeparatorToolbarItemIdentifier];
+    [item release];
+    
+    item = [[SKToolbarItem alloc] 
initWithItemIdentifier:SKBookmarksDeleteToolbarItemIdentifier];
+    [item setLabels:NSLocalizedString(@"Delete", @"Toolbar item label")];
+    [item setToolTip:NSLocalizedString(@"Delete Selected Items", @"Tool tip 
message")];
+    [item setImage:[NSImage imageWithIconForToolboxCode:kToolbarDeleteIcon]];
+    [item setTarget:self];
+    [item setAction:@selector(deleteBookmark:)];
+    [toolbarItems setObject:item 
forKey:SKBookmarksDeleteToolbarItemIdentifier];
+    [item release];
+    
+    // Attach the toolbar to the window
+    [[self window] setToolbar:toolbar];
 }
 
-- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel {
-    if (self = [super init]) {
-        bookmarkType = SKBookmarkTypeBookmark;
-        path = [aPath copy];
-        aliasData = [aData copy];
-        pageIndex = aPageIndex;
-        label = [aLabel copy];
-        children = nil;
-    }
-    return self;
-}
+- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar 
itemForItemIdentifier:(NSString *)itemIdent willBeInsertedIntoToolbar:(BOOL) 
willBeInserted {
 
-- (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel {
-    return [self initWithPath:aPath aliasData:[[BDAlias aliasWithPath:aPath] 
aliasData] pageIndex:aPageIndex label:aLabel];
+    NSToolbarItem *item = [toolbarItems objectForKey:itemIdent];
+    NSToolbarItem *newItem = [[item copy] autorelease];
+    return newItem;
 }
 
-- (id)initFolderWithChildren:(NSArray *)aChildren label:(NSString *)aLabel {
-    if (self = [super init]) {
-        bookmarkType = SKBookmarkTypeFolder;
-        path = nil;
-        aliasData = nil;
-        pageIndex = NSNotFound;
-        label = [aLabel copy];
-        children = [aChildren mutableCopy];
-        [children makeObjectsPerformSelector:@selector(setParent:) 
withObject:self];
-    }
-    return self;
+- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar {
+    return [NSArray arrayWithObjects:
+        SKBookmarksNewFolderToolbarItemIdentifier, 
+        SKBookmarksNewSeparatorToolbarItemIdentifier, 
+        SKBookmarksDeleteToolbarItemIdentifier, nil];
 }
 
-- (id)initFolderWithLabel:(NSString *)aLabel {
-    return [self initFolderWithChildren:[NSArray array] label:aLabel];
+- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar {
+    return [NSArray arrayWithObjects: 
+        SKBookmarksNewFolderToolbarItemIdentifier, 
+        SKBookmarksNewSeparatorToolbarItemIdentifier, 
+               SKBookmarksDeleteToolbarItemIdentifier, 
+        NSToolbarFlexibleSpaceItemIdentifier, 
+               NSToolbarSpaceItemIdentifier, 
+               NSToolbarSeparatorItemIdentifier, 
+               NSToolbarCustomizeToolbarItemIdentifier, nil];
 }
 
-- (id)initSeparator {
-    if (self = [super init]) {
-        bookmarkType = SKBookmarkTypeSeparator;
-        path = nil;
-        aliasData = nil;
-        pageIndex = NSNotFound;
-        label = nil;
-        children = nil;
-    }
-    return self;
-}
-
-- (id)initWithDictionary:(NSDictionary *)dictionary {
-    if ([[dictionary objectForKey:@"type"] isEqualToString:@"folder"]) {
-        NSEnumerator *dictEnum = [[dictionary objectForKey:@"children"] 
objectEnumerator];
-        NSDictionary *dict;
-        NSMutableArray *newChildren = [NSMutableArray array];
-        while (dict = [dictEnum nextObject])
-            [newChildren addObject:[[[[self class] alloc] 
initWithDictionary:dict] autorelease]];
-        return [self initFolderWithChildren:newChildren label:[dictionary 
objectForKey:@"label"]];
-    } else if ([[dictionary objectForKey:@"type"] 
isEqualToString:@"separator"]) {
-        return [self initSeparator];
+- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem {
+    NSString *identifier = [toolbarItem itemIdentifier];
+    if ([identifier isEqualToString:SKBookmarksDeleteToolbarItemIdentifier]) {
+        return [outlineView canDelete];
     } else {
-        return [self initWithPath:[dictionary objectForKey:@"path"] 
aliasData:[dictionary objectForKey:@"_BDAlias"] pageIndex:[[dictionary 
objectForKey:@"pageIndex"] unsignedIntValue] label:[dictionary 
objectForKey:@"label"]];
+        return YES;
     }
 }
 
-- (id)copyWithZone:(NSZone *)aZone {
-    if (bookmarkType == SKBookmarkTypeFolder)
-        return [[[self class] allocWithZone:aZone] 
initFolderWithChildren:[[[NSArray alloc] initWithArray:children copyItems:YES] 
autorelease] label:label];
-    else if (bookmarkType == SKBookmarkTypeSeparator)
-        return [[[self class] allocWithZone:aZone] initSeparator];
-    else
-        return [[[self class] allocWithZone:aZone] initWithPath:path 
aliasData:aliasData pageIndex:pageIndex label:label];
-}
-
-- (void)dealloc {
-    [[[SKBookmarkController sharedBookmarkController] undoManager] 
removeAllActionsWithTarget:self];
-    [path release];
-    [aliasData release];
-    [label release];
-    [children release];
-    [super dealloc];
-}
-
-- (NSString *)description {
-    if (bookmarkType == SKBookmarkTypeFolder)
-        return [NSString stringWithFormat:@"<%@: label=%@, children=%@>", 
[self class], label, children];
-    else if (bookmarkType == SKBookmarkTypeSeparator)
-        return [NSString stringWithFormat:@"<%@: separator>", [self class]];
-    else
-        return [NSString stringWithFormat:@"<%@: label=%@, path=%@, page=%i>", 
[self class], label, path, pageIndex];
-}
-
-- (NSDictionary *)dictionaryValue {
-    if (bookmarkType == SKBookmarkTypeFolder)
-        return [NSDictionary dictionaryWithObjectsAndKeys:@"folder", @"type", 
[children valueForKey:@"dictionaryValue"], @"children", label, @"label", nil];
-    else if (bookmarkType == SKBookmarkTypeSeparator)
-        return [NSDictionary dictionaryWithObjectsAndKeys:@"separator", 
@"type", nil];
-    else
-        return [NSDictionary dictionaryWithObjectsAndKeys:@"bookmark", 
@"type", path, @"path", aliasData, @"_BDAlias", [NSNumber 
numberWithUnsignedInt:pageIndex], @"pageIndex", label, @"label", nil];
-}
-
-- (int)bookmarkType {
-    return bookmarkType;
-}
-
-- (NSString *)path {
-    return [[path retain] autorelease];
-}
-
-- (NSData *)aliasData {
-    return aliasData;
-}
-
-- (NSString *)resolvedPath {
-    NSString *resolvedPath = [[BDAlias aliasWithData:aliasData] fullPathNoUI];
-    if (resolvedPath == nil)
-        resolvedPath = path;
-    return resolvedPath;
-}
-
-- (NSImage *)icon {
-    if ([self bookmarkType] == SKBookmarkTypeFolder)
-        return [NSImage imageNamed:@"SmallFolder"];
-    else if (bookmarkType == SKBookmarkTypeSeparator)
-        return nil;
-    else
-        return [[self class] smallImageForFile:[self resolvedPath]];
-}
-
-- (unsigned int)pageIndex {
-    return pageIndex;
-}
-
-- (NSNumber *)pageNumber {
-    return pageIndex == NSNotFound ? nil : [NSNumber 
numberWithUnsignedInt:pageIndex + 1];
-}
-
-- (NSString *)label {
-    return label;
-}
-
-- (void)setLabel:(NSString *)newLabel {
-    if (label != newLabel) {
-        NSUndoManager *undoManager = [[SKBookmarkController 
sharedBookmarkController] undoManager];
-        [(SKBookmark *)[undoManager prepareWithInvocationTarget:self] 
setLabel:label];
-        [label release];
-        label = [newLabel retain];
-        [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkChangedNotification object:self];
-    }
-}
-
-- (SKBookmark *)parent {
-    return parent;
-}
-
-- (void)setParent:(SKBookmark *)newParent {
-    parent = newParent;
-}
-
-- (NSArray *)children {
-    return children;
-}
-
-- (void)insertChild:(SKBookmark *)child atIndex:(unsigned int)index {
-    NSUndoManager *undoManager = [[SKBookmarkController 
sharedBookmarkController] undoManager];
-    [(SKBookmark *)[undoManager prepareWithInvocationTarget:self] 
removeChild:child];
-    [children insertObject:child atIndex:index];
-    [child setParent:self];
-    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkChangedNotification object:self];
-}
-
-- (void)addChild:(SKBookmark *)child {
-    [self insertChild:child atIndex:[children count]];
-}
-
-- (void)removeChild:(SKBookmark *)child {
-    NSUndoManager *undoManager = [[SKBookmarkController 
sharedBookmarkController] undoManager];
-    [(SKBookmark *)[undoManager prepareWithInvocationTarget:self] 
insertChild:child atIndex:[[self children] indexOfObject:child]];
-    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkWillBeRemovedNotification object:self];
-    [child setParent:nil];
-    [children removeObject:child];
-    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKBookmarkChangedNotification object:self];
-}
-
-- (BOOL)isDescendantOf:(SKBookmark *)bookmark {
-    if (self == bookmark)
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
+    SEL action = [menuItem action];
+    if (action == @selector(toggleStatusBar:)) {
+        if ([statusBar isVisible])
+            [menuItem setTitle:NSLocalizedString(@"Hide Status Bar", @"Menu 
item title")];
+        else
+            [menuItem setTitle:NSLocalizedString(@"Show Status Bar", @"Menu 
item title")];
         return YES;
-    NSEnumerator *childEnum = [[bookmark children] objectEnumerator];
-    SKBookmark *child;
-    while (child = [childEnum nextObject]) {
-        if ([self isDescendantOf:child])
-            return YES;
     }
-    return NO;
+    return YES;
 }
 
-- (BOOL)isDescendantOfArray:(NSArray *)bookmarks {
-    NSEnumerator *bmEnum = [bookmarks objectEnumerator];
-    SKBookmark *bm = nil;
-    while (bm = [bmEnum nextObject]) {
-        if ([self isDescendantOf:bm]) return YES;
-    }
-    return NO;
-}
-
 @end
 
 #pragma mark -

Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj        2007-09-15 10:28:27 UTC (rev 
2924)
+++ trunk/Skim.xcodeproj/project.pbxproj        2007-09-15 12:52:53 UTC (rev 
2925)
@@ -172,6 +172,10 @@
                CEAFFD9D0C40F2A800C3ECBB /* ToolbarLines.tiff in Resources */ = 
{isa = PBXBuildFile; fileRef = CEAFFD9C0C40F2A800C3ECBB /* ToolbarLines.tiff 
*/; };
                CEB7359C0C4A8C1C000350F9 /* TransitionMask.jpg in Resources */ 
= {isa = PBXBuildFile; fileRef = CEB7359A0C4A8C1B000350F9 /* TransitionMask.jpg 
*/; };
                CEB735A20C4A8CD6000350F9 /* TransitionShading.tiff in Resources 
*/ = {isa = PBXBuildFile; fileRef = CEB735A10C4A8CD6000350F9 /* 
TransitionShading.tiff */; };
+               CEBD51D70C9BF68100FBF6A4 /* ToolbarNewFolder.tiff in Resources 
*/ = {isa = PBXBuildFile; fileRef = CEBD51D50C9BF68100FBF6A4 /* 
ToolbarNewFolder.tiff */; };
+               CEBD51D80C9BF68100FBF6A4 /* ToolbarNewSeparator.tiff in 
Resources */ = {isa = PBXBuildFile; fileRef = CEBD51D60C9BF68100FBF6A4 /* 
ToolbarNewSeparator.tiff */; };
+               CEBD52EC0C9C0AE500FBF6A4 /* SKBookmark.h in CopyFiles */ = {isa 
= PBXBuildFile; fileRef = CEBD52EA0C9C0AE500FBF6A4 /* SKBookmark.h */; };
+               CEBD52ED0C9C0AE500FBF6A4 /* SKBookmark.m in Sources */ = {isa = 
PBXBuildFile; fileRef = CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */; };
                CECDC4FF0C5966A80026AAEC /* NSImage_SKExtensions.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CECDC4FD0C5966A80026AAEC /* 
NSImage_SKExtensions.m */; };
                CECDD2990C5B68580026AAEC /* SKCenteredTextFieldCell.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CECDD2970C5B68580026AAEC /* 
SKCenteredTextFieldCell.m */; };
                CECDDBAE0C5BB9600026AAEC /* SKFindTableView.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CECDDBAC0C5BB95F0026AAEC /* SKFindTableView.m 
*/; };
@@ -269,6 +273,7 @@
                        files = (
                                CE2BD8450BD4135600A5F4DB /* Sparkle.framework 
in CopyFiles */,
                                CEA1D6E90C9984400061A6D4 /* 
SKTextWithIconCell.h in CopyFiles */,
+                               CEBD52EC0C9C0AE500FBF6A4 /* SKBookmark.h in 
CopyFiles */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
@@ -571,6 +576,10 @@
                CEB72B890C4A189D000350F9 /* SKTransitionController.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= SKTransitionController.h; sourceTree = "<group>"; };
                CEB7359A0C4A8C1B000350F9 /* TransitionMask.jpg */ = {isa = 
PBXFileReference; lastKnownFileType = image.jpeg; name = TransitionMask.jpg; 
path = Images/TransitionMask.jpg; sourceTree = "<group>"; };
                CEB735A10C4A8CD6000350F9 /* TransitionShading.tiff */ = {isa = 
PBXFileReference; lastKnownFileType = image.tiff; name = 
TransitionShading.tiff; path = Images/TransitionShading.tiff; sourceTree = 
"<group>"; };
+               CEBD51D50C9BF68100FBF6A4 /* ToolbarNewFolder.tiff */ = {isa = 
PBXFileReference; lastKnownFileType = image.tiff; name = ToolbarNewFolder.tiff; 
path = Images/ToolbarNewFolder.tiff; sourceTree = "<group>"; };
+               CEBD51D60C9BF68100FBF6A4 /* ToolbarNewSeparator.tiff */ = {isa 
= PBXFileReference; lastKnownFileType = image.tiff; name = 
ToolbarNewSeparator.tiff; path = Images/ToolbarNewSeparator.tiff; sourceTree = 
"<group>"; };
+               CEBD52EA0C9C0AE500FBF6A4 /* SKBookmark.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SKBookmark.h; sourceTree = "<group>"; };
+               CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SKBookmark.m; sourceTree = "<group>"; };
                CECD97200C57A3230026AAEC /* French */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = 
French.lproj/InfoWindow.nib; sourceTree = "<group>"; };
                CECD97230C57A32F0026AAEC /* French */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = 
French.lproj/MainMenu.nib; sourceTree = "<group>"; };
                CECD97260C57A3390026AAEC /* French */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = 
French.lproj/MainWindow.nib; sourceTree = "<group>"; };
@@ -1000,6 +1009,8 @@
                        children = (
                                CE3A3D2A0B78C0A0006B64D3 /* 
SKPDFAnnotationNote.h */,
                                CE3A3D2B0B78C0A0006B64D3 /* 
SKPDFAnnotationNote.m */,
+                               CEBD52EA0C9C0AE500FBF6A4 /* SKBookmark.h */,
+                               CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */,
                                CEAF2E570C45414100C3ECBB /* SKLine.h */,
                                CEAF2E580C45414100C3ECBB /* SKLine.m */,
                                CE4294A10BBD29120016FDC2 /* SKReadingBar.h */,
@@ -1086,6 +1097,8 @@
                                CE5478C70B33456300F8AFB6 /* 
ToolbarZoomToFit.tiff */,
                                CEB7359A0C4A8C1B000350F9 /* TransitionMask.jpg 
*/,
                                CEB735A10C4A8CD6000350F9 /* 
TransitionShading.tiff */,
+                               CEBD51D60C9BF68100FBF6A4 /* 
ToolbarNewSeparator.tiff */,
+                               CEBD51D50C9BF68100FBF6A4 /* 
ToolbarNewFolder.tiff */,
                                CE380A7A0B834E6100A1B779 /* CameraCursor.tiff 
*/,
                                CE2082DF0C5E09DC009D3EFB /* 
ResizeLeftDownCursor.tiff */,
                                CE2082E00C5E09DC009D3EFB /* 
ResizeLeftUpCursor.tiff */,
@@ -1311,6 +1324,8 @@
                                CEF84C630C78A89A00A3AD51 /* 
SmallPreferences.tiff in Resources */,
                                CE898F060C843A8B008A0856 /* PDFDDocument.icns 
in Resources */,
                                CEA1D7810C99953C0061A6D4 /* SmallFolder.tiff in 
Resources */,
+                               CEBD51D70C9BF68100FBF6A4 /* 
ToolbarNewFolder.tiff in Resources */,
+                               CEBD51D80C9BF68100FBF6A4 /* 
ToolbarNewSeparator.tiff in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
@@ -1528,6 +1543,7 @@
                                CE5FA1680C909886008BE480 /* SKFDFParser.m in 
Sources */,
                                CEA182280C92E3300061A6D4 /* 
NSData_SKExtensions.m in Sources */,
                                CEA1D6EA0C9984400061A6D4 /* 
SKTextWithIconCell.m in Sources */,
+                               CEBD52ED0C9C0AE500FBF6A4 /* SKBookmark.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 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to