diff options
Diffstat (limited to 'Source/SPConnectionControllerInitializer.m')
-rw-r--r-- | Source/SPConnectionControllerInitializer.m | 417 |
1 files changed, 0 insertions, 417 deletions
diff --git a/Source/SPConnectionControllerInitializer.m b/Source/SPConnectionControllerInitializer.m deleted file mode 100644 index 22e52502..00000000 --- a/Source/SPConnectionControllerInitializer.m +++ /dev/null @@ -1,417 +0,0 @@ -// -// SPConnectionControllerInitializer.m -// sequel-pro -// -// Created by Stuart Connolly (stuconnolly.com) on January 22, 2012. -// Copyright (c) 2012 Stuart Connolly. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#import "SPConnectionControllerInitializer.h" -#import "SPKeychain.h" -#import "SPFavoritesController.h" -#import "SPFavoriteTextFieldCell.h" -#import "SPTreeNode.h" -#import "SPFavoriteNode.h" -#import "SPGroupNode.h" -#import "SPDatabaseDocument.h" -#import "SPSplitView.h" -#import "SPFavoriteColorSupport.h" -#import "SPColorSelectorView.h" - -#ifndef SP_CODA -static NSString *SPConnectionViewNibName = @"ConnectionView"; -#endif - -@interface SPConnectionController () - -- (void)_processFavoritesDataChange; -- (void)_reloadFavoritesViewData; -- (void)_selectNode:(SPTreeNode *)node; -- (void)_scrollToSelectedNode; -- (void)_documentWillClose:(NSNotification *)notification; - -- (SPTreeNode *)_favoriteNodeForFavoriteID:(NSInteger)favoriteID; - -- (void)scrollViewFrameChanged:(NSNotification *)aNotification; - -@end - -@interface SPConnectionController (SPConnectionControllerInitializer_Private_API) - -- (void)_restoreOutlineViewStateNode:(SPTreeNode *)node; - -@end - - -@implementation SPConnectionController (SPConnectionControllerInitializer) - -/** - * Initialise the connection controller, linking it to the parent document and setting up the parent window. - */ -- (id)initWithDocument:(SPDatabaseDocument *)document -{ - if ((self = [super init])) { - - // Weak reference - dbDocument = document; - -#ifndef SP_CODA - databaseConnectionSuperview = [dbDocument databaseView]; - databaseConnectionView = [dbDocument valueForKey:@"contentViewSplitter"]; -#endif - - // Keychain references - connectionKeychainID = nil; - connectionKeychainItemName = nil; - connectionKeychainItemAccount = nil; - connectionSSHKeychainItemName = nil; - connectionSSHKeychainItemAccount = nil; - - initComplete = NO; - isEditingItemName = NO; - isConnecting = NO; - isTestingConnection = NO; - sshTunnel = nil; - mySQLConnection = nil; - cancellingConnection = NO; - favoriteNameFieldWasAutogenerated = NO; - - [self loadNib]; - - NSArray *colorList = [[SPFavoriteColorSupport sharedInstance] userColorList]; - [sshColorField setColorList:colorList]; - [sshColorField bind:@"selectedTag" toObject:self withKeyPath:@"colorIndex" options:nil]; - [standardColorField setColorList:colorList]; - [standardColorField bind:@"selectedTag" toObject:self withKeyPath:@"colorIndex" options:nil]; - [socketColorField setColorList:colorList]; - [socketColorField bind:@"selectedTag" toObject:self withKeyPath:@"colorIndex" options:nil]; - - [self registerForNotifications]; - -#ifndef SP_CODA - // Hide the main view and position and display the connection view - [databaseConnectionView setHidden:YES]; - [connectionView setFrame:[databaseConnectionView frame]]; - [databaseConnectionSuperview addSubview:connectionView]; - - // Set up the splitview - [connectionSplitView setMinSize:80.f ofSubviewAtIndex:0]; - [connectionSplitView setMinSize:445.f ofSubviewAtIndex:1]; - - // Generic folder image for use in the outline view's groups - folderImage = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericFolderIcon)] retain]; - [folderImage setSize:NSMakeSize(16, 16)]; - - // Set up a keychain instance and preferences reference, and create the initial favorites list - keychain = [[SPKeychain alloc] init]; - prefs = [[NSUserDefaults standardUserDefaults] retain]; - - // Create a reference to the favorites controller, forcing the data to be loaded from disk - // and the tree to be constructed. - favoritesController = [SPFavoritesController sharedFavoritesController]; - - // Tree references - favoritesRoot = [favoritesController favoritesTree]; - currentFavorite = nil; - - // Create the "Quick Connect" placeholder group - quickConnectItem = [[SPTreeNode treeNodeWithRepresentedObject:[SPGroupNode groupNodeWithName:[NSLocalizedString(@"Quick Connect", @"Quick connect item label") uppercaseString]]] retain]; - [quickConnectItem setIsGroup:YES]; - - // Create a NSOutlineView cell for the Quick Connect group - quickConnectCell = [[SPFavoriteTextFieldCell alloc] init]; - [quickConnectCell setDrawsDividerUnderCell:YES]; - [quickConnectCell setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; - - // Update the UI - [self _reloadFavoritesViewData]; - [self setUpFavoritesOutlineView]; - [self _restoreOutlineViewStateNode:favoritesRoot]; - - // Set up the selected favourite, and scroll after a small delay to fix animation delay on Lion - [self setUpSelectedConnectionFavorite]; - if ([favoritesOutlineView selectedRow] != -1) { - [self performSelector:@selector(_scrollToSelectedNode) withObject:nil afterDelay:0.0]; - } - - // Set sort items - currentSortItem = (SPFavoritesSortItem)[prefs integerForKey:SPFavoritesSortedBy]; - reverseFavoritesSort = [prefs boolForKey:SPFavoritesSortedInReverse]; -#endif - - initComplete = YES; - } - - return self; -} - -/** - * Loads the connection controllers UI nib. - */ -- (void)loadNib -{ -#ifndef SP_CODA - - // Load the connection nib, keeping references to the top-level objects for later release - nibObjectsToRelease = [[NSMutableArray alloc] init]; - - NSArray *connectionViewTopLevelObjects = nil; - NSNib *nibLoader = [[NSNib alloc] initWithNibNamed:SPConnectionViewNibName bundle:[NSBundle mainBundle]]; - - [nibLoader instantiateNibWithOwner:self topLevelObjects:&connectionViewTopLevelObjects]; - [nibObjectsToRelease addObjectsFromArray:connectionViewTopLevelObjects]; - [nibLoader release]; - -#endif -} - -/** - * Registers for various notifications. - */ -- (void)registerForNotifications -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_documentWillClose:) - name:SPDocumentWillCloseNotification - object:dbDocument]; - -#ifndef SP_CODA - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(scrollViewFrameChanged:) - name:NSViewFrameDidChangeNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_processFavoritesDataChange:) - name:SPConnectionFavoritesChangedNotification - object:nil]; - - // Registered to be notified of changes to connection information - [self addObserver:self - forKeyPath:SPFavoriteTypeKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteNameKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteHostKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteUserKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteColorIndexKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteDatabaseKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSocketKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoritePortKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteUseSSLKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSHHostKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSHUserKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSHPortKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSHKeyLocationEnabledKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSHKeyLocationKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSLKeyFileLocationEnabledKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSLKeyFileLocationKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSLCertificateFileLocationEnabledKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSLCertificateFileLocationKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSLCACertFileLocationEnabledKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; - - [self addObserver:self - forKeyPath:SPFavoriteSSLCACertFileLocationKey - options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) - context:NULL]; -#endif -} - -/** - * Performs any set up necessary for the favorities outline view. - */ -- (void)setUpFavoritesOutlineView -{ - // Register double click action for the favorites outline view (double click favorite to connect) - [favoritesOutlineView setTarget:self]; - [favoritesOutlineView setDoubleAction:@selector(nodeDoubleClicked:)]; - - // Register drag types for the favorites outline view - [favoritesOutlineView registerForDraggedTypes:@[SPFavoritesPasteboardDragType]]; - [favoritesOutlineView setDraggingSourceOperationMask:NSDragOperationMove forLocal:YES]; -} - -/** - * Sets up the selected connection favorite according to the user's preferences. - */ -- (void)setUpSelectedConnectionFavorite -{ -#ifndef SP_CODA - SPTreeNode *favorite = [self _favoriteNodeForFavoriteID:[prefs integerForKey:[prefs boolForKey:SPSelectLastFavoriteUsed] ? SPLastFavoriteID : SPDefaultFavorite]]; - - if (favorite) { - - if (favorite == quickConnectItem) { - [self _selectNode:favorite]; - } - else { - NSNumber *typeNumber = [[[favorite representedObject] nodeFavorite] objectForKey:SPFavoriteTypeKey]; - previousType = typeNumber ? [typeNumber integerValue] : SPTCPIPConnection; - - [self _selectNode:favorite]; - [self resizeTabViewToConnectionType:[[[[favorite representedObject] nodeFavorite] objectForKey:SPFavoriteTypeKey] integerValue] animating:NO]; - } - - [self _scrollToSelectedNode]; - } - else { - previousType = SPTCPIPConnection; - - [self resizeTabViewToConnectionType:SPTCPIPConnection animating:NO]; - } -#endif -} - -#pragma mark - -#pragma mark Private API - -/** - * Responds to notifications that the favorites root has changed, - * and updates the interface to match. - */ -- (void)_processFavoritesDataChange:(NSNotification *)aNotification -{ -#ifndef SP_CODA - // Check the supplied notification for the sender; if the sender - // was this object, ignore it - if ([aNotification object] == self) return; - - NSArray *selectedFavoriteNodes = [self selectedFavoriteNodes]; - - [self _reloadFavoritesViewData]; - - NSMutableIndexSet *selectionIndexes = [NSMutableIndexSet indexSet]; - - for (SPTreeNode *eachNode in selectedFavoriteNodes) - { - NSInteger anIndex = [favoritesOutlineView rowForItem:eachNode]; - - if (anIndex == -1) continue; - - [selectionIndexes addIndex:anIndex]; - } - - [favoritesOutlineView selectRowIndexes:selectionIndexes byExtendingSelection:NO]; -#endif -} - -/** - * Restores the outline views group nodes expansion state. - * - * @param node The node to traverse - */ -#ifndef SP_CODA -- (void)_restoreOutlineViewStateNode:(SPTreeNode *)node -{ - if ([node isGroup]) { - if ([[node representedObject] nodeIsExpanded]) { - [favoritesOutlineView expandItem:node]; - } - else { - [favoritesOutlineView collapseItem:node]; - } - - for (SPTreeNode *childNode in [node childNodes]) - { - if ([childNode isGroup]) { - [self _restoreOutlineViewStateNode:childNode]; - } - } - } -} -#endif - -@end |