aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPOutlineView.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPOutlineView.m')
-rw-r--r--Source/SPOutlineView.m58
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];
}