From 6a4fab961e1efd1f8eb55aa2806f17cde027f36c Mon Sep 17 00:00:00 2001 From: Bibiko Date: Thu, 25 Nov 2010 09:00:02 +0000 Subject: =?UTF-8?q?=E2=80=A2=20further=20work=20on=20Bundle=20Editor's=20o?= =?UTF-8?q?utline=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SPOutlineView.m | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'Source/SPOutlineView.m') 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]; } -- cgit v1.2.3