InterfaceController.   [plain text]


/*
 * © Copyright 2001-2003 Apple Computer, Inc. All rights reserved.
 *
 * IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. (ÒAppleÓ) in 
 * consideration of your agreement to the following terms, and your use, installation, 
 * modification or redistribution of this Apple software constitutes acceptance of these
 * terms.  If you do not agree with these terms, please do not use, install, modify or 
 * redistribute this Apple software.
 *
 * In consideration of your agreement to abide by the following terms, and subject to these 
 * terms, Apple grants you a personal, non exclusive license, under AppleÕs copyrights in this 
 * original Apple software (the ÒApple SoftwareÓ), to use, reproduce, modify and redistribute 
 * the Apple Software, with or without modifications, in source and/or binary forms; provided 
 * that if you redistribute the Apple Software in its entirety and without modifications, you 
 * must retain this notice and the following text and disclaimers in all such redistributions 
 * of the Apple Software.  Neither the name, trademarks, service marks or logos of Apple 
 * Computer, Inc. may be used to endorse or promote products derived from the Apple Software 
 * without specific prior written permission from Apple. Except as expressly stated in this 
 * notice, no other rights or licenses, express or implied, are granted by Apple herein, 
 * including but not limited to any patent rights that may be infringed by your derivative 
 * works or by other works in which the Apple Software may be incorporated.
 * 
 * The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES, 
 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-
 * INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE 
 * SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 
 *
 * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 
 * REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND 
 * WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR 
 * OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	Includes
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ

#import "InterfaceController.h"
#import "MyDocument.h"
#import "DeviceDataSource.h"
#import "AuthoringDevice.h"
#import "VerticallyCenteredTextFieldCell.h"
#import "ImageAndTextCell.h"


//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	Constants
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ

#define kCDImagePath	@"CD-R"


@implementation InterfaceController


//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	init
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ

- ( id ) init
{
			
	[ super init ];
	
	// Create the document array. We keep an array of documents so that in case
	// a user selects a drive and then tries to select one again, it just brings
	// the window forward and out of hiding.
	[ self setTheDocumentArray: [ NSMutableArray arrayWithCapacity : 0 ] ];
	
	return self;
	
}


//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	dealloc
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ

- ( void ) dealloc
{
	
	[ self setTheDocumentArray: nil ];
	[ super dealloc ];
	
}


//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	awakeFromNib
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ

- ( void ) awakeFromNib
{
	
	// This is a dirty trick we do to set the far left column up so
	// that we can put images in it. We create an NSImageCell and tell
	// it we want an NSImage inside it. Later on, when the selector for
	// that column is called in the data source, the correct image name
	// is returned and that will put the correct image in the column.
	NSImageCell *						theImageCell 	= nil;
	NSImage *							theImage		= nil;
	VerticallyCenteredTextFieldCell *	textCell 		= nil;
	
	theImageCell = [ [ NSImageCell alloc ] init ];
	textCell = [ [ VerticallyCenteredTextFieldCell alloc ] init ];
	theImage = [ NSImage imageNamed: kCDImagePath ];
	
	[ theImageCell setObjectValue: theImage ];
	[ iconColumn setDataCell: theImageCell ];
	[ theImageCell release ];
	
	[ vendorColumn setDataCell: textCell ];
	[ productColumn setDataCell: textCell ];
	[ revisionLevelColumn setDataCell: textCell ];
	[ physicalInterconnectColumn setDataCell: textCell ];
	
	[ textCell release ];
	
	[ [ self theTableView ] setDoubleAction: @selector ( selectDrive: ) ];
	
}


//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	selectDrive:
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ

- ( void ) selectDrive: ( id ) sender
{
	
	NSNumber * 			selectedIndex	= nil;
	NSEnumerator * 		rowEnumerator	= nil;
	DeviceDataSource *	dataSource		= nil;
	
	rowEnumerator = [ [ self theTableView ] selectedRowEnumerator ];
	
	while ( selectedIndex = [ rowEnumerator nextObject ] )
	{
		
		MyDocument * 		theDocument			= nil;
		NSEnumerator * 		documentEnumerator	= nil;
		AuthoringDevice *	theSelectedDevice	= nil;
		id					object				= nil;
		
		documentEnumerator = [ [ self theDocumentArray ] objectEnumerator ];
		
		dataSource = ( DeviceDataSource * ) ( [ [ self theTableView ] dataSource ] );
		theSelectedDevice = [ [ dataSource theDeviceList ] objectAtIndex: [ selectedIndex intValue ] ];
		
		while ( object = [ documentEnumerator nextObject ] )
		{
			
			if ( [ [ object theAuthoringDevice ] isEqual : theSelectedDevice ] )
			{
				
				NSWindow *	theWindow = nil;
				
				theDocument = ( MyDocument * ) object;
				theWindow = [ theDocument theWindow ];
				
				// They selected a window for which we have a document created. Just
				// bring it to the front.
				[ [ theDocument theWindow ] makeKeyAndOrderFront: nil ];
				return;
				
			}
			
		}
		
		// Create a new document
		theDocument = [ MyDocument myDocument ];
		
		[ theDocumentArray addObject: theDocument ];
		
		[ theDocument setTheAuthoringDevice:
			[ [ dataSource theDeviceList ] objectAtIndex: [ selectedIndex intValue ] ] ];
		
	}
	
}


#if 0
#pragma mark -
#pragma mark Accessor Methods
#pragma mark -
#endif


- ( NSTableView * ) theTableView { return theTableView; }
- ( NSMutableArray * ) theDocumentArray { return theDocumentArray; }
- ( void ) setTheDocumentArray: ( NSMutableArray * ) value
{
	
	[ value retain ];
	[ theDocumentArray release ];
	theDocumentArray = value;
	
}


@end