結局、キー入力値と表示文字(文字列)の対応表を作る事にした。
キー値は Event.h の値を使うことにする。これは現在のホットキー実装が Carbonを使っているから。
まずは Cの構造体でソースへ埋め込むことにする。
こんな感じ。
static const struct {
UInt32 keycode;
NSString* description;
NSString* string;
BOOL is_hotkey;
}
keymap[] = {
{ kVK_ANSI_A , @"A" , @"A" , YES },
{ kVK_ANSI_S , @"S" , @"S" , YES },
{ kVK_ANSI_D , @"D" , @"D" , YES },
{ kVK_ANSI_F , @"F" , @"F" , YES },
:
最初のkeycodeは Event.h で定義されているキー値。続く descriptionはデバッグ用の説明文字列。3番目は画面表示用の文字列。そして最後はホットキー利用の可否を表すフラグ。
定義されているキーはすべて使えるわけではなく、例えばエスケープキーなどは使えない。これを判断するために is_hotkey を設けてある。
- - - -
さて、これを使って入力キー値を表示させようとするが NSTextFiledが keyDown: を受け取れないことを思い出した。これは困った。さてどうするか。