Revision: 2689
          http://skim-app.svn.sourceforge.net/skim-app/?rev=2689&view=rev
Author:   hofman
Date:     2007-08-20 11:21:29 -0700 (Mon, 20 Aug 2007)

Log Message:
-----------
Implement undo, reordering, delete for bookmarks. Use custom data objects for 
bookmarks.

Modified Paths:
--------------
    trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib
    trunk/Dutch.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/English.lproj/BookmarksWindow.nib/classes.nib
    trunk/English.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/French.lproj/BookmarksWindow.nib/classes.nib
    trunk/French.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/Italian.lproj/BookmarksWindow.nib/classes.nib
    trunk/Italian.lproj/BookmarksWindow.nib/keyedobjects.nib
    trunk/NSTableView_SKExtensions.h
    trunk/NSTableView_SKExtensions.m
    trunk/SKApplicationController.m
    trunk/SKBookmarkController.h
    trunk/SKBookmarkController.m
    trunk/SKThumbnailTableView.h
    trunk/SKThumbnailTableView.m

Modified: trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib
===================================================================
--- trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib   2007-08-20 10:51:17 UTC 
(rev 2688)
+++ trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib   2007-08-20 18:21:29 UTC 
(rev 2689)
@@ -5,6 +5,7 @@
         {
             CLASS = SKBookmarkController; 
             LANGUAGE = ObjC; 
+            OUTLETS = {tableView = NSTableView; }; 
             SUPERCLASS = NSWindowController; 
         }
     ); 

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

Modified: trunk/English.lproj/BookmarksWindow.nib/classes.nib
===================================================================
--- trunk/English.lproj/BookmarksWindow.nib/classes.nib 2007-08-20 10:51:17 UTC 
(rev 2688)
+++ trunk/English.lproj/BookmarksWindow.nib/classes.nib 2007-08-20 18:21:29 UTC 
(rev 2689)
@@ -5,6 +5,7 @@
         {
             CLASS = SKBookmarkController; 
             LANGUAGE = ObjC; 
+            OUTLETS = {tableView = NSTableView; }; 
             SUPERCLASS = NSWindowController; 
         }
     ); 

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

Modified: trunk/French.lproj/BookmarksWindow.nib/classes.nib
===================================================================
--- trunk/French.lproj/BookmarksWindow.nib/classes.nib  2007-08-20 10:51:17 UTC 
(rev 2688)
+++ trunk/French.lproj/BookmarksWindow.nib/classes.nib  2007-08-20 18:21:29 UTC 
(rev 2689)
@@ -5,6 +5,7 @@
         {
             CLASS = SKBookmarkController; 
             LANGUAGE = ObjC; 
+            OUTLETS = {tableView = NSTableView; }; 
             SUPERCLASS = NSWindowController; 
         }
     ); 

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

Modified: trunk/Italian.lproj/BookmarksWindow.nib/classes.nib
===================================================================
--- trunk/Italian.lproj/BookmarksWindow.nib/classes.nib 2007-08-20 10:51:17 UTC 
(rev 2688)
+++ trunk/Italian.lproj/BookmarksWindow.nib/classes.nib 2007-08-20 18:21:29 UTC 
(rev 2689)
@@ -5,6 +5,7 @@
         {
             CLASS = SKBookmarkController; 
             LANGUAGE = ObjC; 
+            OUTLETS = {tableView = NSTableView; }; 
             SUPERCLASS = NSWindowController; 
         }
     ); 

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

Modified: trunk/NSTableView_SKExtensions.h
===================================================================
--- trunk/NSTableView_SKExtensions.h    2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/NSTableView_SKExtensions.h    2007-08-20 18:21:29 UTC (rev 2689)
@@ -40,5 +40,12 @@
 
 
 @interface NSTableView (SKExtensions)
+- (BOOL)canDelete;
+- (void)delete:(id)sender;
[EMAIL PROTECTED]
 
+
[EMAIL PROTECTED] NSObject (NSTableViewSKExtendedDelegate)
+- (void)tableView:(NSTableView *)aTableView deleteRowsWithIndexes:(NSIndexSet 
*)rowIndexes;
+- (BOOL)tableView:(NSTableView *)aTableView 
canDeleteRowsWithIndexes:(NSIndexSet *)rowIndexes;
 @end

Modified: trunk/NSTableView_SKExtensions.m
===================================================================
--- trunk/NSTableView_SKExtensions.m    2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/NSTableView_SKExtensions.m    2007-08-20 18:21:29 UTC (rev 2689)
@@ -63,7 +63,9 @@
     unichar eventChar = [characters length] > 0 ? [characters 
characterAtIndex:0] : 0;
        unsigned modifierFlags = [theEvent modifierFlags] & 
NSDeviceIndependentModifierFlagsMask;
     
-    if (eventChar == NSHomeFunctionKey && (modifierFlags & ~NSFunctionKeyMask) 
== 0)
+       if ((eventChar == NSDeleteCharacter || eventChar == 
NSDeleteFunctionKey) && modifierFlags == 0 && [self canDelete])
+        [self delete:self];
+    else if (eventChar == NSHomeFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0)
         [self scrollToBeginningOfDocument:nil];
     else if (eventChar == NSEndFunctionKey && (modifierFlags & 
~NSFunctionKeyMask) == 0)
         [self scrollToEndOfDocument:nil];
@@ -71,4 +73,25 @@
         originalKeyDown(self, _cmd, theEvent);
 }
 
+- (BOOL)canDelete {
+    NSIndexSet *indexes = [self selectedRowIndexes];
+    return [indexes count] && 
+           [[self delegate] 
respondsToSelector:@selector(tableView:canDeleteRowsWithIndexes:)] && 
+           [[self delegate] 
respondsToSelector:@selector(tableView:deleteRowsWithIndexes:)] && 
+           [[self delegate] tableView:self canDeleteRowsWithIndexes:indexes];
+}
+
+- (void)delete:(id)sender {
+    if ([self canDelete])
+        [[self delegate] tableView:self deleteRowsWithIndexes:[self 
selectedRowIndexes]];
+    else
+        NSBeep();
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
+    if ([menuItem action] == @selector(delete:))
+        return [self canDelete];
+    return YES;
+}
+
 @end

Modified: trunk/SKApplicationController.m
===================================================================
--- trunk/SKApplicationController.m     2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/SKApplicationController.m     2007-08-20 18:21:29 UTC (rev 2689)
@@ -212,11 +212,8 @@
 }
 
 - (IBAction)openBookmark:(id)sender {
-    int i = [sender tag];
-    NSArray *bookmarks = [[SKBookmarkController sharedBookmarkController] 
bookmarks];
-    NSDictionary *bm = [bookmarks objectAtIndex:i];
-    
-    [[SKBookmarkController sharedBookmarkController] openBookmarks:[NSArray 
arrayWithObjects:bm, nil]];
+    SKBookmark *bookmark = [sender representedObject];
+    [[SKBookmarkController sharedBookmarkController] openBookmarks:[NSArray 
arrayWithObjects:bookmark, nil]];
 }
 
 #pragma mark Support
@@ -229,10 +226,10 @@
     if (iMax > 0)
         [menu addItem:[NSMenuItem separatorItem]];
     for (i = 0; i < iMax; i++) {
-        NSDictionary *bm = [bookmarks objectAtIndex:i];
-        NSMenuItem *item = [menu addItemWithTitle:[bm objectForKey:@"label"] 
action:@selector(openBookmark:)  keyEquivalent:@""];
+        SKBookmark *bm = [bookmarks objectAtIndex:i];
+        NSMenuItem *item = [menu addItemWithTitle:[bm label] 
action:@selector(openBookmark:)  keyEquivalent:@""];
         [item setTarget:self];
-        [item setTag:i];
+        [item setRepresentedObject:bm];
     }
 }
 

Modified: trunk/SKBookmarkController.h
===================================================================
--- trunk/SKBookmarkController.h        2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/SKBookmarkController.h        2007-08-20 18:21:29 UTC (rev 2689)
@@ -40,8 +40,10 @@
 
 
 @interface SKBookmarkController : NSWindowController {
+    IBOutlet NSTableView *tableView;
     NSMutableArray *bookmarks;
     NSMutableArray *recentDocuments;
+    NSUndoManager *undoManager;
 }
 
 + (id)sharedBookmarkController;
@@ -55,6 +57,7 @@
 
 - (void)addBookmarkForPath:(NSString *)path pageIndex:(unsigned)pageIndex 
label:(NSString *)label;
 - (void)saveBookmarks;
+- (void)handleBookmarkChangedNotification:(NSNotification *)notification;
 - (NSString *)bookmarksFilePath;
 - (void)openBookmarks:(NSArray *)items;
 
@@ -63,10 +66,30 @@
 - (unsigned int)pageIndexForRecentDocumentAtPath:(NSString *)path;
 - (NSArray *)snapshotsAtPath:(NSString *)path;
 
[EMAIL PROTECTED]
+- (NSUndoManager *)undoManager;
 
[EMAIL PROTECTED] SKPageIndexTransformer : NSValueTransformer
 @end
 
[EMAIL PROTECTED] SKAliasDataTransformer : NSValueTransformer
+
[EMAIL PROTECTED] SKBookmark : NSObject <NSCopying> {
+    NSString *path;
+    NSData *aliasData;
+    NSString *label;
+    unsigned int pageIndex;
+}
+
+- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel;
+- (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel;
+- (id)initWithDictionary:(NSDictionary *)dictionary;
+
+- (NSDictionary *)dictionaryValue;
+
+- (NSString *)path;
+- (NSData *)aliasData;
+- (NSString *)resolvedPath;
+- (unsigned int)pageIndex;
+- (NSNumber *)pageNumber;
+- (NSString *)label;
+- (void)setLabel:(NSString *)newLabel;
+
 @end

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/SKBookmarkController.m        2007-08-20 18:21:29 UTC (rev 2689)
@@ -41,15 +41,16 @@
 #import "SKDocument.h"
 #import "SKMainWindowController.h"
 #import "Files_SKExtensions.h"
+#import "NSTableView_SKExtensions.h"
 
+static NSString *SKBookmarkRowsPboardType = @"SKBookmarkRowsPboardType";
+static NSString *SKBookmarkChangedNotification = 
@"SKBookmarkChangedNotification";
+
 @implementation SKBookmarkController
 
 static unsigned int maxRecentDocumentsCount = 0;
 
 + (void)initialize {
-    [NSValueTransformer setValueTransformer:[[[SKPageIndexTransformer alloc] 
init] autorelease] forName:@"SKPageIndexTransformer"];
-    [NSValueTransformer setValueTransformer:[[[SKAliasDataTransformer alloc] 
init] autorelease] forName:@"SKAliasDataTransformer"];
-    
     maxRecentDocumentsCount = [[NSUserDefaults standardUserDefaults] 
integerForKey:@"SKMaximumDocumentPageHistoryCount"];
     if (maxRecentDocumentsCount == 0)
         maxRecentDocumentsCount = 50;
@@ -80,10 +81,22 @@
                 NSLog(@"Error deserializing: %@", error);
                 [error release];
             } else if ([plist isKindOfClass:[NSDictionary class]]) {
-                [bookmarks addObjectsFromArray:[plist 
objectForKey:@"bookmarks"]];
                 [recentDocuments addObjectsFromArray:[plist 
objectForKey:@"recentDocuments"]];
+                NSEnumerator *dictEnum = [[plist objectForKey:@"bookmarks"] 
objectEnumerator];
+                NSDictionary *dict;
+                
+                while (dict = [dictEnum nextObject]) {
+                    SKBookmark *bookmark = [[SKBookmark alloc] 
initWithDictionary:dict];
+                    [bookmarks addObject:bookmark];
+                    [bookmark release];
+                }
             }
         }
+        
+               [[NSNotificationCenter defaultCenter] addObserver:self
+                                                 
selector:@selector(handleBookmarkChangedNotification:)
+                                                     
name:SKBookmarkChangedNotification
+                                                   object:nil];
     }
     return self;
 }
@@ -96,11 +109,19 @@
 
 - (NSString *)windowNibName { return @"BookmarksWindow"; }
 
+- (void)windowDidLoad {
+    [self setWindowFrameAutosaveName:@"SKBookmarksWindow"];
+    [tableView registerForDraggedTypes:[NSArray 
arrayWithObjects:SKBookmarkRowsPboardType, nil]];
+}
+
+#pragma mark Bookmarks
+
 - (NSArray *)bookmarks {
     return bookmarks;
 }
 
 - (void)setBookmarks:(NSArray *)newBookmarks {
+    [[[self undoManager] prepareWithInvocationTarget:self] 
setBookmarks:[[bookmarks copy] autorelease]];
     return [bookmarks setArray:newBookmarks];
 }
 
@@ -113,11 +134,13 @@
 }
 
 - (void)insertObject:(id)obj inBookmarksAtIndex:(unsigned)index {
+    [[[self undoManager] prepareWithInvocationTarget:self] 
removeObjectFromBookmarksAtIndex:index];
     [bookmarks insertObject:obj atIndex:index];
     [self saveBookmarks];
 }
 
 - (void)removeObjectFromBookmarksAtIndex:(unsigned)index {
+    [[[self undoManager] prepareWithInvocationTarget:self] 
insertObject:[bookmarks objectAtIndex:index] inBookmarksAtIndex:index];
     [bookmarks removeObjectAtIndex:index];
     [self saveBookmarks];
 }
@@ -125,11 +148,13 @@
 - (void)addBookmarkForPath:(NSString *)path pageIndex:(unsigned)pageIndex 
label:(NSString *)label {
     if (path == nil)
         return;
-    NSData *data = [[BDAlias aliasWithPath:path] aliasData];
-    NSMutableDictionary *bm = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:path, @"path", label, @"label", [NSNumber 
numberWithUnsignedInt:pageIndex], @"pageIndex", data, @"_BDAlias", nil];
-    [[self mutableArrayValueForKey:@"bookmarks"] addObject:bm];
+    SKBookmark *bookmark = [[SKBookmark alloc] initWithPath:path 
pageIndex:pageIndex label:label];
+    [[self mutableArrayValueForKey:@"bookmarks"] addObject:bookmark];
+    [bookmark release];
 }
 
+#pragma mark Recent Documents
+
 - (NSArray *)recentDocuments {
     return recentDocuments;
 }
@@ -182,7 +207,7 @@
 }
 
 - (void)saveBookmarks {
-    NSDictionary *bookmarksDictionary = [NSDictionary 
dictionaryWithObjectsAndKeys:bookmarks, @"bookmarks", recentDocuments, 
@"recentDocuments", nil];
+    NSDictionary *bookmarksDictionary = [NSDictionary 
dictionaryWithObjectsAndKeys:[bookmarks valueForKey:@"dictionaryValue"], 
@"bookmarks", recentDocuments, @"recentDocuments", nil];
     NSString *error = nil;
     NSPropertyListFormat format = NSPropertyListXMLFormat_v1_0;
     NSData *data = [NSPropertyListSerialization 
dataFromPropertyList:bookmarksDictionary format:format errorDescription:&error];
@@ -195,6 +220,10 @@
     }
 }
 
+- (void)handleBookmarkChangedNotification:(NSNotification *)notification {
+    [self saveBookmarks];
+}
+
 - (NSString *)bookmarksFilePath {
     static NSString *bookmarksPath = nil;
     
@@ -225,24 +254,19 @@
     return bookmarksPath;
 }
 
-- (void)controlTextDidEndEditing:(NSNotification *)notification {
-    [self saveBookmarks];
-}
-
 - (void)openBookmarks:(NSArray *)items {
     NSEnumerator *bmEnum = [items objectEnumerator];
-    NSDictionary *bm;
+    SKBookmark *bm;
     
     while (bm = [bmEnum nextObject]) {
         id document = nil;
-        NSURL *fileURL = [[BDAlias aliasWithData:[bm 
objectForKey:@"_BDAlias"]] fileURL];
+        NSString *path = [bm resolvedPath];
+        NSURL *fileURL = path ? [NSURL fileURLWithPath:path] : nil;
         NSError *error;
         
-        if (fileURL == nil && [bm objectForKey:@"path"])
-            fileURL = [NSURL fileURLWithPath:[bm objectForKey:@"path"]];
         if (fileURL && NO == SKFileIsInTrash(fileURL)) {
             if (document = [[NSDocumentController sharedDocumentController] 
openDocumentWithContentsOfURL:fileURL display:YES error:&error]) {
-                [[document mainWindowController] setPageNumber:[[bm 
objectForKey:@"pageIndex"] unsignedIntValue] + 1];
+                [[document mainWindowController] setPageNumber:[bm pageIndex] 
+ 1];
             } else {
                 [NSApp presentError:error];
             }
@@ -250,41 +274,157 @@
     }
 }
 
[EMAIL PROTECTED]
+#pragma mark Undo support
 
+- (NSUndoManager *)undoManager {
+    if(undoManager == nil)
+        undoManager = [[NSUndoManager alloc] init];
+    return undoManager;
+}
 
[EMAIL PROTECTED] SKPageIndexTransformer
+- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)sender {
+    return [self undoManager];
+}
 
-+ (Class)transformedValueClass {
-    return [NSNumber class];
+#pragma mark NSTableView datasource methods
+
+- (int)numberOfRowsInTableView:(NSTableView *)tv { return 0; }
+
+- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn 
*)tableColumn row:(int)row { return nil; }
+
+- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet 
*)rowIndexes toPasteboard:(NSPasteboard *)pboard {
+    [pboard declareTypes:[NSArray arrayWithObjects:SKBookmarkRowsPboardType, 
nil] owner:nil];
+    [pboard setPropertyList:[NSNumber numberWithUnsignedInt:[rowIndexes 
firstIndex]] forType:SKBookmarkRowsPboardType];
+    return YES;
 }
 
-+ (BOOL)allowsReverseTransformation {
+- (NSDragOperation)tableView:(NSTableView *)tv validateDrop:(id 
<NSDraggingInfo>)info proposedRow:(int)row 
proposedDropOperation:(NSTableViewDropOperation)op {
+    NSPasteboard *pboard = [info draggingPasteboard];
+    NSString *type = [pboard availableTypeFromArray:[NSArray 
arrayWithObjects:SKBookmarkRowsPboardType, nil]];
+    
+    if (type) {
+        [tv setDropRow:row == -1 ? [tv numberOfRows] : row 
dropOperation:NSTableViewDropAbove];
+        return NSDragOperationMove;
+    }
+    return NSDragOperationNone;
+}
+
+- (BOOL)tableView:(NSTableView *)tv acceptDrop:(id <NSDraggingInfo>)info 
row:(int)row dropOperation:(NSTableViewDropOperation)op {
+    NSPasteboard *pboard = [info draggingPasteboard];
+    NSString *type = [pboard availableTypeFromArray:[NSArray 
arrayWithObjects:SKBookmarkRowsPboardType, nil]];
+    
+    if (type) {
+        int draggedRow = [[pboard 
propertyListForType:SKBookmarkRowsPboardType] intValue];
+        SKBookmark *bookmark = [[bookmarks objectAtIndex:draggedRow] retain];
+        [self removeObjectFromBookmarksAtIndex:draggedRow];
+        [self insertObject:bookmark inBookmarksAtIndex:row < draggedRow ? row 
: row - 1];
+        [bookmark release];
+        [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] 
byExtendingSelection:NO];
+        return YES;
+    }
     return NO;
 }
 
-- (id)transformedValue:(id)number {
-    return [NSNumber numberWithUnsignedInt:[number unsignedIntValue] + 1];
+#pragma mark NSTableView delegate methods
+
+- (NSString *)tableView:(NSTableView *)tv toolTipForCell:(NSCell *)cell 
rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tableColumn row:(int)row 
mouseLocation:(NSPoint)mouseLocation {
+    NSString *tcID = [tableColumn identifier];
+    SKBookmark *bookmark = [self objectInBookmarksAtIndex:row];
+    
+    if ([tcID isEqualToString:@"label"]) {
+        return [bookmark label];
+    } else if ([tcID isEqualToString:@"file"]) {
+        return [bookmark resolvedPath];
+    } else if ([tcID isEqualToString:@"page"]) {
+        return [[bookmark pageNumber] stringValue];
+    }
+    return nil;
 }
 
+- (void)tableView:(NSTableView *)aTableView deleteRowsWithIndexes:(NSIndexSet 
*)rowIndexes {
+    int row = [rowIndexes firstIndex];
+    [self removeObjectFromBookmarksAtIndex:row];
+}
+
+- (BOOL)tableView:(NSTableView *)aTableView 
canDeleteRowsWithIndexes:(NSIndexSet *)rowIndexes {
+    return YES;
+}
+
 @end
 
+#pragma mark -
 
[EMAIL PROTECTED] SKAliasDataTransformer
[EMAIL PROTECTED] SKBookmark
 
-+ (Class)transformedValueClass {
-    return [NSString class];
+- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel {
+    if (self = [super init]) {
+        path = [aPath copy];
+        aliasData = [aData copy];
+        pageIndex = aPageIndex;
+        label = [aLabel copy];
+    }
+    return self;
 }
 
-+ (BOOL)allowsReverseTransformation {
-    return NO;
+- (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel {
+    return [self initWithPath:aPath aliasData:[[BDAlias aliasWithPath:aPath] 
aliasData] pageIndex:aPageIndex label:aLabel];
 }
 
-- (id)transformedValue:(id)dictionary {
-    NSString *path = [[BDAlias aliasWithData:[dictionary 
valueForKey:@"_BDAlias"]] fullPathNoUI];
-    if (path == nil)
-        path = [dictionary valueForKey:@"path"];
-    return path;
+- (id)initWithDictionary:(NSDictionary *)dictionary {
+    return [self initWithPath:[dictionary objectForKey:@"path"] 
aliasData:[dictionary objectForKey:@"_BDAlias"] pageIndex:[[dictionary 
objectForKey:@"pageIndex"] unsignedIntValue] label:[dictionary 
objectForKey:@"label"]];
 }
 
+- (id)copyWithZone:(NSZone *)aZone {
+    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];
+    [super dealloc];
+}
+
+- (NSDictionary *)dictionaryValue {
+    return [NSDictionary dictionaryWithObjectsAndKeys:path, @"path", 
aliasData, @"_BDAlias", [NSNumber numberWithUnsignedInt:pageIndex], 
@"pageIndex", label, @"label", nil];
+}
+
+- (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;
+}
+
+- (unsigned int)pageIndex {
+    return pageIndex;
+}
+
+- (NSNumber *)pageNumber {
+    return [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];
+    }
+}
+
 @end

Modified: trunk/SKThumbnailTableView.h
===================================================================
--- trunk/SKThumbnailTableView.h        2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/SKThumbnailTableView.h        2007-08-20 18:21:29 UTC (rev 2689)
@@ -49,7 +49,6 @@
 
 
 @interface SKSnapshotTableView : SKThumbnailTableView
-- (BOOL)canDelete;
 @end
 
 
@@ -59,12 +58,6 @@
 @end
 
 
[EMAIL PROTECTED] NSObject (SKSnapshotTableViewDelegate)
-- (void)tableView:(NSTableView *)aTableView deleteRowsWithIndexes:(NSIndexSet 
*)rowIndexes;
-- (BOOL)tableView:(NSTableView *)aTableView 
canDeleteRowsWithIndexes:(NSIndexSet *)rowIndexes;
[EMAIL PROTECTED]
-
-
 @interface NSObject (SKThumbnailTableViewDelegate)
 - (NSArray *)tableViewHighlightedRows:(NSTableView *)tableView;
 - (BOOL)tableView:(NSTableView *)tableView commandSelectRow:(int)rowIndex;

Modified: trunk/SKThumbnailTableView.m
===================================================================
--- trunk/SKThumbnailTableView.m        2007-08-20 10:51:17 UTC (rev 2688)
+++ trunk/SKThumbnailTableView.m        2007-08-20 18:21:29 UTC (rev 2689)
@@ -176,38 +176,6 @@
 
 @implementation SKSnapshotTableView
 
-- (BOOL)canDelete {
-    NSIndexSet *indexes = [self selectedRowIndexes];
-    return [indexes count] && 
-           [[self delegate] 
respondsToSelector:@selector(tableView:canDeleteRowsWithIndexes:)] && 
-           [[self delegate] 
respondsToSelector:@selector(tableView:deleteRowsWithIndexes:)] && 
-           [[self delegate] tableView:self canDeleteRowsWithIndexes:indexes];
-}
-
-- (void)delete:(id)sender {
-    if ([self canDelete])
-        [[self delegate] tableView:self deleteRowsWithIndexes:[self 
selectedRowIndexes]];
-    else
-        NSBeep();
-}
-
-- (void)keyDown:(NSEvent *)theEvent {
-    NSString *characters = [theEvent charactersIgnoringModifiers];
-    unichar eventChar = [characters length] > 0 ? [characters 
characterAtIndex:0] : 0;
-       unsigned int modifiers = [theEvent modifierFlags] & 
NSDeviceIndependentModifierFlagsMask;
-    
-       if ((eventChar == NSDeleteCharacter || eventChar == 
NSDeleteFunctionKey) && modifiers == 0 && [self canDelete])
-        [self delete:self];
-       else
-               [super keyDown:theEvent];
-}
-
-- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
-    if ([menuItem action] == @selector(delete:))
-        return [self canDelete];
-    return [super validateMenuItem:menuItem];
-}
-
 @end
 
 #pragma mark -


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