// ColorInspector.m
// By Kevin Brain (ksbrain@zeus.UWaterloo.ca)

// Acts as an intermediary between the color inspector 
// view controls (layed out in the file ColorInspector.nib)
// and the objects they inspect. 

#import "ColorInspector.h"
#import "InspectMeApp.h"
#import "InspectorManager.h"
#import "Thing1.h"
#import <appkit/NXColorWell.h>
#import <appkit/Control.h>			// displaying attributes 

@implementation ColorInspector

static id theColorInspector = nil;	// just one per class 


// only a single instance of this class is permitted
//  use [ColorInspector new] to return the single instance

+ new
{
	if (!theColorInspector) {
		theColorInspector = self = [super new];
		if ([NXApp loadNibSection:"ColorInspector.nib" owner:self] == nil)
			printf("Couldn't load ColorInspector.nib\n");
		}
	else 
		self = theColorInspector;
	return self;
}

- setupInspectors:(id)mainInspector
{
	inspectorManager = [NXApp inspectorManager];
	bkgndColorInspectorNum = [inspectorManager 
		addInspector:(id)colorBox 
		title:(const char *)"Background Color Inspector"
		atLocation:LOWERLEFTX :LOWERLEFTY
		cached:YES cacheWindow:[colorBox window]];

	return self;
}

- setCurrentParameterReceiver:(id)newCurrent
{
	currentParameterReceiver = newCurrent;
	return self;
}
	
- (unsigned int)bkgndColorInspectorNum
{
	return bkgndColorInspectorNum;
}

- reflectbkgndColorAttributes:(id)theObject
{
	if(!theObject) return self;
	
	[graySliderOut setFloatValue:[theObject bkgndGray]];
	[colorWellOut setColor:[theObject bkgndColor]];

	return self;
}

/* Setting ingredient attribute values */
/*   Targets of inspector controls   */
/* NOTE: No range checking has been added to these methods yet. */

- inspSetGray:sender
{
	[currentParameterReceiver setBkgndGray:[sender floatValue]];
	[colorWellOut setColor:NXConvertGrayToColor([sender floatValue])];
	return self;
}

- inspSetColor:sender
{
	float	aFloat;
	
	[currentParameterReceiver setBkgndColor:[sender color]];
	NXConvertColorToGray([sender color],&aFloat);
	[graySliderOut setFloatValue:aFloat];
	return self;
}

@end
