diff options
author | rowanbeentje <rowan@beent.je> | 2010-06-13 00:35:56 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2010-06-13 00:35:56 +0000 |
commit | f286f3f05162e663fb6bc6abaf2a08b1e02d1d86 (patch) | |
tree | fed7537221e2271e99eab6924217ce1879c4976f /Source/SPWindowController.m | |
parent | 4abb1690517dc2c843588b9e6dcc67f407493d02 (diff) | |
download | sequelpro-f286f3f05162e663fb6bc6abaf2a08b1e02d1d86.tar.gz sequelpro-f286f3f05162e663fb6bc6abaf2a08b1e02d1d86.tar.bz2 sequelpro-f286f3f05162e663fb6bc6abaf2a08b1e02d1d86.zip |
- Add support for tearing tabs off a window, into a new window containing the dragged tab
- Fix SPWindowController memory leak
Diffstat (limited to 'Source/SPWindowController.m')
-rw-r--r-- | Source/SPWindowController.m | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/Source/SPWindowController.m b/Source/SPWindowController.m index f04712cc..0050ba15 100644 --- a/Source/SPWindowController.m +++ b/Source/SPWindowController.m @@ -59,6 +59,7 @@ [tabBar setCellMinWidth:100]; [tabBar setCellMaxWidth:250]; [tabBar setCellOptimumWidth:250]; + [tabBar setTearOffStyle:PSMTabBarTearOffAlphaWindow]; // hook up add tab button [[tabBar addTabButton] setTarget:self]; @@ -67,9 +68,6 @@ // Retrieve references to the 'Close Window' and 'Close Tab' menus. These are updated as window focus changes. closeWindowMenuItem = [[[[NSApp mainMenu] itemWithTag:SPMainMenuFile] submenu] itemWithTag:1003]; closeTabMenuItem = [[[[NSApp mainMenu] itemWithTag:SPMainMenuFile] submenu] itemWithTag:1103]; - - // Add a new connection to the new window - [self addNewConnection:self]; } /** @@ -78,6 +76,8 @@ - (void) dealloc { [managedDatabaseConnections release]; + + [super dealloc]; } #pragma mark - @@ -285,6 +285,9 @@ [draggedDocument removeObserver:[draggedFromWindow windowController] forKeyPath:@"isProcessing"]; [[[tabBarControl window] windowController] _updateProgressIndicatorForItem:tabViewItem]; } + + // Check the window and move it to front if it's key (eg for new window creation) + if ([[tabBarControl window] isKeyWindow]) [[tabBarControl window] orderFront:self]; } /** @@ -348,6 +351,55 @@ [[aTabView window] close]; } +- (BOOL)tabView:(NSTabView*)aTabView shouldDropTabViewItem:(NSTabViewItem *)tabViewItem inTabBar:(PSMTabBarControl *)tabBarControl +{ + return YES; +} + +- (PSMTabBarControl *)tabView:(NSTabView *)aTabView newTabBarForDraggedTabViewItem:(NSTabViewItem *)tabViewItem atPoint:(NSPoint)point +{ + + // Create the new window controller, with no tabs + SPWindowController *newWindowController = [[SPWindowController alloc] initWithWindowNibName:@"MainWindow"]; + NSWindow *newWindow = [newWindowController window]; + + // Tweak window positioning according to the style and toolbar + point.x -= [[tabBar style] leftMarginForTabBarControl]; + point.y += 21; + + // Set the new window position and size + [newWindow setFrame:[[self window] frame] display:NO]; + [newWindow setFrameTopLeftPoint:point]; + + // Set the window controller as the window's delegate + [newWindow setDelegate:newWindowController]; + + // Return the window's tab bar + return [newWindowController valueForKey:@"tabBar"]; + +} + +- (NSImage *)tabView:(NSTabView *)aTabView imageForTabViewItem:(NSTabViewItem *)tabViewItem offset:(NSSize *)offset styleMask:(unsigned int *)styleMask +{ + NSImage *viewImage = [[NSImage alloc] init]; + + // Capture an image of the entire window + [[[self window] contentView] lockFocus]; + NSBitmapImageRep *viewRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:[[[self window] contentView] frame]] autorelease]; + [viewImage addRepresentation:viewRep]; + [[[self window] contentView] unlockFocus]; + + // Draw over the tab bar area + [viewImage lockFocus]; + [[NSColor windowBackgroundColor] set]; + NSRectFill([tabBar frame]); + [viewImage unlockFocus]; + + offset->height = 21; + + return [viewImage autorelease]; +} + #pragma mark - #pragma mark Window delegate methods |