X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=KeyInputTextView.m;fp=KeyInputTextView.m;h=9b6bc37c4d56f252cd117841371f6535e2e212f0;hp=0000000000000000000000000000000000000000;hb=530009447c5bbd360ac5023979cffc6d32a28df3;hpb=5f07baa8cb03a2f6aa06338bfeb31dad3c3ca29f diff --git a/KeyInputTextView.m b/KeyInputTextView.m new file mode 100644 index 0000000..9b6bc37 --- /dev/null +++ b/KeyInputTextView.m @@ -0,0 +1,209 @@ +// +// KeyInputTextField.m +// Enjoy +// +// Created by Sam McCall on 5/05/09. +// + +@implementation KeyInputTextView + +@synthesize descr, hasKey; + +-(id) init { + if(self = [super init]) { + setEnabled: NO; + } + return self; +} + +-(void) clear { + [self setString: [NSString string]]; + vk = -1; + hasKey = NO; + descr = NULL; +} + +-(NSString*) stringForKeyCode: (int) keycode { + switch(keycode) { + case 0x7a : return @"F1"; + case 0x78 : return @"F2"; + case 0x63 : return @"F3"; + case 0x76 : return @"F4"; + case 0x60 : return @"F5"; + case 0x61 : return @"F6"; + case 0x62 : return @"F7"; + case 0x64 : return @"F8"; + case 0x65 : return @"F9"; + case 0x6d : return @"F10"; + case 0x67 : return @"F11"; + case 0x6f : return @"F12"; + case 0x69 : return @"F13"; + case 0x6b : return @"F14"; + case 0x71 : return @"F15"; + case 0x6a : return @"F16"; + case 0x40 : return @"F17"; + case 0x4f : return @"F18"; + case 0x50 : return @"F19"; + + case 0x35 : return @"Esc"; + case 0x32 : return @"`"; + + case 0x12 : return @"1"; + case 0x13 : return @"2"; + case 0x14 : return @"3"; + case 0x15 : return @"4"; + case 0x17 : return @"5"; + case 0x16 : return @"6"; + case 0x1a : return @"7"; + case 0x1c : return @"8"; + case 0x19 : return @"9"; + case 0x1d : return @"0"; + case 0x1b : return @"-"; + case 0x18 : return @"="; + + case 0x3f : return @"Fn"; + case 0x39 : return @"Caps Lock"; + case 0x38 : return @"Left Shift"; + case 0x3b : return @"Left Control"; + case 0x3a : return @"Left Option"; + case 0x37 : return @"Left Command"; + case 0x36 : return @"Right Command"; + case 0x3d : return @"Right Option"; + case 0x3e : return @"Right Control"; + case 0x3c : return @"Right Shift"; + + case 0x73 : return @"Home"; + case 0x74 : return @"Page Up"; + case 0x75 : return @"Delete"; + case 0x77 : return @"End"; + case 0x79 : return @"Page Down"; + + case 0x30 : return @"Tab"; + case 0x33 : return @"Backspace"; + case 0x24 : return @"Return"; + case 0x31 : return @"Space"; + + case 0x0c : return @"Q"; + case 0x0d : return @"W"; + case 0x0e : return @"E"; + case 0x0f : return @"R"; + case 0x11 : return @"T"; + case 0x10 : return @"Y"; + case 0x20 : return @"U"; + case 0x22 : return @"I"; + case 0x1f : return @"O"; + case 0x23 : return @"P"; + case 0x21 : return @"["; + case 0x1e : return @"]"; + case 0x2a : return @"\\"; + case 0x00 : return @"A"; + case 0x01 : return @"S"; + case 0x02 : return @"D"; + case 0x03 : return @"F"; + case 0x05 : return @"G"; + case 0x04 : return @"H"; + case 0x26 : return @"J"; + case 0x28 : return @"K"; + case 0x25 : return @"L"; + case 0x29 : return @";"; + case 0x27 : return @"'"; + case 0x06 : return @"Z"; + case 0x07 : return @"X"; + case 0x08 : return @"C"; + case 0x09 : return @"V"; + case 0x0b : return @"B"; + case 0x2d : return @"N"; + case 0x2e : return @"M"; + case 0x2b : return @","; + case 0x2f : return @"."; + case 0x2c : return @"/"; + + case 0x47 : return @"Clear"; + case 0x51 : return @"Keypad ="; + case 0x4b : return @"Keypad /"; + case 0x43 : return @"Keypad *"; + case 0x59 : return @"Keypad 7"; + case 0x5b : return @"Keypad 8"; + case 0x5c : return @"Keypad 9"; + case 0x4e : return @"Keypad -"; + case 0x56 : return @"Keypad 4"; + case 0x57 : return @"Keypad 5"; + case 0x58 : return @"Keypad 6"; + case 0x45 : return @"Keypad +"; + case 0x53 : return @"Keypad 1"; + case 0x54 : return @"Keypad 2"; + case 0x55 : return @"Keypad 3"; + case 0x52 : return @"Keypad 0"; + case 0x41 : return @"Keypad ."; + case 0x4c : return @"Enter"; + + case 0x7e : return @"Up"; + case 0x7d : return @"Down"; + case 0x7b : return @"Left"; + case 0x7c : return @"Right"; + } + return [[NSString alloc] initWithFormat: @"Key 0x%x",keycode]; +} + +-(BOOL) acceptsFirstResponder { + return enabled; +} + +-(BOOL) becomeFirstResponder { + [self setBackgroundColor: [NSColor selectedTextBackgroundColor]]; + return YES; +} + +-(BOOL) resignFirstResponder { + [self setBackgroundColor: [NSColor textBackgroundColor]]; + return YES; +} + +-(void) pressed:(int) keycode { + [self setVk: keycode]; + [[self window] makeFirstResponder: nil]; + [targetController keyChanged]; +} + +-(void) setVk: (int) key { + vk=key; + hasKey = YES; + descr = [self stringForKeyCode: key]; + [self setString: descr]; +} +-(int) vk { + return vk; +} + +- (void)keyDown:(NSEvent *)evt { + if([evt isARepeat]) + return; + [self pressed: [evt keyCode]]; +} + +-(void) flagsChanged:(NSEvent*)evt { + // XXX sometimes it's key up + [self pressed: [evt keyCode]]; +} + +-(void) setEnabled: (BOOL) newEnabled { + enabled = newEnabled; + if(!newEnabled && [window firstResponder] == self) + [window makeFirstResponder: NULL]; + + + if(enabled) { + if([window firstResponder] == self) + [self setBackgroundColor: [NSColor selectedTextBackgroundColor]]; + else + [self setBackgroundColor: [NSColor textBackgroundColor]]; + } else { + [self setBackgroundColor: [NSColor textBackgroundColor]]; + } +} +-(BOOL) enabled { + return enabled; +} + + +@end