Revision: 2923
http://skim-app.svn.sourceforge.net/skim-app/?rev=2923&view=rev
Author: hofman
Date: 2007-09-15 03:18:21 -0700 (Sat, 15 Sep 2007)
Log Message:
-----------
Add separator 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/SKApplicationController.m
trunk/SKBookmarkController.h
trunk/SKBookmarkController.m
Modified: trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib
===================================================================
--- trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib 2007-09-13 22:25:15 UTC
(rev 2922)
+++ trunk/Dutch.lproj/BookmarksWindow.nib/classes.nib 2007-09-15 10:18:21 UTC
(rev 2923)
@@ -1,15 +1,25 @@
{
IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ ACTIONS = {"" = id; };
+ CLASS = FirstResponder;
+ LANGUAGE = ObjC;
+ SUPERCLASS = NSObject;
+ },
{CLASS = NSObject; LANGUAGE = ObjC; },
{CLASS = SKBookmark; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
- ACTIONS = {insertBookmarkFolder = id; openBookmark = id; };
+ ACTIONS = {
+ doubleClickBookmark = id;
+ insertBookmarkFolder = id;
+ insertBookmarkSeparator = id;
+ };
CLASS = SKBookmarkController;
LANGUAGE = ObjC;
- OUTLETS = {outlineView = SKOutlineView; statusBar = SKStatusBar;
};
+ OUTLETS = {outlineView = SKBookmarkOutlineView; statusBar =
SKStatusBar; };
SUPERCLASS = NSWindowController;
},
+ {CLASS = SKBookmarkOutlineView; LANGUAGE = ObjC; SUPERCLASS =
SKOutlineView; },
{
ACTIONS = {
copy = id;
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-09-13 22:25:15 UTC
(rev 2922)
+++ trunk/English.lproj/BookmarksWindow.nib/classes.nib 2007-09-15 10:18:21 UTC
(rev 2923)
@@ -1,15 +1,25 @@
{
IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ ACTIONS = {"" = id; };
+ CLASS = FirstResponder;
+ LANGUAGE = ObjC;
+ SUPERCLASS = NSObject;
+ },
{CLASS = NSObject; LANGUAGE = ObjC; },
{CLASS = SKBookmark; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
- ACTIONS = {insertBookmarkFolder = id; openBookmark = id; };
+ ACTIONS = {
+ doubleClickBookmark = id;
+ insertBookmarkFolder = id;
+ insertBookmarkSeparator = id;
+ };
CLASS = SKBookmarkController;
LANGUAGE = ObjC;
- OUTLETS = {outlineView = SKOutlineView; statusBar = SKStatusBar;
};
+ OUTLETS = {outlineView = SKBookmarkOutlineView; statusBar =
SKStatusBar; };
SUPERCLASS = NSWindowController;
},
+ {CLASS = SKBookmarkOutlineView; LANGUAGE = ObjC; SUPERCLASS =
SKOutlineView; },
{
ACTIONS = {
copy = id;
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-09-13 22:25:15 UTC
(rev 2922)
+++ trunk/French.lproj/BookmarksWindow.nib/classes.nib 2007-09-15 10:18:21 UTC
(rev 2923)
@@ -1,15 +1,25 @@
{
IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ ACTIONS = {"" = id; };
+ CLASS = FirstResponder;
+ LANGUAGE = ObjC;
+ SUPERCLASS = NSObject;
+ },
{CLASS = NSObject; LANGUAGE = ObjC; },
{CLASS = SKBookmark; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
- ACTIONS = {insertBookmarkFolder = id; openBookmark = id; };
+ ACTIONS = {
+ doubleClickBookmark = id;
+ insertBookmarkFolder = id;
+ insertBookmarkSeparator = id;
+ };
CLASS = SKBookmarkController;
LANGUAGE = ObjC;
- OUTLETS = {outlineView = SKOutlineView; statusBar = SKStatusBar;
};
+ OUTLETS = {outlineView = SKBookmarkOutlineView; statusBar =
SKStatusBar; };
SUPERCLASS = NSWindowController;
},
+ {CLASS = SKBookmarkOutlineView; LANGUAGE = ObjC; SUPERCLASS =
SKOutlineView; },
{
ACTIONS = {
copy = id;
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-09-13 22:25:15 UTC
(rev 2922)
+++ trunk/Italian.lproj/BookmarksWindow.nib/classes.nib 2007-09-15 10:18:21 UTC
(rev 2923)
@@ -1,15 +1,25 @@
{
IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ ACTIONS = {"" = id; };
+ CLASS = FirstResponder;
+ LANGUAGE = ObjC;
+ SUPERCLASS = NSObject;
+ },
{CLASS = NSObject; LANGUAGE = ObjC; },
{CLASS = SKBookmark; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
- ACTIONS = {insertBookmarkFolder = id; openBookmark = id; };
+ ACTIONS = {
+ doubleClickBookmark = id;
+ insertBookmarkFolder = id;
+ insertBookmarkSeparator = id;
+ };
CLASS = SKBookmarkController;
LANGUAGE = ObjC;
- OUTLETS = {outlineView = SKOutlineView; statusBar = SKStatusBar;
};
+ OUTLETS = {outlineView = SKBookmarkOutlineView; statusBar =
SKStatusBar; };
SUPERCLASS = NSWindowController;
},
+ {CLASS = SKBookmarkOutlineView; LANGUAGE = ObjC; SUPERCLASS =
SKOutlineView; },
{
ACTIONS = {
copy = id;
Modified: trunk/Italian.lproj/BookmarksWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)
Modified: trunk/SKApplicationController.m
===================================================================
--- trunk/SKApplicationController.m 2007-09-13 22:25:15 UTC (rev 2922)
+++ trunk/SKApplicationController.m 2007-09-15 10:18:21 UTC (rev 2923)
@@ -249,6 +249,8 @@
[item setImage:[bm icon]];
[item setSubmenu:submenu];
[self addMenuItemsForBookmarks:[bm children] toMenu:submenu];
+ } else if ([bm bookmarkType] == SKBookmarkTypeSeparator) {
+ [menu addItem:[NSMenuItem separatorItem]];
} else {
NSMenuItem *item = [menu addItemWithTitle:[bm label]
action:@selector(openBookmark:) keyEquivalent:@""];
[item setTarget:self];
Modified: trunk/SKBookmarkController.h
===================================================================
--- trunk/SKBookmarkController.h 2007-09-13 22:25:15 UTC (rev 2922)
+++ trunk/SKBookmarkController.h 2007-09-15 10:18:21 UTC (rev 2923)
@@ -37,16 +37,18 @@
*/
#import <Cocoa/Cocoa.h>
+#import "SKOutlineView.h"
[EMAIL PROTECTED] SKOutlineView, SKStatusBar;
[EMAIL PROTECTED] SKBookmarkOutlineView, SKStatusBar;
enum {
SKBookmarkTypeBookmark,
- SKBookmarkTypeFolder
+ SKBookmarkTypeFolder,
+ SKBookmarkTypeSeparator
};
@interface SKBookmarkController : NSWindowController {
- IBOutlet SKOutlineView *outlineView;
+ IBOutlet SKBookmarkOutlineView *outlineView;
IBOutlet SKStatusBar *statusBar;
NSMutableArray *bookmarks;
NSMutableArray *recentDocuments;
@@ -72,6 +74,7 @@
- (IBAction)doubleClickBookmark:(id)sender;
- (IBAction)insertBookmarkFolder:(id)sender;
+- (IBAction)insertBookmarkSeparator:(id)sender;
- (NSArray *)recentDocuments;
- (void)addRecentDocumentForPath:(NSString *)path
pageIndex:(unsigned)pageIndex snapshots:(NSArray *)setups;
@@ -97,6 +100,7 @@
- (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;
@@ -123,3 +127,12 @@
- (BOOL)isDescendantOfArray:(NSArray *)bookmarks;
@end
+
+
[EMAIL PROTECTED] SKBookmarkOutlineView : SKOutlineView
[EMAIL PROTECTED]
+
+
[EMAIL PROTECTED] NSObject (SKBookmarkOutlineViewDelegate)
+- (BOOL)outlineView:(NSOutlineView *)anOutlineView
drawSeparatorRowForItem:(id)item;
[EMAIL PROTECTED]
Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m 2007-09-13 22:25:15 UTC (rev 2922)
+++ trunk/SKBookmarkController.m 2007-09-15 10:18:21 UTC (rev 2923)
@@ -376,6 +376,28 @@
[outlineView editColumn:0 row:row withEvent:nil select:YES];
}
+- (IBAction)insertBookmarkSeparator:(id)sender {
+ SKBookmark *separator = [[[SKBookmark alloc] initSeparator] autorelease];
+ int rowIndex = [[outlineView selectedRowIndexes] lastIndex];
+ SKBookmark *item = nil;
+ unsigned int index = [bookmarks count];
+
+ if (rowIndex != NSNotFound) {
+ SKBookmark *selectedItem = [outlineView itemAtRow:rowIndex];
+ if ([outlineView isItemExpanded:selectedItem]) {
+ item = selectedItem;
+ index = [[item children] count];
+ } else {
+ item = [selectedItem parent];
+ index = [self indexOfChildBookmark:selectedItem] + 1;
+ }
+ }
+ [self bookmark:item insertChildBookmark:separator atIndex:index];
+
+ int row = [outlineView rowForItem:separator];
+ [outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:row]
byExtendingSelection:NO];
+}
+
#pragma mark Undo support
- (NSUndoManager *)undoManager {
@@ -417,6 +439,8 @@
- (void)outlineView:(NSOutlineView *)ov setObjectValue:(id)object
forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
NSString *tcID = [tableColumn identifier];
if ([tcID isEqualToString:@"label"]) {
+ if (object == nil)
+ object = @"";
if ([object isEqualToString:[item label]] == NO)
[item setLabel:object];
}
@@ -475,6 +499,10 @@
#pragma mark NSOutlineView delegate methods
+- (BOOL)outlineView:(NSOutlineView *)ov shouldEditTableColumn:(NSTableColumn
*)tableColumn item:(id)item {
+ return [[tableColumn identifier] isEqualToString:@"label"] && [item
bookmarkType] != SKBookmarkTypeSeparator;
+}
+
- (NSString *)outlineView:(NSOutlineView *)ov toolTipForCell:(NSCell *)cell
rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tc item:(id)item
mouseLocation:(NSPoint)mouseLocation {
NSString *tcID = [tc identifier];
@@ -499,6 +527,10 @@
return [items count] > 0;
}
+- (BOOL)outlineView:(NSOutlineView *)ov drawSeparatorRowForItem:(id)item {
+ return [item bookmarkType] == SKBookmarkTypeSeparator;
+}
+
#pragma mark SKTypeSelectHelper datasource protocol
- (NSArray *)typeSelectHelperSelectionItems:(SKTypeSelectHelper
*)typeSelectHelper {
@@ -593,6 +625,18 @@
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];
@@ -601,6 +645,8 @@
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"]];
}
@@ -609,6 +655,8 @@
- (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];
}
@@ -625,6 +673,8 @@
- (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];
}
@@ -632,6 +682,8 @@
- (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];
}
@@ -658,6 +710,8 @@
- (NSImage *)icon {
if ([self bookmarkType] == SKBookmarkTypeFolder)
return [NSImage imageNamed:@"SmallFolder"];
+ else if (bookmarkType == SKBookmarkTypeSeparator)
+ return nil;
else
return [[self class] smallImageForFile:[self resolvedPath]];
}
@@ -739,3 +793,24 @@
}
@end
+
+#pragma mark -
+
[EMAIL PROTECTED] SKBookmarkOutlineView
+
+#define SEPARATOR_LEFT_INDENT 8.0
+#define SEPARATOR_RIGHT_INDENT 2.0
+
+- (void)drawRow:(int)rowIndex clipRect:(NSRect)clipRect {
+ if ([[self delegate]
respondsToSelector:@selector(outlineView:drawSeparatorRowForItem:)] &&
+ [[self delegate] outlineView:self drawSeparatorRowForItem:[self
itemAtRow:rowIndex]]) {
+ float indent = [self levelForItem:[self itemAtRow:rowIndex]] * [self
indentationPerLevel];
+ NSRect rect = [self rectOfRow:rowIndex];
+ [[NSColor gridColor] setStroke];
+ [NSBezierPath strokeLineFromPoint:NSMakePoint(NSMinX(rect) + indent +
SEPARATOR_LEFT_INDENT, floorf(NSMidY(rect)) + 0.5)
toPoint:NSMakePoint(NSMaxX(rect) - SEPARATOR_RIGHT_INDENT, floorf(NSMidY(rect))
+ 0.5)];
+ } else {
+ [super drawRow:rowIndex clipRect:clipRect];
+ }
+}
+
[EMAIL PROTECTED]
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