
/*
 *      You may freely copy, distribute and reuse the code
 *      in this example.  NeXT disclaims any warranty of
 *      any kind, expressed or implied, as to its fitness
 *      for any particular use.
 *
 *      Written by: Susan Rayl
 *
 *      Created 21-Mar-91
 */

#import "FilterTextCell.h"
#import <appkit/Text.h>

@implementation FilterTextCell

/* initialize the newTextFilter instance variable to nil until an instance of a 
 * subclass of FilterTextCell fills in a value according to its requirements 
 *
 * Note that this code is in the initialize method, not the initFrame:  method.
 * The initialize method initializes attributes of the class before it's ever used;
 * that is, before any instances are ever created.  Œn this initialize method, the
 * cell class of the SSTextField is being reset from the default TextFieldCell to
 * a custom TextFieldCell class, SSTFCell.  This must be done before any
 * instances are created so that all instances will have the correct cell class.
 * Remember, initialize is called before any instances of the class are created;
 * initFrame: is called as each instance is created.
 */


- init
{
	[super init];
	newTextFilter = (NXTextFilterFunc)nil;
	return self;
}

/* save original filter func and set the new one when the user selects the text 
 * in this Cell by TABbing into this TextField. 
 */
- select:(const NXRect *)aRect inView:controlView editor:textObj delegate:anObject start:(int)selStart length:(int)selLength
{
	[super select:aRect inView:controlView editor:textObj delegate:anObject start:selStart length:selLength];
	oldTextFilter = [textObj textFilter];
	[textObj setTextFilter:(NXTextFilterFunc)newTextFilter];
	return self;
}

/* save original filter func and set the new one when the user selects the text 
 * in this Cell by clicking in this TextField. 
 */
- edit:(const NXRect *)aRect inView:controlView editor:textObj delegate:anObject event:(NXEvent *)theEvent
{
	[super edit:aRect inView:controlView editor:textObj delegate:anObject event:theEvent];
	oldTextFilter = [textObj textFilter];
	[textObj setTextFilter:(NXTextFilterFunc)newTextFilter];
	return self;
}

/* reset the original filter func after the user is done */
- endEditing:anObject
{
	[anObject setTextFilter:(NXTextFilterFunc)oldTextFilter];
	[super endEditing:anObject];
	return self;
}

@end
