//
//  $Id$
//
//  SPPreferenceControllerDelegate.m
//  sequel-pro
//
//  Created by Stuart Connolly (stuconnolly.com) on October 31, 2010
//  Copyright (c) 2010 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 "SPPreferenceControllerDelegate.h"

@implementation SPPreferenceController (SPPreferenceControllerDelegate)

#pragma mark -
#pragma mark Window delegate methods

/**
 * Trap window close notifications and use them to ensure changes are saved.
 */
- (void)windowWillClose:(NSNotification *)notification
{
	[[NSColorPanel sharedColorPanel] close];
	
	// Mark the currently selected field in the window as having finished editing, to trigger saves.
	if ([[self window] firstResponder]) {
		[[self window] endEditingFor:[[self window] firstResponder]];
	}
}

/**
 * Trap window resize notifications and use them to disable resizing on most tabs
 * - except for the favourites tab.
 */
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
{
	[[NSColorPanel sharedColorPanel] close];
	
	return ([sender showsResizeIndicator]) ? frameSize : [sender frame].size;
}

#pragma mark -
#pragma mark Toolbar delegate methods

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{		
    if ([itemIdentifier isEqualToString:SPPreferenceToolbarGeneral]) {
        return generalItem;
    }
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarTables]) {
		return tablesItem;
	}
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarFavorites]) {
		return favoritesItem;
	}
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarNotifications]) {
		return notificationsItem;
	}
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarAutoUpdate]) {
		return autoUpdateItem;
	}
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarNetwork]) {
		return networkItem;
	}
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarEditor]) {
		return editorItem;
	}
	else if ([itemIdentifier isEqualToString:SPPreferenceToolbarShortcuts]) {
		return shortcutItem;
	}
	
    return [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier] autorelease];
}

- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
{
    return [NSArray arrayWithObjects:
			SPPreferenceToolbarGeneral, 
			SPPreferenceToolbarTables, 
			SPPreferenceToolbarFavorites, 
			SPPreferenceToolbarNotifications, 
			SPPreferenceToolbarEditor, 
			SPPreferenceToolbarShortcuts, 
			SPPreferenceToolbarAutoUpdate, 
			SPPreferenceToolbarNetwork, 
			nil];
}

- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
{
	return [NSArray arrayWithObjects:
			SPPreferenceToolbarGeneral, 
			SPPreferenceToolbarTables, 
			SPPreferenceToolbarFavorites, 
			SPPreferenceToolbarNotifications, 
			SPPreferenceToolbarEditor, 
			SPPreferenceToolbarShortcuts, 
			SPPreferenceToolbarAutoUpdate, 
			SPPreferenceToolbarNetwork, 
			nil];
}

- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
{
	return [NSArray arrayWithObjects:
			SPPreferenceToolbarGeneral, 
			SPPreferenceToolbarTables, 
			SPPreferenceToolbarFavorites, 
			SPPreferenceToolbarNotifications, 
			SPPreferenceToolbarEditor, 
			SPPreferenceToolbarShortcuts, 
			SPPreferenceToolbarAutoUpdate, 
			SPPreferenceToolbarNetwork, 
			nil];
}

@end