aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPTableView.m
diff options
context:
space:
mode:
authorstuconnolly <stuart02@gmail.com>2010-10-15 13:30:37 +0000
committerstuconnolly <stuart02@gmail.com>2010-10-15 13:30:37 +0000
commit60c5717869cdd6f68355f720b63a6df1bb7c87c6 (patch)
treea14845b63e78468da37ced37212a367de7670a20 /Source/SPTableView.m
parent067ad13b4b78a6477687ede0da89e288cff69ba0 (diff)
downloadsequelpro-60c5717869cdd6f68355f720b63a6df1bb7c87c6.tar.gz
sequelpro-60c5717869cdd6f68355f720b63a6df1bb7c87c6.tar.bz2
sequelpro-60c5717869cdd6f68355f720b63a6df1bb7c87c6.zip
Change the connection view's table view to be of type SPTableView so right-clicking a row results in it being selected first. Also, update SPTableView to prevent right-clicking of table view group headings. Fixes issue #867.
Diffstat (limited to 'Source/SPTableView.m')
-rw-r--r--Source/SPTableView.m82
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