aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/SPNavigatorController.h4
-rw-r--r--Source/SPNavigatorController.m45
-rw-r--r--Source/TableDocument.h1
-rw-r--r--Source/TableDocument.m12
4 files changed, 36 insertions, 26 deletions
diff --git a/Source/SPNavigatorController.h b/Source/SPNavigatorController.h
index 09507464..94e8b6a3 100644
--- a/Source/SPNavigatorController.h
+++ b/Source/SPNavigatorController.h
@@ -57,13 +57,13 @@
+ (SPNavigatorController *)sharedNavigatorController;
- (IBAction)outlineViewAction:(id)sender;
-- (IBAction)updateEntries:(id)sender;
- (IBAction)reloadAllStructures:(id)sender;
- (IBAction)filterTree:(id)sender;
- (IBAction)syncButtonAction:(id)sender;
+- (void)updateEntriesForConnection:(NSString*)connectionID;
- (NSString*)tableInfoLabelForIndex:(NSInteger)index ofType:(NSInteger)type;
-
+- (void)updateNavigator:(NSNotification *)aNotification;
- (void)restoreSelectedItems;
- (void)setIgnoreUpdate:(BOOL)flag;
- (void)selectPath:(NSString*)schemaPath;
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
diff --git a/Source/TableDocument.h b/Source/TableDocument.h
index 5178ef56..18b8be2a 100644
--- a/Source/TableDocument.h
+++ b/Source/TableDocument.h
@@ -251,7 +251,6 @@
- (void)showConsole:(id)sender;
- (IBAction)showNavigator:(id)sender;
- (IBAction)toggleNavigator:(id)sender;
-- (void)updateNavigator:(id)sender;
// Accessor methods
- (NSString *)host;
diff --git a/Source/TableDocument.m b/Source/TableDocument.m
index 949f2a68..0a68eda2 100644
--- a/Source/TableDocument.m
+++ b/Source/TableDocument.m
@@ -1148,7 +1148,7 @@
BOOL isNavigatorVisible = [[[SPNavigatorController sharedNavigatorController] window] isVisible];
if(!isNavigatorVisible) {
- [[SPNavigatorController sharedNavigatorController] updateEntries:self];
+ [[SPNavigatorController sharedNavigatorController] updateEntriesForConnection:[self connectionID]];
}
// Show or hide the navigator
@@ -1166,16 +1166,6 @@
}
}
-/*
- * Called from MCPConnection or self to inform the navigator that an instance invoked queryDbStructure
- * or a window was closed
- */
-- (void)updateNavigator:(id)sender
-{
- if([[[SPNavigatorController sharedNavigatorController] window] isVisible])
- [[SPNavigatorController sharedNavigatorController] updateEntries:self];
-}
-
#pragma mark -
#pragma mark Task progress and notification methods