X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=TargetController.m;h=9aad491d17eb41a936d21e08f37e4eda7ef781fe;hp=0119980ed97bbbae44d70a98e586f778b164ccdf;hb=62aa5b73be6ec1e499e6b155cd0e7687c338cbaa;hpb=3090f311c3406d9c157630bc9744b9b14aa42311 diff --git a/TargetController.m b/TargetController.m index 0119980..9aad491 100644 --- a/TargetController.m +++ b/TargetController.m @@ -22,93 +22,111 @@ @implementation TargetController -- (void)keyChanged { - [radioButtons setState:1 atRow:1 column:0 ]; - [self commit]; -} - -- (IBAction)radioChanged:(id)sender { - NSInteger row, col; - [radioButtons getRow:&row column:&col ofCell:sender]; - [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; - - if (row != 1) +- (void)cleanUpInterface { + NSInteger row = radioButtons.selectedRow; + + if (row != 1) { keyInput.vk = -1; - - if (row != 2) + [keyInput resignIfFirstResponder]; + } + + if (row != 2) { [configPopup selectItemAtIndex:-1]; - else if (!configPopup.selectedItem) + [configPopup resignIfFirstResponder]; + } else if (!configPopup.selectedItem) [configPopup selectItemAtIndex:0]; - - if (row != 3) + + if (row != 3) { mouseDirSelect.selectedSegment = -1; - else if (mouseDirSelect.selectedSegment == -1) + [mouseDirSelect resignIfFirstResponder]; + } else if (mouseDirSelect.selectedSegment == -1) mouseDirSelect.selectedSegment = 0; - - if (row != 4) + + if (row != 4) { mouseBtnSelect.selectedSegment = -1; - else if (mouseBtnSelect.selectedSegment == -1) + [mouseBtnSelect resignIfFirstResponder]; + } else if (mouseBtnSelect.selectedSegment == -1) mouseBtnSelect.selectedSegment = 0; - if (row != 5) + if (row != 5) { scrollDirSelect.selectedSegment = -1; - else if (scrollDirSelect.selectedSegment == -1) - scrollDirSelect.selectedSegment = 0; - - [self commit]; + [scrollDirSelect resignIfFirstResponder]; + } else if (scrollDirSelect.selectedSegment == -1) + scrollDirSelect.selectedSegment = 0; +} + +- (IBAction)radioChanged:(NSView *)sender { + [sender.window makeFirstResponder:sender]; + if (radioButtons.selectedRow == 1) + [keyInput.window makeFirstResponder:keyInput]; + [self commit]; +} + +- (void)keyChanged { + [radioButtons selectCellAtRow:1 column:0]; + [radioButtons.window makeFirstResponder:radioButtons]; + [self commit]; +} + +- (void)configChosen:(id)sender { + [radioButtons selectCellAtRow:2 column:0]; + [configPopup.window makeFirstResponder:configPopup]; + [self commit]; +} + +- (void)mdirChanged:(NSView *)sender { + [radioButtons selectCellAtRow:3 column:0]; + [sender.window makeFirstResponder:sender]; + [self commit]; } -- (IBAction)mdirChanged:(id)sender { - [radioButtons setState:1 atRow:3 column:0]; - [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; - [self commit]; +- (void)mbtnChanged:(NSView *)sender { + [radioButtons selectCellAtRow:4 column:0]; + [sender.window makeFirstResponder:sender]; + [self commit]; } -- (IBAction)mbtnChanged:(id)sender { - [radioButtons setState:1 atRow:4 column:0]; - [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; - [self commit]; +- (void)sdirChanged:(NSView *)sender { + [radioButtons selectCellAtRow:5 column:0]; + [sender.window makeFirstResponder:sender]; + [self commit]; } -- (IBAction)sdirChanged:(id)sender { - [radioButtons setState:1 atRow:5 column:0]; - [[NSApplication sharedApplication].mainWindow makeFirstResponder:sender]; - [self commit]; +- (Target *)currentTarget { + return configsController.currentConfig[joystickController.selectedAction]; } - (Target *)makeTarget { - switch (radioButtons.selectedRow) { - case 0: - return nil; - case 1: - if (keyInput.hasKey) { - TargetKeyboard* k = [[TargetKeyboard alloc] init]; + switch (radioButtons.selectedRow) { + case 0: + return nil; + case 1: + if (keyInput.hasKey) { + TargetKeyboard *k = [[TargetKeyboard alloc] init]; k.vk = keyInput.vk; - return k; - } else { + return k; + } else { return nil; } - break; - case 2: { - TargetConfig *c = [[TargetConfig alloc] init]; - if (!configPopup.selectedItem) - [configPopup selectItemAtIndex:0]; + break; + case 2: { + TargetConfig *c = [[TargetConfig alloc] init]; c.config = configsController.configs[configPopup.indexOfSelectedItem]; - return c; - } + return c; + } case 3: { TargetMouseMove *mm = [[TargetMouseMove alloc] init]; - mm.dir = mouseDirSelect.selectedSegment; + mm.axis = mouseDirSelect.selectedSegment; return mm; } case 4: { TargetMouseBtn *mb = [[TargetMouseBtn alloc] init]; - mb.which = mouseBtnSelect.selectedSegment == 0 ? kCGMouseButtonLeft : kCGMouseButtonRight; + mb.button = mouseBtnSelect.selectedSegment == 0 ? kCGMouseButtonLeft : kCGMouseButtonRight; return mb; } case 5: { TargetMouseScroll *ms = [[TargetMouseScroll alloc] init]; - ms.howMuch = scrollDirSelect.selectedSegment ? 1 : -1; + ms.amount = scrollDirSelect.selectedSegment ? 1 : -1; return ms; } case 6: { @@ -117,99 +135,87 @@ } default: return nil; - } -} - --(void)configChosen:(id)sender { - [radioButtons setState:1 atRow:2 column:0]; - [self commit]; + } } - (void)commit { + [self cleanUpInterface]; configsController.currentConfig[joystickController.selectedAction] = [self makeTarget]; -} - -- (void)reset { - [keyInput clear]; - [radioButtons setState:1 atRow:0 column:0]; - [self refreshConfigsPreservingSelection:NO]; + [configsController save]; } - (BOOL)enabled { - return [radioButtons isEnabled]; + return [radioButtons isEnabled]; } - (void)setEnabled:(BOOL)enabled { - [radioButtons setEnabled:enabled]; - [keyInput setEnabled:enabled]; - [configPopup setEnabled:enabled]; + [radioButtons setEnabled:enabled]; + [keyInput setEnabled:enabled]; + [configPopup setEnabled:enabled]; [mouseDirSelect setEnabled:enabled]; [mouseBtnSelect setEnabled:enabled]; [scrollDirSelect setEnabled:enabled]; } --(void) load { - id jsaction = joystickController.selectedAction; - currentJsaction = jsaction; - if(!jsaction) { + +- (void)loadTarget:(Target *)target forAction:(JSAction *)action { + if (!action) { self.enabled = NO; title.stringValue = @""; - return; - } else { + } else { self.enabled = YES; - } - Target *target = configsController.currentConfig[jsaction]; - - id act = jsaction; - NSString* actFullName = [act name]; - while([act base]) { - act = [act base]; - actFullName = [[NSString alloc] initWithFormat:@"%@ > %@", [act name], actFullName]; - } - title.stringValue = [[NSString alloc] initWithFormat:@"%@ > %@", configsController.currentConfig.name, actFullName]; - - if(!target) { - [radioButtons setState:1 atRow:0 column:0]; - } else if([target isKindOfClass:[TargetKeyboard class]]) { - [radioButtons setState:1 atRow:1 column:0]; + NSString *actFullName = action.name; + for (JSAction *cur = action.base; cur; cur = cur.base) { + actFullName = [[NSString alloc] initWithFormat:@"%@ > %@", cur.name, actFullName]; + } + title.stringValue = [[NSString alloc] initWithFormat:@"%@ > %@", configsController.currentConfig.name, actFullName]; + } + + if ([target isKindOfClass:[TargetKeyboard class]]) { + [radioButtons selectCellAtRow:1 column:0]; keyInput.vk = [(TargetKeyboard*)target vk]; - } else if([target isKindOfClass:[TargetConfig class]]) { - [radioButtons setState:1 atRow:2 column:0]; - [configPopup selectItemAtIndex:[configsController.configs + } else if ([target isKindOfClass:[TargetConfig class]]) { + [radioButtons selectCellAtRow:2 column:0]; + [configPopup selectItemAtIndex:[configsController.configs indexOfObject:[(TargetConfig *)target config]]]; } else if ([target isKindOfClass:[TargetMouseMove class]]) { - [radioButtons setState:1 atRow:3 column:0]; - [mouseDirSelect setSelectedSegment:[(TargetMouseMove *)target dir]]; - } + [radioButtons selectCellAtRow:3 column:0]; + [mouseDirSelect setSelectedSegment:[(TargetMouseMove *)target axis]]; + } else if ([target isKindOfClass:[TargetMouseBtn class]]) { - [radioButtons setState:1 atRow:4 column:0]; - mouseBtnSelect.selectedSegment = [(TargetMouseBtn *)target which] == kCGMouseButtonLeft ? 0 : 1; + [radioButtons selectCellAtRow:4 column:0]; + mouseBtnSelect.selectedSegment = [(TargetMouseBtn *)target button] == kCGMouseButtonLeft ? 0 : 1; } else if ([target isKindOfClass:[TargetMouseScroll class]]) { - [radioButtons setState:1 atRow:5 column:0]; - scrollDirSelect.selectedSegment = [(TargetMouseScroll *)target howMuch] > 0; + [radioButtons selectCellAtRow:5 column:0]; + scrollDirSelect.selectedSegment = [(TargetMouseScroll *)target amount] > 0; } else if ([target isKindOfClass:[TargetToggleMouseScope class]]) { - [radioButtons setState:1 atRow:6 column:0]; + [radioButtons selectCellAtRow:6 column:0]; } else { - NSLog(@"Unknown target type %@.", target.description); - } + [radioButtons selectCellAtRow:self.enabled ? 0 : -1 column:0]; + } + [self cleanUpInterface]; +} + +- (void)loadCurrent { + [self loadTarget:[self currentTarget] forAction:joystickController.selectedAction]; } --(void) focusKey { - Target *currentTarget = configsController.currentConfig[currentJsaction]; - if (!currentTarget || [currentTarget isKindOfClass:[TargetKeyboard class]]) - [[[NSApplication sharedApplication] mainWindow] makeFirstResponder:keyInput]; +- (void)focusKey { + if (radioButtons.selectedRow <= 1) + [keyInput.window makeFirstResponder:keyInput]; else - [keyInput resignFirstResponder]; + [keyInput resignIfFirstResponder]; } -- (void)refreshConfigsPreservingSelection:(BOOL)preserve { - int initialIndex = [configPopup indexOfSelectedItem]; - [configPopup removeAllItems]; - for (Config *config in configsController.configs) - [configPopup addItemWithTitle:config.name]; - [configPopup selectItemAtIndex:preserve ? initialIndex : -1]; +- (void)refreshConfigs { + // TODO: This doesn't work when removing configs. + NSInteger initialIndex = configPopup.indexOfSelectedItem; + [configPopup removeAllItems]; + for (Config *config in configsController.configs) + [configPopup addItemWithTitle:config.name]; + [configPopup selectItemAtIndex:initialIndex]; } @end