X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FNJOutputController.m;h=22c387fc9490107a4bee3a0d89e8fc7ef23556bc;hp=cbb48f7e1cab1a145ef98825de82ecd5ec470cbc;hb=6a8c6539cc3f7a4b32a9f226da6ae06074e4f0cb;hpb=9d7f100f57dded88fa998a86715a919ca471c3db diff --git a/Classes/NJOutputController.m b/Classes/NJOutputController.m index cbb48f7..22c387f 100644 --- a/Classes/NJOutputController.m +++ b/Classes/NJOutputController.m @@ -20,7 +20,9 @@ #import "NJOutputMouseMove.h" #import "NJOutputMouseScroll.h" -@implementation NJOutputController +@implementation NJOutputController { + NJInput *_input; +} - (id)init { if ((self = [super init])) { @@ -29,6 +31,11 @@ selector:@selector(mappingListDidChange:) name:NJEventMappingListChanged object:nil]; + [NSNotificationCenter.defaultCenter + addObserver:self + selector:@selector(mappingDidChange:) + name:NJEventMappingChanged + object:nil]; } return self; } @@ -48,8 +55,8 @@ if (row != 2) { [mappingPopup selectItemAtIndex:-1]; [mappingPopup resignIfFirstResponder]; - } else if (!mappingPopup.selectedItem) - [mappingPopup selectItemAtIndex:0]; + unknownMapping.hidden = YES; + } if (row != 3) { mouseDirSelect.selectedSegment = -1; @@ -103,6 +110,7 @@ - (void)mappingChosen:(id)sender { [radioButtons selectCellAtRow:2 column:0]; [mappingPopup.window makeFirstResponder:mappingPopup]; + unknownMapping.hidden = YES; [self commit]; } @@ -140,17 +148,18 @@ [radioButtons selectCellAtRow:5 column:0]; [sender.window makeFirstResponder:sender]; if (sender.state == NSOnState) { - scrollSpeedSlider.floatValue = (scrollSpeedSlider.maxValue - scrollSpeedSlider.minValue) / 2; - [scrollSpeedSlider setEnabled:YES]; + scrollSpeedSlider.floatValue = + scrollSpeedSlider.minValue + (scrollSpeedSlider.maxValue - scrollSpeedSlider.minValue) / 2; + scrollSpeedSlider.enabled = YES; } else { scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue; - [scrollSpeedSlider setEnabled:NO]; + scrollSpeedSlider.enabled = NO; } [self commit]; } - (NJOutput *)currentOutput { - return mappingsController.currentMapping[inputController.selectedInput]; + return mappingsController.currentMapping[_input]; } - (NJOutput *)makeOutput { @@ -160,7 +169,7 @@ case 1: if (keyInput.hasKeyCode) { NJOutputKeyPress *k = [[NJOutputKeyPress alloc] init]; - k.vk = keyInput.keyCode; + k.keyCode = keyInput.keyCode; return k; } else { return nil; @@ -168,7 +177,7 @@ break; case 2: { NJOutputMapping *c = [[NJOutputMapping alloc] init]; - c.mapping = mappingsController[mappingPopup.indexOfSelectedItem]; + c.mapping = mappingsController.mappings[mappingPopup.indexOfSelectedItem]; return c; } case 3: { @@ -196,24 +205,26 @@ - (void)commit { [self cleanUpInterface]; - mappingsController.currentMapping[inputController.selectedInput] = [self makeOutput]; + mappingsController.currentMapping[_input] = [self makeOutput]; [mappingsController save]; } - (BOOL)enabled { - return [radioButtons isEnabled]; + return radioButtons.isEnabled; } - (void)setEnabled:(BOOL)enabled { - [radioButtons setEnabled:enabled]; - [keyInput setEnabled:enabled]; - [mappingPopup setEnabled:enabled]; - [mouseDirSelect setEnabled:enabled]; - [mouseSpeedSlider setEnabled:enabled]; - [mouseBtnSelect setEnabled:enabled]; - [scrollDirSelect setEnabled:enabled]; - [smoothCheck setEnabled:enabled]; - [scrollSpeedSlider setEnabled:enabled && smoothCheck.isEnabled]; + radioButtons.enabled = enabled; + keyInput.enabled = enabled; + mappingPopup.enabled = enabled; + mouseDirSelect.enabled = enabled; + mouseSpeedSlider.enabled = enabled; + mouseBtnSelect.enabled = enabled; + scrollDirSelect.enabled = enabled; + smoothCheck.enabled = enabled; + scrollSpeedSlider.enabled = enabled && smoothCheck.state; + if (!enabled) + unknownMapping.hidden = YES; } - (void)loadOutput:(NJOutput *)output forInput:(NJInput *)input { @@ -223,21 +234,21 @@ } else { self.enabled = YES; NSString *inpFullName = input.name; - for (id cur = input.base; cur; cur = cur.base) { - inpFullName = [[NSString alloc] initWithFormat:@"%@ > %@", cur.name, inpFullName]; + for (NJInputPathElement *cur = input.parent; cur; cur = cur.parent) { + inpFullName = [[NSString alloc] initWithFormat:@"%@ ▸ %@", cur.name, inpFullName]; } title.stringValue = inpFullName; } if ([output isKindOfClass:NJOutputKeyPress.class]) { [radioButtons selectCellAtRow:1 column:0]; - keyInput.keyCode = [(NJOutputKeyPress*)output vk]; + keyInput.keyCode = [(NJOutputKeyPress*)output keyCode]; } else if ([output isKindOfClass:NJOutputMapping.class]) { [radioButtons selectCellAtRow:2 column:0]; - NSMenuItem *item = [mappingPopup itemWithRepresentedObject:[(NJOutputMapping *)output mapping]]; + NSMenuItem *item = [mappingPopup itemWithIdenticalRepresentedObject:[(NJOutputMapping *)output mapping]]; [mappingPopup selectItem:item]; - if (!item) - [radioButtons selectCellAtRow:self.enabled ? 0 : -1 column:0]; + unknownMapping.hidden = !!item; + unknownMapping.title = [(NJOutputMapping *)output mappingName]; } else if ([output isKindOfClass:NJOutputMouseMove.class]) { [radioButtons selectCellAtRow:3 column:0]; @@ -256,15 +267,16 @@ [scrollDirSelect selectSegmentWithTag:direction]; scrollSpeedSlider.floatValue = speed; smoothCheck.state = smooth ? NSOnState : NSOffState; - [scrollSpeedSlider setEnabled:smooth]; + scrollSpeedSlider.enabled = smooth; } else { [radioButtons selectCellAtRow:self.enabled ? 0 : -1 column:0]; } [self cleanUpInterface]; } -- (void)loadCurrent { - [self loadOutput:self.currentOutput forInput:inputController.selectedInput]; +- (void)loadInput:(NJInput *)input { + _input = input; + [self loadOutput:self.currentOutput forInput:input]; } - (void)focusKey { @@ -275,7 +287,7 @@ } - (void)mappingListDidChange:(NSNotification *)note { - NSArray *mappings = note.object; + NSArray *mappings = note.userInfo[NJMappingListKey]; NJMapping *current = mappingPopup.selectedItem.representedObject; [mappingPopup.menu removeAllItems]; for (NJMapping *mapping in mappings) { @@ -286,7 +298,11 @@ item.representedObject = mapping; [mappingPopup.menu addItem:item]; } - [mappingPopup selectItemWithRepresentedObject:current]; + [mappingPopup selectItemWithIdenticalRepresentedObject:current]; +} + +- (void)mappingDidChange:(NSNotification *)note { + [self loadInput:_input]; } @end