/******************************************************************
 * CLASS:		MiscArrowButton
 *
 *	See the header for more information on this class.
 *
 * 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 "MiscArrowButtonCell.h"
#import "MiscArrowButton.h"


static id  myStoredCellClass;

 
@implementation MiscArrowButton

+ initialize
{
	myStoredCellClass = [MiscArrowButtonCell class];
	return self;
}



+ setCellClass: classId
{
	myStoredCellClass = classId;
	return self;
}



- init
{
  NXRect frameRect;

	// create some frame since none was specified
	  
  	NXSetRect (&frameRect, 10.0, 10.0, 125.0, 25.0);
	
	return [self initFrame: (const NXRect *)&frameRect title: "Left" 
			altTitle: "Right" tag: 0 target: nil action: NULL key: 0 
			enabled: YES];
}



- initFrame: (const NXRect *)frameRect
{
	return [self initFrame: frameRect title: "Left" altTitle: "Right"
			tag: 0 target: nil action: NULL key: 0 enabled: YES];
}



// The button class's designated initializer for text buttons, which
// now should just call mine.
 
- initFrame:(const NXRect *)frameRect title:(const char *)aString
		tag:(int)anInt target:anObject action:(SEL)aSelector
		key:(unsigned short)charCode enabled:(BOOL)flag
{
	return [self initFrame: frameRect title: aString altTitle: "Right"
			tag: anInt target: anObject action: aSelector 
			key: charCode enabled: flag];
}



// The designated initializer that merely adds the capability to set
// the altTitle (text on the right side of the arrow) while initializing
// the button.

- initFrame:(const NXRect *)frameRect title:(const char *)aString
		altTitle: (const char *)altString tag:(int)anInt 
		target:anObject action:(SEL)aSelector
		key:(unsigned short)charCode enabled:(BOOL)flag
{
	[super initFrame: frameRect title: aString tag: anInt target: anObject
			action: aSelector key: charCode enabled: flag];

	[self setAltTitle: altString];
	[self setType: NX_TOGGLE];
    [ [self setCell: [ [myStoredCellClass alloc] init] ] free];
	
	return self;
}



// Used to set arrow alignment. (In previous versions, setAlignment was used
// but I realized that I also needed those methods). Sorry for any 
// inconvenience.

- setArrowAlignment: (int)alignment
{
	[ [self cell] setArrowAlignment: alignment];
	return self;
}



- (int)arrowAlignment
{
	return [ [self cell] arrowAlignment];
}



// Used to tell the IB which Inspector to use for this
// object. (Used only for palettes)

- (const char *)getInspectorClassName
{
	return "ABInspector";
}



//  Here for when NeXT gets around to letting us have editors of our
// own.

- (const char *)getEditorClassName
{
	return "ArrowButtonEditor";
}

@end



 