//
//	MiscProgressPie.m -- a simple view class for displaying a pie
//		Written and Copyright (c) 1993 by James Heiser.  (jheiser@adobe.com)
//				Rendering code massaged by Don Yacktman.
//				Version 1.0.  All rights reserved.
//
//		OPENSTEP conversion and mods:  Todd Anthony Nathan <todd@thoughtful.com>
//
//		This notice may not be removed from this source code.
//
//	This object is included in the MiscKit by permission from the author
//	and its use is governed by the MiscKit license, found in the file
//	"LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
//	for a list of all applicable permissions and restrictions.
//	

#import "MiscProgressPie.h"

@implementation MiscProgressPie

- initWithFrame:(NSRect)frameRect
{
	[super initWithFrame:frameRect];

	pb = [[self backgroundColor] retain];  // pie color
	[self setHidden:NO];

	return ( self );
}


- (void) dealloc
{
	[pb release];
	[super dealloc];

	return;
}


- (void) renderBackground
{
	if ( [self isHidden] ) {
		return;
	}

	[super renderBackground];

	// Fill in the circle portion (pie background) first ...
	PSmoveto (NSWidth([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0);
	PSarc (NSWidth([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0,
			0, 360);
	PSclosepath ();
	[pb set];
	PSfill();

	return;
}


- (void) renderBar
{
	float angle;

	if ([self isHidden] || (ratio <= 0.0)) {
		return;
	}

	angle = 90.0;

	if (ratio >= 1.0)  {
		angle = -270.0;
	}
	if (ratio < 1.0 && ratio > 0.0) {
		angle = 90.0 - 360.0 * ratio;
	}

	PSmoveto (NSWidth([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0);
	PSarcn (NSWidth([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0,
			90.0,
			angle);
	PSclosepath ();
	[fg set];
	PSfill();

	return;
}

- (void) renderBorder
{
	float angle;

	if ([self isHidden]) return;

	angle = 90.0;
	[bd set];
	PSarc (([self bounds].size.width / 2), ([self bounds].size.height / 2),
			([self bounds].size.height / 2), 0.0, 360.0);
	PSstroke();
	if (ratio >= 1.0) {
		angle = -270.0;
	}
	if ((ratio < 1.0) && (ratio > 0.0)) {
		angle = 90.0 - 360.0 * ratio;
	}

	PSmoveto (NSWidth([self bounds]) / 2.0, NSHeight([self bounds]) / 2.0);
	PSarcn (NSWidth([self bounds]) / 2.0, NSHeight([self bounds]) / 2.0,
			NSHeight([self bounds]) / 2.0, 90.0, angle);

	PSclosepath();
	PSstroke();

	return;
}


- (void) setPieBackgroundColor:(NSColor *)newPieBackgroundColor
{
	if ( pb != newPieBackgroundColor ) {
		id	tmp;
		tmp = newPieBackgroundColor;
		pb = [newPieBackgroundColor retain];
		[tmp release];
	}

	return;
}


- (NSColor *)pieBackgroundColor
{
	return ( pb );
}


- (void) setHidden:(BOOL)aBool
{
	isHidden = aBool;
	return;
}


- (BOOL) isHidden
{
	return ( isHidden );
}


- (id) initWithCoder:(NSCoder *)aDecoder
{
	[super initWithCoder:aDecoder];
	[aDecoder decodeValuesOfObjCTypes:"c", &isHidden];
	pb = [[aDecoder decodeObject] retain];  // Brings in the Pie Background Color

	return ( self );
}


- (void) encodeWithCoder:(NSCoder *)aCoder
{
	[super encodeWithCoder:aCoder];
	[aCoder encodeValuesOfObjCTypes:"c", &isHidden];
	[aCoder encodeObject:pb];  // Save out the Pie Background Color

	return;
}


- (NSString *) inspectorClassName
{
     return @"MiscProgressPieInspector";
}


@end
