//
//	MiscProgressBar.h -- a simple view class for displaying progress bar
//		Written and Copyright (c) 1993 by James Heiser.  (jheiser@adobe.com)
//				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.
//	


// Added two methoods -setTicsVisible: (BOOL) and -isTicsVisible:
// Allows the user to select whether ticmarks are Visible or not.
// James Heiser  Sat Sep 25 13:59:15 GMT-0800 1993
//
// Added two methoods -setTicsOverBar:(BOOL) and -isTicsOverBar
// Allows the user to select whether ticmarks are drawn above or
// below progress bar.
// Don Yacktman  Mon Oct 18 22:58:52 MDT 1993
//
// Added two methoods -setTickColor:(NXColor) and -tickColor
// Allows user to set color of ticmarks.
// Don Yacktman  Mon Oct 18 22:58:52 MDT 1993

#import "MiscProgressBar.h"

#define MISC_DEFALUT_TICKS 24		// number of ticks to show + 1
					// (so 24 divisions between 0-1 ratio)
									
#define MISC_DEFAULT_EMPHASIS 3		// every nth tick is longer...


@implementation MiscProgressBar

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

	isTicsVisible = YES;
	isTicsOverBar = NO;

	numTicks = MISC_DEFALUT_TICKS;
	emphasis = MISC_DEFAULT_EMPHASIS;

	tc = [[NSColor darkGrayColor] retain];

	return ( self );
}


- (void) dealloc
{
	[tc release];
	[super dealloc];
	return;
}


- (NSColor *) tickColor
{
	return ( tc );
}


- (void) setTickColor:(NSColor *)color
{
	if ( tc != color ) {
		id	tmp;
		tmp = tc;
		tc = [color retain];
		[tmp release];
	}

	return;
}


- (void) renderTicks
{
	if ( isTicsVisible == YES )  {
		int linecount;
		[tc set];
		for (linecount = 1; linecount <= numTicks; ++linecount)  {
			int xcoord;
			xcoord = ([self bounds].size.width / numTicks) * linecount;
			PSnewpath();
			PSmoveto(xcoord, 0);
			if ( linecount % emphasis ) {
				PSlineto(xcoord, (int)([self bounds].size.height / 4));
			} else {
                            			PSlineto(xcoord, (int)([self bounds].size.height / 2));
			}
			PSstroke();
		}
	} 
}


- (void) renderBar
{
	if ( isTicsOverBar ) {
		[super renderBar];
		[self renderTicks];
	} else {
		[self renderTicks];
		[super renderBar];
	}

	return;
}


- (void) setTicsVisible:(BOOL)aBool
{
	isTicsVisible = aBool;
	[self display];

	return;
}


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


- (void) setTicsOverBar:(BOOL)aBool
{
    isTicsOverBar = aBool;
	[self display]; 
}

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


- (void) setNumTicks:(int)anInt
{
	numTicks = MAX(anInt + 1, 1);
	[self display];

	return;
}


- (int) numTicks
{
	return ( numTicks - 1 );
}


- (void) setEmphasis:(int)anInt
{
	emphasis = MAX(anInt, 1);
	[self display];

	return;
}


- (int) emphasis
{
	return ( emphasis );
}


- (id) initWithCoder:(NSCoder *)aDecoder
{
	[super initWithCoder:aDecoder];

	[aDecoder decodeValuesOfObjCTypes:"c", &isTicsVisible];
	[aDecoder decodeValuesOfObjCTypes:"c", &isTicsOverBar];
	[aDecoder decodeValuesOfObjCTypes:"i", &numTicks];
	[aDecoder decodeValuesOfObjCTypes:"i", &emphasis];

	tc = [[aDecoder decodeObject] retain];

	return ( self );
}


- (void) encodeWithCoder:(NSCoder *)aCoder
{
	[super encodeWithCoder:aCoder];

	[aCoder encodeValuesOfObjCTypes:"c", &isTicsVisible];
	[aCoder encodeValuesOfObjCTypes:"c", &isTicsOverBar];
	[aCoder encodeValuesOfObjCTypes:"i", &numTicks];
	[aCoder encodeValuesOfObjCTypes:"i", &emphasis];

	[aCoder encodeObject:tc];

	return;
}


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


@end
