diff options
Diffstat (limited to 'Source/SPTableView.m')
-rw-r--r-- | Source/SPTableView.m | 82 |
1 files changed, 44 insertions, 38 deletions
diff --git a/Source/SPTableView.m b/Source/SPTableView.m index aa0b5067..b8590a9a 100644 --- a/Source/SPTableView.m +++ b/Source/SPTableView.m @@ -30,46 +30,46 @@ @implementation SPTableView -/* +/** * Right-click at row will select that row before ordering out the contextual menu - * if not more than one row is selected + * if not more than one row is selected. */ - (NSMenu *)menuForEvent:(NSEvent *)event { - // Try to retrieve a reference to the table document (assuming this is frontmost tab) SPDatabaseDocument *parentTableDocument = nil; + if ([[[[[self window] delegate] class] description] isEqualToString:@"SPWindowController"]) { parentTableDocument = [[[self window] delegate] selectedTableDocument]; } // If SPDatabaseDocument is performing a task suppress any context menu - if (parentTableDocument && [parentTableDocument isWorking]) - return nil; + if (parentTableDocument && [parentTableDocument isWorking]) return nil; // Check to see whether any edits-in-progress need to be saved before changing selections - if (parentTableDocument && ![parentTableDocument couldCommitCurrentViewActions]) - return nil; + if (parentTableDocument && ![parentTableDocument couldCommitCurrentViewActions]) return nil; // If more than one row is selected only returns the default contextual menu - if([self numberOfSelectedRows] > 1) - return [self 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]) { + + if (row >= 0 && row < [self numberOfRows]) { // Check for SPTablesList if right-click on header, then suppress context menu - if([[[[self delegate] class] description] isEqualToString:@"SPTablesList"]) { - if([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"tableTypes"], row) integerValue] == -1) + if ([[[[self delegate] class] description] isEqualToString:@"SPTablesList"]) { + if ([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"tableTypes"], row) integerValue] == -1) return nil; } - if([[[[self delegate] class] description] isEqualToString:@"SPQueryFavoriteManager"]) { - if([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:SPFavorites], row) objectForKey:@"headerOfFileURL"]) + + if ([[[[self delegate] class] description] isEqualToString:@"SPQueryFavoriteManager"]) { + if ([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:SPFavorites], row) objectForKey:@"headerOfFileURL"]) return nil; } - if([[[[self delegate] class] description] isEqualToString:@"SPContentFilterManager"]) { - if([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"contentFilters"], row) objectForKey:@"headerOfFileURL"]) + + if ([[[[self delegate] class] description] isEqualToString:@"SPContentFilterManager"]) { + if ([NSArrayObjectAtIndex([[self delegate] valueForKeyPath:@"contentFilters"], row) objectForKey:@"headerOfFileURL"]) return nil; } @@ -80,33 +80,32 @@ return [self menu]; } --(BOOL)acceptsFirstResponder +- (BOOL)acceptsFirstResponder { return YES; } - (void)keyDown:(NSEvent *)theEvent { - // Check if ENTER or RETURN is hit and edit the column. - if ([self numberOfSelectedRows] == 1 && ([theEvent keyCode] == 36 || [theEvent keyCode] == 76)) - { - - if([[[[self delegate] class] description] isEqualToString:@"SPFieldMapperController"]) { + if ([self numberOfSelectedRows] == 1 && ([theEvent keyCode] == 36 || [theEvent keyCode] == 76)) { - if([[self delegate] isGlobalValueSheetOpen]) { + if ([[[[self delegate] class] description] isEqualToString:@"SPFieldMapperController"]) { + if ([[self delegate] isGlobalValueSheetOpen]) { [[self delegate] closeGlobalValuesSheet:nil]; return; } // ENTER or RETURN closes the SPFieldMapperController sheet // by sending an object with the tag 1 if no table cell is edited - if([[self delegate] canBeClosed]) { + if ([[self delegate] canBeClosed]) { NSButton *b = [[[NSButton alloc] init] autorelease]; [b setTag:1]; [[self delegate] closeSheet:b]; + return; - } else { + } + else { [super keyDown:theEvent]; return; } @@ -114,38 +113,45 @@ } if (![[[[self delegate] class] description] isEqualToString:@"SPCustomQuery"] && - ![[[[self delegate] class] description] isEqualToString:@"SPQueryFavoriteManager"]){ + ![[[[self delegate] class] description] isEqualToString:@"SPQueryFavoriteManager"]) { // Ensure that editing is permitted - if (![[self delegate] tableView:self shouldEditTableColumn:[[self tableColumns] objectAtIndex:0] row:[self selectedRow]]) - return; + if (![[self delegate] tableView:self shouldEditTableColumn:[[self tableColumns] objectAtIndex:0] row:[self selectedRow]]) return; // Trigger a cell edit [self editColumn:0 row:[self selectedRow] withEvent:nil select:YES]; + return; } - } - // Check if ESCAPE is hit and use it to cancel row editing if supported - else if ([theEvent keyCode] == 53 && [[self delegate] respondsToSelector:@selector(cancelRowEditing)]) - { + else if ([theEvent keyCode] == 53 && [[self delegate] respondsToSelector:@selector(cancelRowEditing)]) { if ([[self delegate] cancelRowEditing]) return; } [super keyDown:theEvent]; +} +/** + * To prevent right-clicking in a column's 'group' heading, ask the delegate if we support selecting it + * as this normally doesn't apply to left-clicks. If we do support selecting this row, simply pass on the event. + */ +- (void)rightMouseDown:(NSEvent *)event +{ + if ([[self delegate] tableView:self shouldSelectRow:[self rowAtPoint:[self convertPoint:[event locationInWindow] fromView:nil]]]) { + [super rightMouseDown:event]; + } } - (void)setFont:(NSFont *)font; { - NSArray *tableColumns; - NSUInteger columnIndex; - - tableColumns = [self tableColumns]; - columnIndex = [tableColumns count]; - while (columnIndex--) + NSArray *tableColumns = [self tableColumns]; + NSUInteger columnIndex = [tableColumns count]; + + while (columnIndex--) + { [[(NSTableColumn *)[tableColumns objectAtIndex:columnIndex] dataCell] setFont:font]; + } } @end |