/*
 *  NDHotKeyControl.m
 *  NDHotKeyEvent
 *
 *  Created by Nathan Day on Wed Mar 05 2003.
 *  Copyright (c) 2002 Nathan Day. All rights reserved.
 */

#import "NDHotKeyControl.h"
#import "NDHotKeyEvent.h"

/*
 * class implementation NDHotKeyControl
 */
@implementation NDHotKeyControl

/*
 * -initWithFrame:
 */
- (id)initWithFrame:(NSRect)aFrame
{
    if ( self = [super initWithFrame:aFrame] )
	 {
		 [self setEditable:NO];
		 requiresModifierKeys = YES;
   }
    return self;
}

/*
 * -initWithCoder:
 */
- (id)initWithCoder:(NSCoder *)aCoder
{
	if ( self = [super initWithCoder:aCoder] )
	{
		[self setEditable:NO];
		requiresModifierKeys = YES;
	}
	return self;
}

/*
 * -keyCode
 */
- (unsigned short)keyCode
{
	return keyCode;
}

/*
 * -character
 */
- (unichar)character
{
	return character;
}

/*
 * -modifierFlags
 */
- (unsigned long)modifierFlags
{
	return modifierFlags;
}

/*
 * -performKeyEquivalent:
 */
- (BOOL)performKeyEquivalent:(NSEvent*)anEvent
{
	[self keyDown:anEvent];
	return YES;
}

/*
 * -keyDown:
 */
- (void)keyDown:(NSEvent *)theEvent
{
	unsigned long		theModifierFlags = [theEvent modifierFlags];
	unichar				theChar = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
	theModifierFlags &= (NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask);

	if( (theModifierFlags != 0 || !requiresModifierKeys || theChar > 255) && theChar != 0 )
	{
		keyCode = [theEvent keyCode];
		modifierFlags = theModifierFlags;
		character = theChar;

		[self setStringValue:stringForKeyCodeAndModifierFlags( keyCode, character, modifierFlags )];
		[self performClick:self];
	}
}

/*
 * -hotKeyEvent
 */
- (NDHotKeyEvent *)hotKeyEvent
{
	return [NDHotKeyEvent getHotKeyForKeyCode:[self keyCode] character:[self character] modifierFlags:[self modifierFlags]];

}

- (void)setRequiresModifierKeys:(BOOL)aFlag
{
	requiresModifierKeys = aFlag;
}

- (BOOL)requiresModifierKeys
{
	return requiresModifierKeys;
}

@end