BWToolkit copy / BWSheetController.m

//
//  BWSheetController.m
//  BWToolkit
//
//  Created by Brandon Walkin (www.brandonwalkin.com)
//  All code is provided under the New BSD license.
//

#import "BWSheetController.h"
#import "NSWindow-NSTimeMachineSupport.h"

@implementation BWSheetController

@synthesize parentWindow, sheet, delegate;

- (void)awakeFromNib
{
	// Hack so the sheet doesn't appear at launch in Cocoa Simulator (or in the actual app if "Visible at Launch" is checked)
	[sheet setAlphaValue:0];
	[sheet performSelector:@selector(orderOut:) withObject:nil afterDelay:0];
	
	// If the sheet has a toolbar or a bottom bar, make sure those elements can't move the window (private API)
	if ([sheet respondsToSelector:@selector(setMovable:)])
		[sheet setMovable:NO];
}

- (id)initWithCoder:(NSCoder *)decoder;
{
    if ((self = [super init]) != nil)
	{
		NSWindowController *tempSheetController = [decoder decodeObjectForKey:@"BWSCSheet"];
		NSWindowController *tempParentWindowController = [decoder decodeObjectForKey:@"BWSCParentWindow"];
		
		sheet = [tempSheetController window];
		parentWindow = [tempParentWindowController window];
	}
	return self;
}

- (void)encodeWithCoder:(NSCoder*)coder
{	
	NSWindowController *tempSheetController = [[[NSWindowController alloc] initWithWindow:sheet] autorelease];
	NSWindowController *tempParentWindowController = [[[NSWindowController alloc] initWithWindow:parentWindow] autorelease];
	
	[coder encodeObject:tempSheetController forKey:@"BWSCSheet"];
	[coder encodeObject:tempParentWindowController forKey:@"BWSCParentWindow"];
}

- (IBAction)openSheet:(id)sender
{
	[sheet setAlphaValue:1];
	[NSApp beginSheet:sheet modalForWindow:parentWindow modalDelegate:nil didEndSelector:nil contextInfo:nil];
}

- (IBAction)closeSheet:(id)sender
{
	[sheet orderOut:nil];
	[NSApp endSheet:sheet];
}

- (IBAction)messageDelegateAndCloseSheet:(id)sender
{
	if (delegate != nil && [delegate respondsToSelector:@selector(shouldCloseSheet:)])
	{	
		if ([delegate performSelector:@selector(shouldCloseSheet:) withObject:sender])	
			[self closeSheet:self];
	}
	else
	{
		[self closeSheet:self];
	}
}


@end
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.