Revision: 15156
          http://bibdesk.svn.sourceforge.net/bibdesk/?rev=15156&view=rev
Author:   hofman
Date:     2009-04-22 17:47:14 +0000 (Wed, 22 Apr 2009)

Log Message:
-----------
implement context menu delegate method for group outlineview

Modified Paths:
--------------
    trunk/bibdesk/BibDocument_DataSource.m

Modified: trunk/bibdesk/BibDocument_DataSource.m
===================================================================
--- trunk/bibdesk/BibDocument_DataSource.m      2009-04-22 16:39:43 UTC (rev 
15155)
+++ trunk/bibdesk/BibDocument_DataSource.m      2009-04-22 17:47:14 UTC (rev 
15156)
@@ -253,105 +253,97 @@
 }
 
 - (NSMenu *)tableView:(NSTableView *)tv menuForTableColumn:(NSTableColumn 
*)tableColumn row:(NSInteger)row {
+       if (tv != tableView || tableColumn == nil || row == -1) 
+               return nil;
     
     // autorelease when creating an instance, since there are multiple exit 
points from this method
        NSMenu *menu = nil;
     NSMenuItem *item = nil;
+    NSString *tcId = [tableColumn identifier];
+    NSArray *linkedURLs;
+    NSURL *theURL;
     
-       if (tableColumn == nil || row == -1) 
-               return nil;
-       
-       if (tv == tableView) {
-               
-               NSString *tcId = [tableColumn identifier];
-        NSArray *linkedURLs;
-        NSURL *theURL;
-        
-               if([tcId isURLField] || [tcId 
isEqualToString:BDSKLocalFileString] || [tcId 
isEqualToString:BDSKRemoteURLString]){
-            menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] 
autorelease];
-            if([tcId isURLField]){
-                if([tcId isLocalFileField]){
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Open 
Linked File", @"Menu item title") action:@selector(openLocalURL:) 
keyEquivalent:@""];
+    if([tcId isURLField] || [tcId isEqualToString:BDSKLocalFileString] || 
[tcId isEqualToString:BDSKRemoteURLString]){
+        menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] autorelease];
+        if([tcId isURLField]){
+            if([tcId isLocalFileField]){
+                item = [menu addItemWithTitle:NSLocalizedString(@"Open Linked 
File", @"Menu item title") action:@selector(openLocalURL:) keyEquivalent:@""];
+                [item setTarget:self];
+                [item setRepresentedObject:tcId];
+                item = [menu addItemWithTitle:NSLocalizedString(@"Reveal 
Linked File in Finder", @"Menu item title") action:@selector(revealLocalURL:) 
keyEquivalent:@""];
+                [item setTarget:self];
+                [item setRepresentedObject:tcId];
+                item = [menu addItemWithTitle:NSLocalizedString(@"Show Skim 
Notes For Linked File", @"Menu item title") 
action:@selector(showNotesForLocalURL:) keyEquivalent:@""];
+                [item setTarget:self];
+                [item setRepresentedObject:tcId];
+                item = [menu addItemWithTitle:NSLocalizedString(@"Copy Skim 
Notes For Linked File", @"Menu item title") 
action:@selector(copyNotesForLocalURL:) keyEquivalent:@""];
+                [item setTarget:self];
+                [item setRepresentedObject:tcId];
+            }else{
+                item = [menu addItemWithTitle:NSLocalizedString(@"Open URL in 
Browser", @"Menu item title") action:@selector(openRemoteURL:) 
keyEquivalent:@""];
+                [item setTarget:self];
+                [item setRepresentedObject:tcId];
+            }
+            if([tableView numberOfSelectedRows] == 1 &&
+               (theURL = [[shownPublications objectAtIndex:row] 
URLForField:tcId])){
+                item = [menu insertItemWithTitle:NSLocalizedString(@"Open 
With", @"Menu item title") 
+                                    andSubmenuOfApplicationsForURL:theURL 
atIndex:1];
+            }
+        }else if([tcId isEqualToString:BDSKLocalFileString]){
+            linkedURLs = [self selectedFileURLs];
+            
+            if([linkedURLs count]){
+                if([linkedURLs count] == 1){
+                    item = [menu addItemWithTitle:NSLocalizedString(@"Quick 
Look", @"Menu item title") action:@selector(previewAction:) keyEquivalent:@""];
                     [item setTarget:self];
-                    [item setRepresentedObject:tcId];
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Reveal 
Linked File in Finder", @"Menu item title") action:@selector(revealLocalURL:) 
keyEquivalent:@""];
-                    [item setTarget:self];
-                    [item setRepresentedObject:tcId];
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Show 
Skim Notes For Linked File", @"Menu item title") 
action:@selector(showNotesForLocalURL:) keyEquivalent:@""];
-                    [item setTarget:self];
-                    [item setRepresentedObject:tcId];
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Copy 
Skim Notes For Linked File", @"Menu item title") 
action:@selector(copyNotesForLocalURL:) keyEquivalent:@""];
-                    [item setTarget:self];
-                    [item setRepresentedObject:tcId];
-                }else{
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Open URL 
in Browser", @"Menu item title") action:@selector(openRemoteURL:) 
keyEquivalent:@""];
-                    [item setTarget:self];
-                    [item setRepresentedObject:tcId];
+                    [item setRepresentedObject:linkedURLs];
                 }
-                if([tableView numberOfSelectedRows] == 1 &&
-                   (theURL = [[shownPublications objectAtIndex:row] 
URLForField:tcId])){
+                item = [menu addItemWithTitle:NSLocalizedString(@"Open Linked 
Files", @"Menu item title") action:@selector(openLinkedFile:) 
keyEquivalent:@""];
+                [item setTarget:self];
+                item = [menu addItemWithTitle:NSLocalizedString(@"Reveal 
Linked Files in Finder", @"Menu item title") 
action:@selector(revealLinkedFile:) keyEquivalent:@""];
+                [item setTarget:self];
+                item = [menu addItemWithTitle:NSLocalizedString(@"Show Skim 
Notes For Linked Files", @"Menu item title") 
action:@selector(showNotesForLinkedFile:) keyEquivalent:@""];
+                [item setTarget:self];
+                item = [menu addItemWithTitle:NSLocalizedString(@"Copy Skim 
Notes For Linked Files", @"Menu item title") 
action:@selector(copyNotesForLinkedFile:) keyEquivalent:@""];
+                [item setTarget:self];
+                if([linkedURLs count] == 1 && (theURL = [linkedURLs 
lastObject]) && [theURL isEqual:[NSNull null]] == NO){
                     item = [menu insertItemWithTitle:NSLocalizedString(@"Open 
With", @"Menu item title") 
                                         andSubmenuOfApplicationsForURL:theURL 
atIndex:1];
                 }
-            }else if([tcId isEqualToString:BDSKLocalFileString]){
-                linkedURLs = [self selectedFileURLs];
-                
-                if([linkedURLs count]){
-                    if([linkedURLs count] == 1){
-                        item = [menu 
addItemWithTitle:NSLocalizedString(@"Quick Look", @"Menu item title") 
action:@selector(previewAction:) keyEquivalent:@""];
-                        [item setTarget:self];
-                        [item setRepresentedObject:linkedURLs];
-                    }
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Open 
Linked Files", @"Menu item title") action:@selector(openLinkedFile:) 
keyEquivalent:@""];
+            }
+        }else if([tcId isEqualToString:BDSKRemoteURLString]){
+            linkedURLs = [[self selectedPublications] 
valueForKeyPath:@"@unionOfArrays.remoteURLs.URL"];
+            
+            if([linkedURLs count]){
+                menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] 
autorelease];
+                if([linkedURLs count] == 1){
+                    item = [menu addItemWithTitle:NSLocalizedString(@"Quick 
Look", @"Menu item title") action:@selector(previewAction:) keyEquivalent:@""];
                     [item setTarget:self];
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Reveal 
Linked Files in Finder", @"Menu item title") 
action:@selector(revealLinkedFile:) keyEquivalent:@""];
-                    [item setTarget:self];
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Show 
Skim Notes For Linked Files", @"Menu item title") 
action:@selector(showNotesForLinkedFile:) keyEquivalent:@""];
-                    [item setTarget:self];
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Copy 
Skim Notes For Linked Files", @"Menu item title") 
action:@selector(copyNotesForLinkedFile:) keyEquivalent:@""];
-                    [item setTarget:self];
-                    if([linkedURLs count] == 1 && (theURL = [linkedURLs 
lastObject]) && [theURL isEqual:[NSNull null]] == NO){
-                        item = [menu 
insertItemWithTitle:NSLocalizedString(@"Open With", @"Menu item title") 
-                                            
andSubmenuOfApplicationsForURL:theURL atIndex:1];
-                    }
+                    [item setRepresentedObject:linkedURLs];
                 }
-            }else if([tcId isEqualToString:BDSKRemoteURLString]){
-                linkedURLs = [[self selectedPublications] 
valueForKeyPath:@"@unionOfArrays.remoteURLs.URL"];
-                
-                if([linkedURLs count]){
-                    menu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] 
autorelease];
-                    if([linkedURLs count] == 1){
-                        item = [menu 
addItemWithTitle:NSLocalizedString(@"Quick Look", @"Menu item title") 
action:@selector(previewAction:) keyEquivalent:@""];
-                        [item setTarget:self];
-                        [item setRepresentedObject:linkedURLs];
-                    }
-                    item = [menu addItemWithTitle:NSLocalizedString(@"Open 
URLs in Browser", @"Menu item title") action:@selector(openLinkedURL:) 
keyEquivalent:@""];
-                    [item setTarget:self];
-                    if([linkedURLs count] == 1 && (theURL = [linkedURLs 
lastObject]) && [theURL isEqual:[NSNull null]] == NO){
-                        item = [menu 
insertItemWithTitle:NSLocalizedString(@"Open With", @"Menu item title") 
-                                            
andSubmenuOfApplicationsForURL:theURL atIndex:1];
-                    }
+                item = [menu addItemWithTitle:NSLocalizedString(@"Open URLs in 
Browser", @"Menu item title") action:@selector(openLinkedURL:) 
keyEquivalent:@""];
+                [item setTarget:self];
+                if([linkedURLs count] == 1 && (theURL = [linkedURLs 
lastObject]) && [theURL isEqual:[NSNull null]] == NO){
+                    item = [menu insertItemWithTitle:NSLocalizedString(@"Open 
With", @"Menu item title") 
+                                        andSubmenuOfApplicationsForURL:theURL 
atIndex:1];
                 }
             }
-            [menu addItem:[NSMenuItem separatorItem]];
-            item = [menu addItemWithTitle:NSLocalizedString(@"Get Info", 
@"Menu item title") action:@selector(editPubCmd:) keyEquivalent:@""];
-            [item setTarget:self];
-            item = [menu addItemWithTitle:NSLocalizedString(@"Remove", @"Menu 
item title") action:@selector(removeSelectedPubs:) keyEquivalent:@""];
-            [item setTarget:self];
-            item = [menu addItemWithTitle:NSLocalizedString(@"Delete", @"Menu 
item title") action:@selector(deleteSelectedPubs:) keyEquivalent:@""];
-            [item setTarget:self];
-            [item setKeyEquivalentModifierMask:NSAlternateKeyMask];
-            [item setAlternate:YES];
-               }else{
-            [self menuNeedsUpdate:copyAsMenu];
-                       menu = [[actionMenu copyWithZone:[NSMenu menuZone]] 
autorelease];
-            [menu removeItemAtIndex:0];
-               }
-               
-       } else {
-               return nil;
-       }
-       
+        }
+        [menu addItem:[NSMenuItem separatorItem]];
+        item = [menu addItemWithTitle:NSLocalizedString(@"Get Info", @"Menu 
item title") action:@selector(editPubCmd:) keyEquivalent:@""];
+        [item setTarget:self];
+        item = [menu addItemWithTitle:NSLocalizedString(@"Remove", @"Menu item 
title") action:@selector(removeSelectedPubs:) keyEquivalent:@""];
+        [item setTarget:self];
+        item = [menu addItemWithTitle:NSLocalizedString(@"Delete", @"Menu item 
title") action:@selector(deleteSelectedPubs:) keyEquivalent:@""];
+        [item setTarget:self];
+        [item setKeyEquivalentModifierMask:NSAlternateKeyMask];
+        [item setAlternate:YES];
+    }else{
+        [self menuNeedsUpdate:copyAsMenu];
+        menu = [[actionMenu copyWithZone:[NSMenu menuZone]] autorelease];
+        [menu removeItemAtIndex:0];
+    }
+    
        // kick out every item we won't need:
        NSInteger i = [menu numberOfItems];
     BOOL wasSeparator = YES;
@@ -363,13 +355,10 @@
         else
             wasSeparator = [item isSeparatorItem];
        }
-       while([menu numberOfItems] > 0 && [(NSMenuItem*)[menu itemAtIndex:0] 
isSeparatorItem])  
+       while ([menu numberOfItems] > 0 && [(NSMenuItem*)[menu itemAtIndex:0] 
isSeparatorItem]) 
                [menu removeItemAtIndex:0];
        
-       if([menu numberOfItems] == 0)
-               return nil;
-       
-       return menu;
+       return [menu numberOfItems] ? menu : nil;
 }
 
 - (NSColor *)tableView:(NSTableView *)tv highlightColorForRow:(NSInteger)row {
@@ -1282,6 +1271,30 @@
     docState.didImport = NO;
 }
 
+- (NSMenu *)outlineView:(NSOutlineView *)ov menuForTableColumn:(NSTableColumn 
*)tableColumn item:(id)item {
+       if (ov != groupOutlineView || tableColumn == nil || item == nil) 
+               return nil;
+               
+    NSMenu *menu = [[groupMenu copyWithZone:[NSMenu menuZone]] autorelease];
+    [menu removeItemAtIndex:0];
+    
+       // kick out every item we won't need:
+       NSInteger i = [menu numberOfItems];
+    BOOL wasSeparator = YES;
+       
+       while (--i >= 0) {
+               NSMenuItem *menuItem = (NSMenuItem*)[menu itemAtIndex:i];
+               if ([self validateMenuItem:item] == NO || ((wasSeparator || i 
== 0) && [item isSeparatorItem]) || ([item submenu] && 
menuHasNoValidItems(self, [item submenu])))
+                       [menu removeItem:item];
+        else
+            wasSeparator = [item isSeparatorItem];
+       }
+       while ([menu numberOfItems] > 0 && [(NSMenuItem*)[menu itemAtIndex:0] 
isSeparatorItem]) 
+               [menu removeItemAtIndex:0];
+       
+       return [menu numberOfItems] ? menu : nil;
+}
+
 - (NSIndexSet *)outlineView:(BDSKGroupOutlineView *)outlineView 
indexesOfRowsToHighlightInRange:(NSRange)indexRange {
     if([self numberOfSelectedPubs] == 0 || [self hasExternalGroupsSelected] == 
YES)
         return [NSIndexSet indexSet];


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to