diff options
author | stuconnolly <stuart02@gmail.com> | 2012-07-07 10:12:12 +0000 |
---|---|---|
committer | stuconnolly <stuart02@gmail.com> | 2012-07-07 10:12:12 +0000 |
commit | a434272a852db341a6ea4421e388ef924b6a99d7 (patch) | |
tree | 92faa86157de3a6aec5debc5f9940941fc7fbedb /Source/SPAppController.m | |
parent | 51596915a1e9ad4c0cccfc707ee02272ea533671 (diff) | |
download | sequelpro-a434272a852db341a6ea4421e388ef924b6a99d7.tar.gz sequelpro-a434272a852db341a6ea4421e388ef924b6a99d7.tar.bz2 sequelpro-a434272a852db341a6ea4421e388ef924b6a99d7.zip |
Add a new SPAppController SPWindowManagement.
Diffstat (limited to 'Source/SPAppController.m')
-rw-r--r-- | Source/SPAppController.m | 148 |
1 files changed, 20 insertions, 128 deletions
diff --git a/Source/SPAppController.m b/Source/SPAppController.m index fa9dbc4a..d251222d 100644 --- a/Source/SPAppController.m +++ b/Source/SPAppController.m @@ -41,6 +41,7 @@ #import "SPFavoritesController.h" #import "SPEditorTokens.h" #import "SPBundleCommandRunner.h" +#import "SPWindowManagement.h" #import <PSMTabBar/PSMTabBarControl.h> #import <Sparkle/Sparkle.h> @@ -60,6 +61,9 @@ YY_BUFFER_STATE yy_scan_string (const char *); @synthesize lastBundleBlobFilesDirectory; +#pragma mark - +#pragma mark Initialisation + /** * Initialise the application's main controller, setting itself as the app delegate. */ @@ -150,17 +154,18 @@ YY_BUFFER_STATE yy_scan_string (const char *); */ - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { - if ([menuItem action] == @selector(openCurrentConnectionInNewWindow:)) { [menuItem setTitle:NSLocalizedString(@"Open in New Window", @"menu item open in new window")]; return NO; } + if ([menuItem action] == @selector(newTab:)) { return ([[self frontDocumentWindow] attachedSheet] == nil); } + if ([menuItem action] == @selector(duplicateTab:)) { return ([[self frontDocument] getConnection] != nil); @@ -1221,121 +1226,6 @@ YY_BUFFER_STATE yy_scan_string (const char *); } #pragma mark - -#pragma mark Window management - -/** - * Create a new window, containing a single tab. - */ -- (IBAction)newWindow:(id)sender -{ - static NSPoint cascadeLocation = {.x = 0, .y = 0}; - - // Create a new window controller, and set up a new connection view within it. - SPWindowController *newWindowController = [[SPWindowController alloc] initWithWindowNibName:@"MainWindow"]; - NSWindow *newWindow = [newWindowController window]; - - // Cascading defaults to on - retrieve the window origin automatically assigned by cascading, - // and convert to a top left point. - NSPoint topLeftPoint = [newWindow frame].origin; - topLeftPoint.y += [newWindow frame].size.height; - - // The first window should use autosaving; subsequent windows should cascade. - // So attempt to set the frame autosave name; this will succeed for the very - // first window, and fail for others. - BOOL usedAutosave = [newWindow setFrameAutosaveName:@"DBView"]; - if (!usedAutosave) { - [newWindow setFrameUsingName:@"DBView"]; - } - - // Add the connection view - [newWindowController addNewConnection:self]; - - // Cascade according to the statically stored cascade location. - cascadeLocation = [newWindow cascadeTopLeftFromPoint:cascadeLocation]; - - // Set the window controller as the window's delegate - [newWindow setDelegate:newWindowController]; - - // Show the window, and perform frontmost tasks again once the window has drawn - [newWindowController showWindow:self]; - [[newWindowController selectedTableDocument] didBecomeActiveTabInWindow]; -} - -/** - * Create a new tab in the frontmost window. - */ -- (IBAction)newTab:(id)sender -{ - SPWindowController *frontController = nil; - - for (NSWindow *aWindow in [NSApp orderedWindows]) { - if ([[aWindow windowController] isMemberOfClass:[SPWindowController class]]) { - frontController = [aWindow windowController]; - break; - } - } - - // If no window was found, create a new one - if (!frontController) { - [self newWindow:self]; - } else { - if ([[frontController window] isMiniaturized]) [[frontController window] deminiaturize:self]; - [frontController addNewConnection:self]; - } -} - -/** - * Duplicate the current connection tab - */ -- (IBAction)duplicateTab:(id)sender -{ - SPDatabaseDocument *theFrontDocument = [self frontDocument]; - if (!theFrontDocument) return [self newTab:sender]; - - // Add a new tab to the window - if ([[self frontDocumentWindow] isMiniaturized]) [[self frontDocumentWindow] deminiaturize:self]; - [[[self frontDocumentWindow] windowController] addNewConnection:self]; - - // Get the state of the previously-frontmost document - NSDictionary *allStateDetails = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:YES], @"connection", - [NSNumber numberWithBool:YES], @"history", - [NSNumber numberWithBool:YES], @"session", - [NSNumber numberWithBool:YES], @"query", - [NSNumber numberWithBool:YES], @"password", - nil]; - NSMutableDictionary *theFrontState = [NSMutableDictionary dictionaryWithDictionary:[theFrontDocument stateIncludingDetails:allStateDetails]]; - - // Ensure it's set to autoconnect - [theFrontState setObject:[NSNumber numberWithBool:YES] forKey:@"auto_connect"]; - - // Set the connection on the new tab - [[self frontDocument] setState:theFrontState]; -} - -/** - * Retrieve the frontmost document window; returns nil if not found. - */ -- (NSWindow *) frontDocumentWindow -{ - for (NSWindow *aWindow in [NSApp orderedWindows]) { - if ([[aWindow windowController] isMemberOfClass:[SPWindowController class]]) { - return aWindow; - } - } - - return nil; -} - -/** - * When tab drags start, bring all the windows in front of other applications. - */ -- (void)tabDragStarted:(id)sender -{ - [NSApp arrangeInFront:self]; -} - -#pragma mark - #pragma mark IBAction methods /** @@ -2075,18 +1965,20 @@ YY_BUFFER_STATE yy_scan_string (const char *); */ - (NSMutableDictionary*)anonymizePreferencesForFeedbackReport:(NSMutableDictionary *)preferences { - [preferences removeObjectsForKeys:[NSArray arrayWithObjects:@"ContentFilters", - @"favorites", - @"lastSqlFileName", - @"NSNavLastRootDirectory", - @"openPath", - @"queryFavorites", - @"queryHistory", - @"tableColumnWidths", - @"savePath", - @"NSRecentDocumentRecords", - nil]]; - + [preferences removeObjectsForKeys: + [NSArray arrayWithObjects: + @"ContentFilters", + @"favorites", + @"lastSqlFileName", + @"NSNavLastRootDirectory", + @"openPath", + @"queryFavorites", + @"queryHistory", + @"tableColumnWidths", + @"savePath", + @"NSRecentDocumentRecords", + nil]]; + return preferences; } |