#import "NJOutputMouseMove.h"
#import "NJOutputMouseScroll.h"
-@implementation NJOutputController
+@implementation NJOutputController {
+ NJInput *_input;
+}
- (id)init {
if ((self = [super init])) {
selector:@selector(mappingListDidChange:)
name:NJEventMappingListChanged
object:nil];
+ [NSNotificationCenter.defaultCenter
+ addObserver:self
+ selector:@selector(mappingDidChange:)
+ name:NJEventMappingChanged
+ object:nil];
}
return self;
}
if (row != 2) {
[mappingPopup selectItemAtIndex:-1];
[mappingPopup resignIfFirstResponder];
- } else if (!mappingPopup.selectedItem)
- [mappingPopup selectItemAtIndex:0];
+ unknownMapping.hidden = YES;
+ }
if (row != 3) {
mouseDirSelect.selectedSegment = -1;
- (void)mappingChosen:(id)sender {
[radioButtons selectCellAtRow:2 column:0];
[mappingPopup.window makeFirstResponder:mappingPopup];
+ unknownMapping.hidden = YES;
[self commit];
}
[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 {
case 1:
if (keyInput.hasKeyCode) {
NJOutputKeyPress *k = [[NJOutputKeyPress alloc] init];
- k.vk = keyInput.keyCode;
+ k.keyCode = keyInput.keyCode;
return k;
} else {
return nil;
- (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 {
} else {
self.enabled = YES;
NSString *inpFullName = input.name;
- for (id <NJInputPathElement> 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];
[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 {
}
- (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) {
item.representedObject = mapping;
[mappingPopup.menu addItem:item];
}
- [mappingPopup selectItemWithRepresentedObject:current];
+ [mappingPopup selectItemWithIdenticalRepresentedObject:current];
+}
+
+- (void)mappingDidChange:(NSNotification *)note {
+ [self loadInput:_input];
}
@end