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
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit