diff options
Diffstat (limited to 'Source/SPOutlineView.m')
-rw-r--r-- | Source/SPOutlineView.m | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Source/SPOutlineView.m b/Source/SPOutlineView.m index f60807f3..1cf5055a 100644 --- a/Source/SPOutlineView.m +++ b/Source/SPOutlineView.m @@ -26,6 +26,55 @@ @implementation SPOutlineView +- (id)init +{ + if(self = [super init]){ + ; + } + return self; +} + +/** + * Right-click at row will select that row before ordering out the contextual menu + * if not more than one row is selected. + */ +- (NSMenu *)menuForEvent:(NSEvent *)event +{ + + // Check for SPBundleEditorController if right-click on expamdable item, then suppress context menu + if ([[[[self delegate] class] description] isEqualToString:@"SPBundleEditorController"]) { + + // If more than one row is selected only returns the default contextual menu + if ([self numberOfSelectedRows] > 1) return nil; + + // Right-click at a row will select that row before ordering out the context menu + NSInteger row = [self rowAtPoint:[self convertPoint:[event locationInWindow] fromView:nil]]; + + if (row >= 0 && row < [self numberOfRows]) { + [self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO]; + [[self window] makeFirstResponder:self]; + } + + if (![[self itemAtRow:[self selectedRow]] isLeaf]) + return nil; + return [self menu]; + } + + + // If more than one row is selected only returns the default contextual menu + if ([self numberOfSelectedRows] > 1) return [self menu]; + + // Right-click at a row will select that row before ordering out the context menu + NSInteger row = [self rowAtPoint:[self convertPoint:[event locationInWindow] fromView:nil]]; + + if (row >= 0 && row < [self numberOfRows]) { + [self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO]; + [[self window] makeFirstResponder:self]; + } + + return [self menu]; +} + - (BOOL)acceptsFirstResponder { return YES; @@ -33,7 +82,16 @@ - (void)keyDown:(NSEvent *)theEvent { + if ([self numberOfSelectedRows] == 1 && ([theEvent keyCode] == 36 || [theEvent keyCode] == 76)) { + if ([[[[self delegate] class] description] isEqualToString:@"SPBundleEditorController"]) { + if([[self delegate] respondsToSelector:@selector(outlineView:shouldEditTableColumn:item:)] && + [[self delegate] outlineView:self shouldEditTableColumn:[self tableColumnWithIdentifier:@"bundleName"] item:[self itemAtRow:[self selectedRow]]] + ) + [self editColumn:0 row:[self selectedRow] withEvent:nil select:YES]; + else + return; + } [self editColumn:0 row:[self selectedRow] withEvent:nil select:YES]; } |