X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=TargetController.m;h=14f81a94dd4ab317d302cfd55ef57047f43cd498;hp=70dc1e804de13c35800501cb2862faafc0495a05;hb=08c920c47d68423c16a6deba2a59488772066f6b;hpb=530009447c5bbd360ac5023979cffc6d32a28df3 diff --git a/TargetController.m b/TargetController.m index 70dc1e8..14f81a9 100644 --- a/TargetController.m +++ b/TargetController.m @@ -5,6 +5,21 @@ // Created by Sam McCall on 5/05/09. // +#import "TargetController.h" + +#import "ConfigsController.h" +#import "Config.h" +#import "JSAction.h" +#import "JoystickController.h" +#import "KeyInputTextView.h" +#import "TargetConfig.h" +#import "TargetController.h" +#import "TargetKeyboard.h" +#import "TargetMouseBtn.h" +#import "TargetMouseMove.h" +#import "TargetMouseScroll.h" +#import "TargetToggleMouseScope.h" + @implementation TargetController -(void) keyChanged { @@ -15,6 +30,21 @@ [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; [self commit]; } +-(IBAction)mdirChanged:(id)sender { + [radioButtons setState: 1 atRow: 3 column: 0]; + [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + [self commit]; +} +-(IBAction)mbtnChanged:(id)sender { + [radioButtons setState: 1 atRow: 4 column: 0]; + [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + [self commit]; +} +-(IBAction)sdirChanged:(id)sender { + [radioButtons setState: 1 atRow: 5 column: 0]; + [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: sender]; + [self commit]; +} -(Target*) state { @@ -22,37 +52,51 @@ case 0: // none return NULL; case 1: // key - if([keyInput hasKey]) { + if(keyInput.hasKey) { TargetKeyboard* k = [[TargetKeyboard alloc] init]; [k setVk: [keyInput vk]]; - [k setDescr: [keyInput descr]]; return k; } break; case 2: { TargetConfig* c = [[TargetConfig alloc] init]; - [c setConfig: [[configsController configs] objectAtIndex: [configPopup indexOfSelectedItem]]]; + [c setConfig: [configsController configs][[configPopup indexOfSelectedItem]]]; return c; } case 3: { - // mouse X + // mouse X/Y TargetMouseMove *mm = [[TargetMouseMove alloc] init]; - [mm setDir: 0]; + [mm setDir: [mouseDirSelect selectedSegment]]; return mm; } case 4: { - // mouse Y - TargetMouseMove *mm = [[TargetMouseMove alloc] init]; - [mm setDir: 1]; - return mm; - } - case 5: { // mouse button TargetMouseBtn *mb = [[TargetMouseBtn alloc] init]; - [mb setWhich: [mouseBtnRadio selectedCol]]; + if ([mouseBtnSelect selectedSegment] == 0) { + [mb setWhich: kCGMouseButtonLeft]; + } + else { + [mb setWhich: kCGMouseButtonRight]; + } return mb; } + case 5: { + // scroll + TargetMouseScroll *ms = [[TargetMouseScroll alloc] init]; + if ([scrollDirSelect selectedSegment] == 0) { + [ms setHowMuch: -1]; + } + else { + [ms setHowMuch: 1]; + } + return ms; + } + case 6: { + // toggle mouse scope + TargetToggleMouseScope *tms = [[TargetToggleMouseScope alloc] init]; + return tms; + } } return NULL; } @@ -63,16 +107,18 @@ } -(void) commit { - id action = [joystickController selectedAction]; - if(action) { - Target* target = [self state]; - [[configsController currentConfig] setTarget: target forAction: action]; + JSAction *action = [joystickController selectedAction]; + if (action) { + configsController.currentConfig[action] = self.state; } } -(void) reset { [keyInput clear]; [radioButtons setState: 1 atRow: 0 column: 0]; + [mouseDirSelect setSelectedSegment: 0]; + [mouseBtnSelect setSelectedSegment: 0]; + [scrollDirSelect setSelectedSegment: 0]; [self refreshConfigsPreservingSelection: NO]; } @@ -80,6 +126,9 @@ [radioButtons setEnabled: enabled]; [keyInput setEnabled: enabled]; [configPopup setEnabled: enabled]; + [mouseDirSelect setEnabled: enabled]; + [mouseBtnSelect setEnabled: enabled]; + [scrollDirSelect setEnabled: enabled]; } -(BOOL) enabled { return [radioButtons isEnabled]; @@ -95,7 +144,7 @@ } else { [self setEnabled: YES]; } - Target* target = [[configsController currentConfig] getTargetForAction: jsaction]; + Target* target = configsController.currentConfig[jsaction]; id act = jsaction; NSString* actFullName = [act name]; @@ -113,18 +162,38 @@ } else if([target isKindOfClass: [TargetConfig class]]) { [radioButtons setState:1 atRow: 2 column: 0]; [configPopup selectItemAtIndex: [[configsController configs] indexOfObject: [(TargetConfig*)target config]]]; - } else if ([target isKindOfClass: [TargetMouseMove class]]) { - if ([(TargetMouseMove *)target dir] == 0) - [radioButtons setState:1 atRow: 3 column: 0]; + } + else if ([target isKindOfClass: [TargetMouseMove class]]) { + [radioButtons setState:1 atRow: 3 column: 0]; + [mouseDirSelect setSelectedSegment: [(TargetMouseMove *)target dir]]; + } + else if ([target isKindOfClass: [TargetMouseBtn class]]) { + [radioButtons setState: 1 atRow: 4 column: 0]; + if ([(TargetMouseBtn *)target which] == kCGMouseButtonLeft) + [mouseBtnSelect setSelectedSegment: 0]; else - [radioButtons setState:1 atRow: 4 column: 0]; - } else { + [mouseBtnSelect setSelectedSegment: 1]; + } + else if ([target isKindOfClass: [TargetMouseScroll class]]) { + [radioButtons setState: 1 atRow: 5 column: 0]; + if ([(TargetMouseScroll *)target howMuch] < 0) + [scrollDirSelect setSelectedSegment: 0]; + else + [scrollDirSelect setSelectedSegment: 1]; + } + else if ([target isKindOfClass: [TargetToggleMouseScope class]]) { + [radioButtons setState: 1 atRow: 6 column: 0]; + } else { [NSException raise:@"Unknown target subclass" format:@"Unknown target subclass"]; } } -(void) focusKey { - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: keyInput]; + Target *currentTarget = configsController.currentConfig[currentJsaction]; + if (!currentTarget || [currentTarget isKindOfClass:[TargetKeyboard class]]) + [[[NSApplication sharedApplication] mainWindow] makeFirstResponder: keyInput]; + else + [keyInput resignFirstResponder]; } -(void) refreshConfigsPreservingSelection: (BOOL) preserve { @@ -133,7 +202,7 @@ NSArray* configs = [configsController configs]; [configPopup removeAllItems]; for(int i=0; i<[configs count]; i++) { - [configPopup addItemWithTitle: [[configs objectAtIndex:i]name]]; + [configPopup addItemWithTitle: [configs[i]name]]; } if(preserve) [configPopup selectItemAtIndex:initialIndex];