aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPNavigatorController.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPNavigatorController.m')
-rw-r--r--Source/SPNavigatorController.m122
1 files changed, 74 insertions, 48 deletions
diff --git a/Source/SPNavigatorController.m b/Source/SPNavigatorController.m
index 757797ee..46780402 100644
--- a/Source/SPNavigatorController.m
+++ b/Source/SPNavigatorController.m
@@ -33,6 +33,7 @@
#import "SPLogger.h"
#import "SPTooltip.h"
+
static SPNavigatorController *sharedNavigatorController = nil;
#define DragFromNavigatorPboardType @"SPDragFromNavigatorPboardType"
@@ -66,6 +67,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
if((self = [super initWithWindowNibName:@"Navigator"])) {
schemaData = [[NSMutableDictionary alloc] init];
+ schemaDataUnFiltered = [[NSMutableDictionary alloc] init];
expandStatus1 = [[NSMutableDictionary alloc] init];
expandStatus2 = [[NSMutableDictionary alloc] init];
infoArray = [[NSMutableArray alloc] init];
@@ -73,6 +75,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
selectedKey2 = @"";
ignoreUpdate = NO;
[syncButton setState:NSOffState];
+
}
return self;
@@ -82,6 +85,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
- (void)dealloc
{
if(schemaData) [schemaData release];
+ if(schemaDataUnFiltered) [schemaDataUnFiltered release];
if(infoArray) [infoArray release];
if(expandStatus1) [expandStatus1 release];
if(expandStatus2) [expandStatus2 release];
@@ -122,6 +126,8 @@ static SPNavigatorController *sharedNavigatorController = nil;
return @"SPNavigator";
}
+#pragma mark -
+
- (BOOL)syncMode
{
if([[self window] isVisible])
@@ -161,14 +167,14 @@ static SPNavigatorController *sharedNavigatorController = nil;
selectionViewPort2 = [outlineSchema2 visibleRect];
if(schemaData) {
id selection = nil;
- selection = [outlineSchema1 itemAtRow:[outlineSchema1 selectedRow]];
+ selection = [outlineSchema1 selectedItem];
if(selection) {
id parentObject = [outlineSchema1 parentForItem:selection] ? [outlineSchema1 parentForItem:selection] : schemaData;
id parentKeys = [parentObject allKeysForObject:selection];
if(parentKeys && [parentKeys count] == 1)
selectedKey1 = [[parentKeys objectAtIndex:0] description];
}
- selection = [outlineSchema2 itemAtRow:[outlineSchema2 selectedRow]];
+ selection = [outlineSchema2 selectedItem];
if(selection) {
id parentObject = [outlineSchema2 parentForItem:selection] ? [outlineSchema2 parentForItem:selection] : schemaData;
id parentKeys = [parentObject allKeysForObject:selection];
@@ -206,7 +212,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
[outlineSchema2 selectRowIndexes:[NSIndexSet indexSetWithIndex:itemIndex] byExtendingSelection:NO];
if([outlineSchema2 numberOfSelectedRows] != 1) return;
[outlineSchema2 scrollRowToVisible:[outlineSchema2 selectedRow]];
- id item = [outlineSchema2 itemAtRow:[outlineSchema2 selectedRow]];
+ id item = [outlineSchema2 selectedItem];
// Try to scroll the view that all children of schemaPath are visible if possible
NSInteger cnt = [item count]+1;
NSRange r = [outlineSchema2 rowsInRect:[outlineSchema2 visibleRect]];
@@ -301,6 +307,43 @@ static SPNavigatorController *sharedNavigatorController = nil;
}
}
+- (void)selectInActiveDocumentItem:(id)item fromView:(id)outlineView
+{
+ if([outlineView levelForItem:item] == 0) return;
+
+ id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : schemaData;
+ id parentKeys = [parentObject allKeysForObject:item];
+ if(parentKeys && [parentKeys count] == 1) {
+
+ NSPoint pos = [NSEvent mouseLocation];
+ pos.y -= 20;
+
+ NSArray *pathArray = [[[parentKeys objectAtIndex:0] description] componentsSeparatedByString:SPUniqueSchemaDelimiter];
+ if([pathArray count] > 1) {
+
+ TableDocument *doc = [[NSDocumentController sharedDocumentController] currentDocument];
+ if([doc isWorking]) {
+ [SPTooltip showWithObject:NSLocalizedString(@"Active connection window is busy. Please wait and try again.", @"active connection window is busy. please wait and try again. tooltip")
+ atLocation:pos
+ ofType:@"text"];
+ return;
+ }
+ if([[doc connectionID] isEqualToString:[pathArray objectAtIndex:0]]) {
+
+ // Select the database and table
+ [doc selectDatabase:[pathArray objectAtIndex:1] item:([pathArray count] > 2)?[pathArray objectAtIndex:2]:nil];
+
+ } else {
+
+ [SPTooltip showWithObject:NSLocalizedString(@"The connection of the active connection window is not identical.", @"the connection of the active connection window is not identical tooltip")
+ atLocation:pos
+ ofType:@"text"];
+
+ }
+ }
+ }
+}
+
#pragma mark -
#pragma mark IBActions
@@ -574,7 +617,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
if([parentObject allKeysForObject:item] && [[parentObject allKeysForObject:item] count]) {
NSString *key = [[parentObject allKeysForObject:item] objectAtIndex:0];
if([key rangeOfString:@"&SSH&"].length)
- return [NSString stringWithFormat:@"ssh: %@", [[key componentsSeparatedByString:@"&SSH&"] lastObject]];
+ return [NSString stringWithFormat:@"ssh: %@", [[[key componentsSeparatedByString:@"&SSH&"] lastObject] stringByReplacingOccurrencesOfString:@"&DEL&" withString:@" - "]];
else if([key rangeOfString:@"&DEL&"].length)
return [[key componentsSeparatedByString:@"&DEL&"] lastObject];
else
@@ -637,48 +680,7 @@ static SPNavigatorController *sharedNavigatorController = nil;
*/
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item
{
- if([outlineView levelForItem:item] == 0) return NO;
-
- id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : schemaData;
- id parentKeys = [parentObject allKeysForObject:item];
- if(parentKeys && [parentKeys count] == 1) {
-
- NSPoint pos = [NSEvent mouseLocation];
- pos.y -= 20;
-
- // Do not allow to double-click at PROCs and FUNCs since it doesn't make sense
- if([item isKindOfClass:[NSDictionary class]] && [item objectForKey:@" struct_type "] && [[item objectForKey:@" struct_type "] intValue] > 1) {
- [SPTooltip showWithObject:NSLocalizedString(@"You only can select tables or views.", @"you only can select tables or views tooltip")
- atLocation:pos
- ofType:@"text"];
- return NO;
- }
-
- NSArray *pathArray = [[[parentKeys objectAtIndex:0] description] componentsSeparatedByString:SPUniqueSchemaDelimiter];
- if([pathArray count] > 1) {
-
- TableDocument *doc = [[NSDocumentController sharedDocumentController] currentDocument];
- if([doc isWorking]) {
- [SPTooltip showWithObject:NSLocalizedString(@"Active connection window is busy. Please wait and try again.", @"active connection window is busy. please wait and try again. tooltip")
- atLocation:pos
- ofType:@"text"];
- return NO;
- }
- if([[doc connectionID] isEqualToString:[pathArray objectAtIndex:0]]) {
-
- // Select the database and table
- [doc selectDatabase:[pathArray objectAtIndex:1] item:([pathArray count] > 2)?[pathArray objectAtIndex:2]:nil];
-
- } else {
- [SPTooltip showWithObject:NSLocalizedString(@"The connection of the active connection window is not identical.", @"the connection of the active connection window is not identical tooltip")
- atLocation:pos
- ofType:@"text"];
- }
- return YES;
- }
- }
-
-
+ [self selectInActiveDocumentItem:item fromView:outlineView];
return NO;
}
@@ -687,9 +689,9 @@ static SPNavigatorController *sharedNavigatorController = nil;
id ov = [aNotification object];
id selectedItem;
if(ov == outlineSchema1) {
- selectedItem = [outlineSchema1 itemAtRow:[outlineSchema1 selectedRow]];
+ selectedItem = [outlineSchema1 selectedItem];
} else if (ov == outlineSchema2) {
- selectedItem = [outlineSchema2 itemAtRow:[outlineSchema2 selectedRow]];
+ selectedItem = [outlineSchema2 selectedItem];
}
if(selectedItem) {
@@ -731,6 +733,19 @@ static SPNavigatorController *sharedNavigatorController = nil;
[infoTable reloadData];
}
+- (void)outlineView:(NSOutlineView *)outlineView didClickTableColumn:(NSTableColumn *)tableColumn
+{
+ if(outlineView == outlineSchema1) {
+ [infoQuickAccessSplitView setPosition:0 ofDividerAtIndex:0];
+ [schemaStatusSplitView setPosition:1000 ofDividerAtIndex:0];
+ [schema12SplitView setPosition:1000 ofDividerAtIndex:0];
+ } else if(outlineView == outlineSchema2) {
+ [infoQuickAccessSplitView setPosition:0 ofDividerAtIndex:0];
+ [schemaStatusSplitView setPosition:1000 ofDividerAtIndex:0];
+ [schema12SplitView setPosition:0 ofDividerAtIndex:0];
+ }
+}
+
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard
{
// Provide data for our custom type, and simple NSStrings.
@@ -816,6 +831,17 @@ static SPNavigatorController *sharedNavigatorController = nil;
return nil;
}
+- (void)tableView:(NSTableView*)tableView didClickTableColumn:(NSTableColumn *)tableColumn
+{
+
+ if(tableView == infoTable || tableView == quickAccessTable) {
+ [infoQuickAccessSplitView setPosition:1000 ofDividerAtIndex:0];
+ [schemaStatusSplitView setPosition:200 ofDividerAtIndex:0];
+ [outlineSchema1 scrollRowToVisible:[outlineSchema1 selectedRow]];
+ [outlineSchema2 scrollRowToVisible:[outlineSchema2 selectedRow]];
+ }
+}
+
#pragma mark -
#pragma mark others