X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FNJDeviceController.m;h=1b64aaf3f694e5dd26eb3c8324ebf0de77c82e04;hp=b0e8de37e701f8c88aeba0b0c5e8baa19525ee6d;hb=6cee2033d1c0fc0dacf444064305b9e7e87672a9;hpb=58ce8f7f50f382f18e7b416eca737803af284868 diff --git a/Classes/NJDeviceController.m b/Classes/NJDeviceController.m index b0e8de3..1b64aaf 100644 --- a/Classes/NJDeviceController.m +++ b/Classes/NJDeviceController.m @@ -12,9 +12,7 @@ #import "NJDevice.h" #import "NJInput.h" #import "NJOutput.h" -#import "NJOutputController.h" #import "NJEvents.h" -#import "NJDeviceViewController.h" @implementation NJDeviceController { NJHIDManager *_hidManager; @@ -68,13 +66,12 @@ [_continuousOutputsTick invalidate]; } -- (id)elementForUID:(NSString *)uid { - for (NJDevice *dev in _devices) { - id item = [dev elementForUID:uid]; - if (item) - return item; - } - return nil; +- (NJDevice *)objectAtIndexedSubscript:(NSUInteger)idx { + return idx < _devices.count ? _devices[idx] : nil; +} + +- (NSUInteger)count { + return _devices.count; } - (void)addRunningOutput:(NJOutput *)output { @@ -111,8 +108,7 @@ if (!handler) return; - [devicesViewController expandAndSelectItem:handler]; - [outputController focusKey]; + [self.delegate deviceController:self didInput:handler]; } - (void)hidManager:(NJHIDManager *)manager @@ -126,22 +122,25 @@ } } -- (void)hidManager:(NJHIDManager *)manager deviceAdded:(IOHIDDeviceRef)device { - NJDevice *match = [[NJDevice alloc] initWithDevice:device]; - match.index = 1; +- (void)addDevice:(NJDevice *)device { BOOL available; do { available = YES; for (NJDevice *used in _devices) { - if ([used isEqual:match]) { - match.index += 1; + if ([used isEqual:device]) { + device.index += 1; available = NO; } } } while (!available); + + [_devices addObject:device]; +} - [_devices addObject:match]; - [devicesViewController addedDevice:match atIndex:_devices.count - 1]; +- (void)hidManager:(NJHIDManager *)manager deviceAdded:(IOHIDDeviceRef)device { + NJDevice *match = [[NJDevice alloc] initWithDevice:device]; + [self addDevice:match]; + [self.delegate deviceController:self didAddDevice:match]; } - (NJDevice *)findDeviceByRef:(IOHIDDeviceRef)device { @@ -153,11 +152,10 @@ - (void)hidManager:(NJHIDManager *)manager deviceRemoved:(IOHIDDeviceRef)device { NJDevice *match = [self findDeviceByRef:device]; - IOHIDDeviceRegisterInputValueCallback(device, NULL, NULL); if (match) { NSInteger idx = [_devices indexOfObjectIdenticalTo:match]; [_devices removeObjectAtIndex:idx]; - [devicesViewController removedDevice:match atIndex:idx]; + [self.delegate deviceController:self didRemoveDeviceAtIndex:idx]; } } @@ -175,28 +173,17 @@ } - (void)hidManager:(NJHIDManager *)manager didError:(NSError *)error { - // Since the error shows the window, it can trigger another attempt - // to re-open the HID manager, which will also probably fail and error, - // so don't bother repeating ourselves. - if (!simulatingEventsButton.window.attachedSheet) { - [NSApplication.sharedApplication activateIgnoringOtherApps:YES]; - [simulatingEventsButton.window makeKeyAndOrderFront:nil]; - [simulatingEventsButton.window presentError:error - modalForWindow:simulatingEventsButton.window - delegate:nil - didPresentSelector:nil - contextInfo:nil]; - } + [self.delegate deviceController:self didError:error]; self.simulatingEvents = NO; } - (void)hidManagerDidStart:(NJHIDManager *)manager { - [devicesViewController hidStarted]; + [self.delegate deviceControllerDidStartHID:self]; } - (void)hidManagerDidStop:(NJHIDManager *)manager { [_devices removeAllObjects]; - [devicesViewController hidStopped]; + [self.delegate deviceControllerDidStopHID:self]; } - (void)startHid { @@ -207,15 +194,9 @@ [_hidManager stop]; } -- (NJInput *)selectedInput { - return (NJInput *)devicesViewController.selectedHandler; -} - - (void)setSimulatingEvents:(BOOL)simulatingEvents { if (simulatingEvents != _simulatingEvents) { _simulatingEvents = simulatingEvents; - NSInteger state = simulatingEvents ? NSOnState : NSOffState; - simulatingEventsButton.state = state; NSString *name = simulatingEvents ? NJEventSimulationStarted : NJEventSimulationStopped; @@ -230,31 +211,17 @@ } - (void)stopHidIfDisabled:(NSNotification *)application { - if (!self.simulatingEvents) + if (!self.simulatingEvents && !NSProcessInfo.processInfo.isBeingDebugged) [self stopHid]; } -- (IBAction)simulatingEventsChanged:(NSButton *)sender { - self.simulatingEvents = sender.state == NSOnState; -} - -- (void)deviceViewControllerDidSelectNothing:(NJDeviceViewController *)devices { - [outputController loadCurrent]; -} - -- (void)deviceViewController:(NJDeviceViewController *)devices - didSelectBranch:(NJInputPathElement *)handler { - [outputController loadCurrent]; -} - -- (void)deviceViewController:(NJDeviceViewController *)devices - didSelectHandler:(NJInputPathElement *)handler { - [outputController loadCurrent]; -} - -- (void)deviceViewController:(NJDeviceViewController *)devices - didSelectDevice:(NJInputPathElement *)device { - [outputController loadCurrent]; +- (NJInputPathElement *)objectForKeyedSubscript:(NSString *)uid { + for (NJDevice *dev in _devices) { + id item = [dev elementForUID:uid]; + if (item) + return item; + } + return nil; } @end