X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FNJDeviceController.m;h=bdd1bbf9e0c21f382f861c97bf9ec95c0877b3e7;hp=b0e8de37e701f8c88aeba0b0c5e8baa19525ee6d;hb=e7c0b2d96e9e3209b5ba80cc1fdc8e7213cb5302;hpb=58ce8f7f50f382f18e7b416eca737803af284868 diff --git a/Classes/NJDeviceController.m b/Classes/NJDeviceController.m index b0e8de3..bdd1bbf 100644 --- a/Classes/NJDeviceController.m +++ b/Classes/NJDeviceController.m @@ -68,15 +68,6 @@ [_continuousOutputsTick invalidate]; } -- (id)elementForUID:(NSString *)uid { - for (NJDevice *dev in _devices) { - id item = [dev elementForUID:uid]; - if (item) - return item; - } - return nil; -} - - (void)addRunningOutput:(NJOutput *)output { // Axis events will trigger every small movement, don't keep // re-adding them or they trigger multiple times each time. @@ -126,22 +117,27 @@ } } -- (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]; +- (void)hidManager:(NJHIDManager *)manager deviceAdded:(IOHIDDeviceRef)device { + NJDevice *match = [[NJDevice alloc] initWithDevice:device]; + [devicesViewController beginUpdates]; + [self addDevice:match]; [devicesViewController addedDevice:match atIndex:_devices.count - 1]; + [devicesViewController endUpdates]; } - (NJDevice *)findDeviceByRef:(IOHIDDeviceRef)device { @@ -156,8 +152,10 @@ IOHIDDeviceRegisterInputValueCallback(device, NULL, NULL); if (match) { NSInteger idx = [_devices indexOfObjectIdenticalTo:match]; + [devicesViewController beginUpdates]; [_devices removeObjectAtIndex:idx]; [devicesViewController removedDevice:match atIndex:idx]; + [devicesViewController endUpdates]; } } @@ -230,7 +228,7 @@ } - (void)stopHidIfDisabled:(NSNotification *)application { - if (!self.simulatingEvents) + if (!self.simulatingEvents && !NSProcessInfo.processInfo.isBeingDebugged) [self stopHid]; } @@ -238,21 +236,40 @@ self.simulatingEvents = sender.state == NSOnState; } -- (void)deviceViewControllerDidSelectNothing:(NJDeviceViewController *)devices { +- (NSInteger)numberOfDevicesInDeviceList:(NJDeviceViewController *)dvc { + return _devices.count; +} + +- (NJDevice *)deviceViewController:(NJDeviceViewController *)dvc + deviceForIndex:(NSUInteger)idx { + return _devices[idx]; +} + +- (id)deviceViewController:(NJDeviceViewController *)dvc + elementForUID:(NSString *)uid { + for (NJDevice *dev in _devices) { + id item = [dev elementForUID:uid]; + if (item) + return item; + } + return nil; +} + +- (void)deviceViewControllerDidSelectNothing:(NJDeviceViewController *)dvc { [outputController loadCurrent]; } -- (void)deviceViewController:(NJDeviceViewController *)devices +- (void)deviceViewController:(NJDeviceViewController *)dvc didSelectBranch:(NJInputPathElement *)handler { [outputController loadCurrent]; } -- (void)deviceViewController:(NJDeviceViewController *)devices +- (void)deviceViewController:(NJDeviceViewController *)dvc didSelectHandler:(NJInputPathElement *)handler { [outputController loadCurrent]; } -- (void)deviceViewController:(NJDeviceViewController *)devices +- (void)deviceViewController:(NJDeviceViewController *)dvc didSelectDevice:(NJInputPathElement *)device { [outputController loadCurrent]; }