#import "MiscFormFieldCell.h"
#import "MiscFormField.h"

#define FORM_FIELD_CELL_CURRENT_VERSION 1


@implementation MiscFormFieldCell
+ initialize
{	if(self == [MiscFormFieldCell class])
	{	[self setVersion:FORM_FIELD_CELL_CURRENT_VERSION];
	
	}

	return self;
}

- initFormCell:(const char*) text andMask:(const char*) mask
						 andControlString:(const char*) theControlString
						   andValidString:(const char*) theValidString
								 andBlank:(char)bc
{	if (!(self=[super initTextCell:text])) return self;
	strcpy(template=malloc(strlen(mask)+1),mask);
	strcpy(controlString=malloc(strlen(theControlString)+1),theControlString);
	strcpy(validString=malloc(strlen(theValidString)+1),theValidString);
	
	[[self setBezeled:YES] setBlank:bc];
	return self;
}
- setMask:(const char *) mask
{	strcpy(template=realloc(template,strlen(mask)+1),mask);
	[[self controlView] setMask:template];
	return self;
}
- setValidString:(const char *) str
{	strcpy(validString=realloc(validString,strlen(str)+1), str);
	[[self controlView] setValidString:validString];
	return self;
}
- setModifyString:(const char *) theControlString
{	strcpy(controlString=realloc(controlString,
								 strlen(theControlString)+1),
								 theControlString);
	[[self controlView] setModifyString:controlString];
	return self;
}
- setBlank:(char) bc
{	blankchar=bc;
	[[self controlView] setBlankchar:blankchar];
	return self;
}

- drawInside:(const NXRect *)cellFrame inView:controlView
{	NXRect	lr=*cellFrame;
	[super drawInside:cellFrame inView:controlView];
	[controlView getBounds:&lr];
	[controlView displayInRect:&lr];
	return self;
}

- setGrid:(BOOL)flag
{	fFlags.drawGrid=flag;
	return self;
}
- setOverwrite:(BOOL)flag
{	fFlags.overwrite=flag;
	return self;
}
-(BOOL)grid
{	return fFlags.drawGrid;
}
-(BOOL)overwrite
{	return fFlags.overwrite;
}
- (BOOL)beepWhenRight
{	return fFlags.beepWhenRight;
}
- setBeepWhenRight:(BOOL)aBeepWhenRight
{	fFlags.beepWhenRight=aBeepWhenRight;
	return self;
}

- (BOOL)escClearLine
{	return fFlags.escClearLine;
}
- setEscClearLine:(BOOL)aEscClearLine
{	fFlags.escClearLine=aEscClearLine;
	return self;
}
-(BOOL) specialKeybindings
{	return fFlags.specialKeybindings;
}
- setSpecialKeybindings:(BOOL)flag
{	fFlags.specialKeybindings=flag;
	return self;
}
-(BOOL) isEnabled
{	return !fFlags.disabled;
}
- setEnabled:(BOOL)flag
{	fFlags.disabled=!flag;
	return self;
}

-(unsigned int) flags;
{	return *(unsigned int*)&fFlags;
}
-free
{	free(template),free(controlString);
	[super free];
	return nil;
}

-(const char *) mask
{	return template;
}
-(const char *) modifyString
{	return controlString;
}
-(const char *) validString
{	return validString;
}
-(char) blank
{	return blankchar;
}
- setBackgroundGray:(float)value
{	[super setBackgroundGray:value];
	[[self controlView] setBackgroundGray:value];
	return self;
}
- setTextGray:(float)value
{	[super setTextGray:value];
	[[self controlView] setTextGray:value];
	return self;
}

- setStringValue:(const char*) theVal
{	[super setStringValue:theVal];
	[[self controlView] setValue:theVal];
	return self;
}

#if 0
- endEditing:textObject
{
	if([textObject class] == [Text class])
		return [super endEditing:textObject];
	else
	{	[textObject setDelegate:nil];
		return self;
	}
}
#endif

- read: (NXTypedStream*)stream
{	[super read:stream];
	switch(NXTypedStreamClassVersion(stream, "MiscFormFieldCell"))
	{	case FORM_FIELD_CELL_CURRENT_VERSION:
			NXReadTypes(stream,"***ic",&template,&controlString,&validString,
									   (unsigned int*)&fFlags,&blankchar);
		break;
	}
	return self;
}
- write: (NXTypedStream*)stream
{	[super write:stream];
	NXWriteTypes(stream,"***ic",&template,&controlString,&validString,
								(unsigned int*)&fFlags,&blankchar);
	return self;
}


@end
