X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=NJOutputController.m;fp=NJOutputController.m;h=0000000000000000000000000000000000000000;hp=bcafe0d3a96f207feb1b5207a636ed0593db8863;hb=0064c1fbff36795885a9724081af2a17d83c20a3;hpb=56d825ba259066d847a9fc3f9c8c0c0a362a1507 diff --git a/NJOutputController.m b/NJOutputController.m deleted file mode 100644 index bcafe0d..0000000 --- a/NJOutputController.m +++ /dev/null @@ -1,283 +0,0 @@ -// -// NJOutputController.m -// Enjoy -// -// Created by Sam McCall on 5/05/09. -// - -#import "NJOutputController.h" - -#import "NJMappingsController.h" -#import "NJMapping.h" -#import "NJInput.h" -#import "NJEvents.h" -#import "NJDeviceController.h" -#import "NJKeyInputField.h" -#import "NJOutputMapping.h" -#import "NJOutputController.h" -#import "NJOutputKeyPress.h" -#import "NJOutputMouseButton.h" -#import "NJOutputMouseMove.h" -#import "NJOutputMouseScroll.h" - -@implementation NJOutputController - -- (id)init { - if ((self = [super init])) { - [NSNotificationCenter.defaultCenter - addObserver:self - selector:@selector(mappingListDidChange:) - name:NJEventMappingListChanged - object:nil]; - } - return self; -} - -- (void)dealloc { - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -- (void)cleanUpInterface { - NSInteger row = radioButtons.selectedRow; - - if (row != 1) { - keyInput.keyCode = NJKeyInputFieldEmpty; - [keyInput resignIfFirstResponder]; - } - - if (row != 2) { - [mappingPopup selectItemAtIndex:-1]; - [mappingPopup resignIfFirstResponder]; - } else if (!mappingPopup.selectedItem) - [mappingPopup selectItemAtIndex:0]; - - if (row != 3) { - mouseDirSelect.selectedSegment = -1; - mouseSpeedSlider.floatValue = mouseSpeedSlider.minValue; - [mouseDirSelect resignIfFirstResponder]; - } else { - if (mouseDirSelect.selectedSegment == -1) - mouseDirSelect.selectedSegment = 0; - if (!mouseSpeedSlider.floatValue) - mouseSpeedSlider.floatValue = 4; - } - - if (row != 4) { - mouseBtnSelect.selectedSegment = -1; - [mouseBtnSelect resignIfFirstResponder]; - } else if (mouseBtnSelect.selectedSegment == -1) - mouseBtnSelect.selectedSegment = 0; - - if (row != 5) { - scrollDirSelect.selectedSegment = -1; - scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue; - [scrollDirSelect resignIfFirstResponder]; - } else { - if (scrollDirSelect.selectedSegment == -1) - scrollDirSelect.selectedSegment = 0; - if (scrollDirSelect.selectedSegment < 2 - && !scrollSpeedSlider.floatValue) - scrollSpeedSlider.floatValue = 15.f; - else if (scrollDirSelect.selectedSegment >= 2 - && scrollSpeedSlider.floatValue) - scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue; - } - -} - -- (IBAction)radioChanged:(NSView *)sender { - [sender.window makeFirstResponder:sender]; - if (radioButtons.selectedRow == 1) - [keyInput.window makeFirstResponder:keyInput]; - [self commit]; -} - -- (void)keyInputField:(NJKeyInputField *)keyInput didChangeKey:(CGKeyCode)keyCode { - [radioButtons selectCellAtRow:1 column:0]; - [radioButtons.window makeFirstResponder:radioButtons]; - [self commit]; -} - -- (void)keyInputFieldDidClear:(NJKeyInputField *)keyInput { - [radioButtons selectCellAtRow:0 column:0]; - [self commit]; -} - -- (void)mappingChosen:(id)sender { - [radioButtons selectCellAtRow:2 column:0]; - [mappingPopup.window makeFirstResponder:mappingPopup]; - [self commit]; -} - -- (void)mdirChanged:(NSView *)sender { - [radioButtons selectCellAtRow:3 column:0]; - [sender.window makeFirstResponder:sender]; - [self commit]; -} - -- (void)mouseSpeedChanged:(NSSlider *)sender { - [radioButtons selectCellAtRow:3 column:0]; - [sender.window makeFirstResponder:sender]; - [self commit]; -} - -- (void)mbtnChanged:(NSView *)sender { - [radioButtons selectCellAtRow:4 column:0]; - [sender.window makeFirstResponder:sender]; - [self commit]; -} - -- (void)sdirChanged:(NSView *)sender { - [radioButtons selectCellAtRow:5 column:0]; - [sender.window makeFirstResponder:sender]; - [self commit]; -} - -- (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]; -} - -- (NJOutput *)currentOutput { - return mappingsController.currentMapping[inputController.selectedInput]; -} - -- (NJOutput *)makeOutput { - switch (radioButtons.selectedRow) { - case 0: - return nil; - case 1: - if (keyInput.hasKeyCode) { - NJOutputKeyPress *k = [[NJOutputKeyPress alloc] init]; - k.vk = keyInput.keyCode; - return k; - } else { - return nil; - } - break; - case 2: { - NJOutputMapping *c = [[NJOutputMapping alloc] init]; - c.mapping = mappingsController[mappingPopup.indexOfSelectedItem]; - return c; - } - case 3: { - NJOutputMouseMove *mm = [[NJOutputMouseMove alloc] init]; - mm.axis = mouseDirSelect.selectedSegment; - mm.speed = mouseSpeedSlider.floatValue; - return mm; - } - case 4: { - NJOutputMouseButton *mb = [[NJOutputMouseButton alloc] init]; - mb.button = mouseBtnSelect.selectedSegment == 0 ? kCGMouseButtonLeft : kCGMouseButtonRight; - return mb; - } - case 5: { - NJOutputMouseScroll *ms = [[NJOutputMouseScroll alloc] init]; - ms.direction = (scrollDirSelect.selectedSegment & 1) ? 1 : -1; - ms.speed = scrollDirSelect.selectedSegment < 2 - ? scrollSpeedSlider.floatValue - : 0.f; - return ms; - } - default: - return nil; - } -} - -- (void)commit { - [self cleanUpInterface]; - mappingsController.currentMapping[inputController.selectedInput] = [self makeOutput]; - [mappingsController save]; -} - -- (BOOL)enabled { - 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]; -} - -- (void)loadOutput:(NJOutput *)output forInput:(NJInput *)input { - if (!input) { - self.enabled = NO; - title.stringValue = @""; - } else { - self.enabled = YES; - NSString *inpFullName = input.name; - for (id cur = input.base; cur; cur = cur.base) { - 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]; - } 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]; - } - else if ([output isKindOfClass:NJOutputMouseMove.class]) { - [radioButtons selectCellAtRow:3 column:0]; - mouseDirSelect.selectedSegment = [(NJOutputMouseMove *)output axis]; - mouseSpeedSlider.floatValue = [(NJOutputMouseMove *)output speed]; - } - else if ([output isKindOfClass:NJOutputMouseButton.class]) { - [radioButtons selectCellAtRow:4 column:0]; - mouseBtnSelect.selectedSegment = [(NJOutputMouseButton *)output button] == kCGMouseButtonLeft ? 0 : 1; - } - else if ([output isKindOfClass:NJOutputMouseScroll.class]) { - [radioButtons selectCellAtRow:5 column:0]; - int direction = [(NJOutputMouseScroll *)output direction]; - float speed = [(NJOutputMouseScroll *)output speed]; - scrollDirSelect.selectedSegment = (direction > 0) + !speed * 2; - scrollSpeedSlider.floatValue = speed; - } else { - [radioButtons selectCellAtRow:self.enabled ? 0 : -1 column:0]; - } - [self cleanUpInterface]; -} - -- (void)loadCurrent { - [self loadOutput:self.currentOutput forInput:inputController.selectedInput]; -} - -- (void)focusKey { - if (radioButtons.selectedRow <= 1) - [keyInput.window makeFirstResponder:keyInput]; - else - [keyInput resignIfFirstResponder]; -} - -- (void)mappingListDidChange:(NSNotification *)note { - NSArray *mappings = note.object; - NJMapping *current = mappingPopup.selectedItem.representedObject; - [mappingPopup.menu removeAllItems]; - for (NJMapping *mapping in mappings) { - NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:mapping.name - action:@selector(mappingChosen:) - keyEquivalent:@""]; - item.target = self; - item.representedObject = mapping; - [mappingPopup.menu addItem:item]; - } - [mappingPopup selectItemWithRepresentedObject:current]; -} - -@end