diff options
Diffstat (limited to 'Source/SPNavigatorController.m')
-rw-r--r-- | Source/SPNavigatorController.m | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/Source/SPNavigatorController.m b/Source/SPNavigatorController.m index 6295058c..64e54053 100644 --- a/Source/SPNavigatorController.m +++ b/Source/SPNavigatorController.m @@ -82,6 +82,7 @@ static SPNavigatorController *sharedNavigatorController = nil; - (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; if(schemaData) [schemaData release]; if(schemaDataUnFiltered) [schemaDataUnFiltered release]; if(infoArray) [infoArray release]; @@ -117,6 +118,9 @@ static SPNavigatorController *sharedNavigatorController = nil; [outlineSchema2 setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES]; [outlineSchema2 setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateNavigator:) + name:@"SPDBStructureWasUpdated" object:nil]; + } - (NSString *)windowFrameAutosaveName @@ -285,7 +289,9 @@ static SPNavigatorController *sharedNavigatorController = nil; if(schemaData && [schemaData objectForKey:connectionID]) { NSInteger docCounter = 0; - + + // Detect if more than one connection windows with the connectionID are open. + // If so, don't remove it. if ([[[NSDocumentController sharedDocumentController] documents] count]) { for(id doc in [[NSDocumentController sharedDocumentController] documents]) { if(![[doc valueForKeyPath:@"mySQLConnection"] isConnected]) continue; @@ -342,10 +348,17 @@ static SPNavigatorController *sharedNavigatorController = nil; } } -#pragma mark - -#pragma mark IBActions +- (void)updateNavigator:(NSNotification *)aNotification +{ + id object = [aNotification object]; + + if([object isKindOfClass:[TableDocument class]]) + [self performSelectorOnMainThread:@selector(updateEntriesForConnection:) withObject:[object connectionID] waitUntilDone:YES]; + else + [self performSelectorOnMainThread:@selector(updateEntriesForConnection:) withObject:nil waitUntilDone:YES]; +} -- (IBAction)updateEntries:(id)sender; +- (void)updateEntriesForConnection:(NSString*)connectionID { if(ignoreUpdate) { @@ -356,7 +369,10 @@ static SPNavigatorController *sharedNavigatorController = nil; [self saveSelectedItems]; [infoArray removeAllObjects]; - [schemaData removeAllObjects]; + if(connectionID) + [schemaData removeObjectForKey:connectionID]; + else + [schemaData removeAllObjects]; [outlineSchema1 reloadData]; [outlineSchema2 reloadData]; @@ -364,19 +380,21 @@ static SPNavigatorController *sharedNavigatorController = nil; if ([[[NSDocumentController sharedDocumentController] documents] count]) { for(id doc in [[NSDocumentController sharedDocumentController] documents]) { - if(![[doc valueForKeyPath:@"mySQLConnection"] isConnected]) continue; + id theConnection = [doc valueForKeyPath:@"mySQLConnection"]; + + if(!theConnection || ![theConnection isConnected]) continue; NSString *connectionName = [doc connectionID]; - if(!connectionName || [connectionName isEqualToString:@"_"]) continue; + if(!connectionName || [connectionName isEqualToString:@"_"] || (connectionID && ![connectionName isEqualToString:connectionID]) ) continue; if(![schemaData objectForKey:connectionName]) { - if([[doc valueForKeyPath:@"mySQLConnection"] getDbStructure] && [[[doc valueForKeyPath:@"mySQLConnection"] getDbStructure] objectForKey:connectionName]) { - [schemaData setObject:[[[doc valueForKeyPath:@"mySQLConnection"] getDbStructure] objectForKey:connectionName] forKey:connectionName]; + if([theConnection getDbStructure] && [[theConnection getDbStructure] objectForKey:connectionName]) { + [schemaData setObject:[[theConnection getDbStructure] objectForKey:connectionName] forKey:connectionName]; } else { - if([[doc valueForKeyPath:@"mySQLConnection"] serverMajorVersion] > 4) { + if([theConnection serverMajorVersion] > 4) { [schemaData setObject:[NSDictionary dictionary] forKey:[NSString stringWithFormat:@"%@&DEL&no data loaded yet", connectionName]]; } else { [schemaData setObject:[NSDictionary dictionary] forKey:[NSString stringWithFormat:@"%@&DEL&no data for this server version", connectionName]]; @@ -391,7 +409,6 @@ static SPNavigatorController *sharedNavigatorController = nil; [self restoreExpandStatus]; [self restoreSelectedItems]; - } [self syncButtonAction:self]; @@ -399,6 +416,10 @@ static SPNavigatorController *sharedNavigatorController = nil; } +#pragma mark - +#pragma mark IBActions + + - (IBAction)reloadAllStructures:(id)sender { @@ -793,7 +814,7 @@ static SPNavigatorController *sharedNavigatorController = nil; - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row { // Use first row as dummy to increase the distance between content and header - return (row == 0) ? 5.0 : 15; //[tableView rowHeight]; + return (row == 0) ? 5.0 : 16.0; } - (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex |