/*!
	@header NDHotKeyControl.h
	@abstract Header file for a subclass of NSTextField for getting hot key combinations from the user.
	@discussion The <tt>NDHotKeyControl</tt> can be used to get a  <tt>NDHotKeyEvent</tt> for the last key combination pressed by the user.
 
	Created by Nathan Day on Wed Mar 05 2003.
	Copyright (c) 2002 Nathan Day. All rights reserved.
 */

#import <AppKit/AppKit.h>

@class	NDHotKeyEvent;

/*
	@class NDHotKeyControl
	@abstract Subclass of NSTextField for getting hot key combinations from the user.
	@discussion The <tt>NDHotKeyControl</tt> can be used to get a  <tt>NDHotKeyEvent</tt> for the last key combination pressed by the user.
 */
@interface NDHotKeyControl : NSTextField
{
@protected
	unsigned short		keyCode;
	unichar				character;
	unsigned long		modifierFlags;
	BOOL					requiresModifierKeys;
}

/*!
	@method keyCode
	@abstract Get key code.
	@discussion Returns the key code for the last key combination the user pressed while the reciever was active.
	@result A <tt>unsigned short</tt> containing key code.
 */
- (unsigned short)keyCode;

/*!
	@method character
	@abstract Get unicode character.
	@discussion Returns the unicode character for the last key combination the user pressed while the reciever was active.
	@result A <tt>unichar</tt> containing character.
 */
- (unichar)character;

/*!
	@method modifierFlags
	@abstract Get modifer flags.
	@discussion Returns the modifer flags for the last key combination the user pressed while the reciever was active.
	@result A <tt>unsigned long</tt> containing modifer flags.
 */
- (unsigned long)modifierFlags;

/*!
	@method hotKeyEvent
	@abstract Get <tt>NDHotKeyEvent</tt>
	@discussion Returns the <tt>NDHotKeyEvent</tt> instance for the last key combination the user pressed while the reciever was active. The <tt>NDHotKeyEvent</tt> returned will either be one that has already been created or a newly created one otherwise.
	@result A <tt>NDHotKeyEvent</tt> for the hot key event.
 */
- (NDHotKeyEvent *)hotKeyEvent;

/*!
	@method setRequiresModifierKeys:
	@abstract Set whether hot keys entered need modifiers keys.
	@discussion This does not include function key which do not require modifier keys no matter what the value you pass for the argument <tt><i>flag</i></tt>
	@param flag If <tt>NO</tt> then the reciever only accepts hot keys combination containing modifer keys.
 */
- (void)setRequiresModifierKeys:(BOOL)flag;

/*!
	@method requiresModifierKeys
	@abstract Returns whether hot keys entered need modifiers keys.
	@discussion This does not include key which do not require modifier keys no matter what the value is returned.
	@result If <tt>NO</tt> then the reciever only accepts hot keys combination containing modifer keys.
 */
- (BOOL)requiresModifierKeys;

@end