X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FNJOutputController.m;h=fd160e65af84f00995c93d36b0999ad1d8f99f83;hp=d022406fa6e6624210ec0eb8800a7add24c4aaa9;hb=24bdb92798b9abe86c7954042a47523791736b7c;hpb=5f3311b43f99187a9bfe2c0b38da7e64d6986da1 diff --git a/Classes/NJOutputController.m b/Classes/NJOutputController.m index d022406..fd160e6 100644 --- a/Classes/NJOutputController.m +++ b/Classes/NJOutputController.m @@ -29,6 +29,11 @@ selector:@selector(mappingListDidChange:) name:NJEventMappingListChanged object:nil]; + [NSNotificationCenter.defaultCenter + addObserver:self + selector:@selector(mappingDidChange:) + name:NJEventMappingChanged + object:nil]; } return self; } @@ -48,8 +53,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; @@ -71,16 +76,13 @@ if (row != 5) { scrollDirSelect.selectedSegment = -1; scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue; + smoothCheck.state = NSOffState; [scrollDirSelect resignIfFirstResponder]; + [scrollSpeedSlider resignIfFirstResponder]; + [smoothCheck resignIfFirstResponder]; } else { if (scrollDirSelect.selectedSegment == -1) scrollDirSelect.selectedSegment = 0; - if (scrollDirSelect.selectedSegment < 2 - && !scrollSpeedSlider.floatValue) - scrollSpeedSlider.floatValue = 15; - else if (scrollDirSelect.selectedSegment >= 2 - && scrollSpeedSlider.floatValue) - scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue; } } @@ -106,6 +108,7 @@ - (void)mappingChosen:(id)sender { [radioButtons selectCellAtRow:2 column:0]; [mappingPopup.window makeFirstResponder:mappingPopup]; + unknownMapping.hidden = YES; [self commit]; } @@ -129,8 +132,6 @@ - (void)sdirChanged:(NSView *)sender { [radioButtons selectCellAtRow:5 column:0]; - if (scrollDirSelect.selectedSegment >= 2) - scrollSpeedSlider.floatValue = 0; [sender.window makeFirstResponder:sender]; [self commit]; } @@ -138,10 +139,20 @@ - (void)scrollSpeedChanged:(NSSlider *)sender { [radioButtons selectCellAtRow:5 column:0]; [sender.window makeFirstResponder:sender]; - if (!sender.floatValue && scrollDirSelect.selectedSegment < 2) - scrollDirSelect.selectedSegment += 2; - else if (sender.floatValue && scrollDirSelect.selectedSegment >= 2) - scrollDirSelect.selectedSegment -= 2; + [self commit]; +} + +- (IBAction)scrollTypeChanged:(NSButton *)sender { + [radioButtons selectCellAtRow:5 column:0]; + [sender.window makeFirstResponder:sender]; + if (sender.state == NSOnState) { + scrollSpeedSlider.floatValue = + scrollSpeedSlider.minValue + (scrollSpeedSlider.maxValue - scrollSpeedSlider.minValue) / 2; + scrollSpeedSlider.enabled = YES; + } else { + scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue; + scrollSpeedSlider.enabled = NO; + } [self commit]; } @@ -156,7 +167,7 @@ case 1: if (keyInput.hasKeyCode) { NJOutputKeyPress *k = [[NJOutputKeyPress alloc] init]; - k.vk = keyInput.keyCode; + k.keyCode = keyInput.keyCode; return k; } else { return nil; @@ -180,10 +191,9 @@ } case 5: { NJOutputMouseScroll *ms = [[NJOutputMouseScroll alloc] init]; - ms.direction = (scrollDirSelect.selectedSegment & 1) ? 1 : -1; - ms.speed = scrollDirSelect.selectedSegment < 2 - ? scrollSpeedSlider.floatValue - : 0.f; + ms.direction = [scrollDirSelect.cell tagForSegment:scrollDirSelect.selectedSegment]; + ms.speed = scrollSpeedSlider.floatValue; + ms.smooth = smoothCheck.state == NSOnState; return ms; } default: @@ -198,18 +208,21 @@ } - (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]; - [scrollSpeedSlider setEnabled:enabled]; + 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 { @@ -219,21 +232,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]]; [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]; @@ -248,8 +261,11 @@ [radioButtons selectCellAtRow:5 column:0]; int direction = [(NJOutputMouseScroll *)output direction]; float speed = [(NJOutputMouseScroll *)output speed]; - scrollDirSelect.selectedSegment = (direction > 0) + !speed * 2; + BOOL smooth = [(NJOutputMouseScroll *)output smooth]; + [scrollDirSelect selectSegmentWithTag:direction]; scrollSpeedSlider.floatValue = speed; + smoothCheck.state = smooth ? NSOnState : NSOffState; + scrollSpeedSlider.enabled = smooth; } else { [radioButtons selectCellAtRow:self.enabled ? 0 : -1 column:0]; } @@ -268,7 +284,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) { @@ -282,4 +298,8 @@ [mappingPopup selectItemWithRepresentedObject:current]; } +- (void)mappingDidChange:(NSNotification *)note { + [self loadCurrent]; +} + @end