//
//  $Id$
//
//  SPWindowAdditions.m
//  sequel-pro
//
//  Created by Stuart Connolly (stuconnolly.com) on Dec 10, 2008
//  Copyright (c) 2008 Stuart Connolly. All rights reserved.
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
//  More info at <http://code.google.com/p/sequel-pro/>

#import "SPWindowAdditions.h"
#import "SPDatabaseDocument.h"
#import "SPWindowController.h"

@implementation NSWindow (SPWindowAdditions)

/**
 * Returns the height of the currently visible toolbar.
 */
- (CGFloat)toolbarHeight
{
	NSRect windowFrame;
	CGFloat toolbarHeight = 0.0f;

	if ([self toolbar] && [[self toolbar] isVisible]) {
		windowFrame   = [NSWindow contentRectForFrameRect:[self frame] styleMask:[self styleMask]];
		toolbarHeight = NSHeight(windowFrame) - NSHeight([[self contentView] frame]);
	}

	return toolbarHeight;
}

/**
 * Resizes this window to the size of the supplied view.
 */
- (void)resizeForContentView:(NSView *)view titleBarVisible:(BOOL)visible
{
	NSSize viewSize = [view frame].size;
	NSRect frame    = [self frame];

	if (viewSize.height < [self contentMinSize].height) {
		viewSize.height = [self contentMinSize].height;
	}

	CGFloat newHeight = (viewSize.height + [self toolbarHeight]);

	// If the title bar is visible add 22 pixels to new height of window.
	if (visible) newHeight += 22;

	frame.origin.y += frame.size.height - newHeight;

	frame.size.height = newHeight;
	frame.size.width  = viewSize.width; 

	[self setFrame:frame display:YES animate:YES];
}

/**
 * Three finger multi-touch right/left swipe event to go back/forward in table history.
 */
- (void)swipeWithEvent:(NSEvent *)anEvent
{

	if(![[self delegate] isKindOfClass:[SPWindowController class]] || ![[[self delegate] documents] count]) return;

	id frontDoc = [[self delegate] selectedTableDocument];

	if( frontDoc && [frontDoc isKindOfClass:[SPDatabaseDocument class]]
		&& [frontDoc valueForKeyPath:@"spHistoryControllerInstance"]
		&& ![frontDoc isWorking])
	{
		if([anEvent deltaX] == -1.0f)
			[[frontDoc valueForKeyPath:@"spHistoryControllerInstance"] valueForKey:@"goForwardInHistory"];
		else if([anEvent deltaX] == 1.0f)
			[[frontDoc valueForKeyPath:@"spHistoryControllerInstance"] valueForKey:@"goBackInHistory"];
	}
}


@end