X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FEnjoyableApplicationDelegate.m;h=ca641f7bb137b2aeaefec3942eb52b90ec3bd638;hp=7c9ae7e7964689ed8ff0d1656266376b905fae7e;hb=6a7c78afa7b8a34901f59a79afe41d18855734bc;hpb=4a8e67a7294e8e527e2be9d8f5f39aae60691697 diff --git a/Classes/EnjoyableApplicationDelegate.m b/Classes/EnjoyableApplicationDelegate.m index 7c9ae7e..ca641f7 100644 --- a/Classes/EnjoyableApplicationDelegate.m +++ b/Classes/EnjoyableApplicationDelegate.m @@ -151,7 +151,11 @@ } else if (self.mappingsController[mapping.name]) { [self.mappingsController[mapping.name] mergeEntriesFrom:mapping]; } else if (mapping) { + [self.mvc beginUpdates]; [self.mappingsController addMapping:mapping]; + [self.mvc addedMappingAtIndex:self.mappingsController.count - 1 startEditing:NO]; + [self.mvc endUpdates]; + [self.mappingsController activateMapping:mapping]; } else { [window presentError:error modalForWindow:window @@ -360,7 +364,10 @@ } else if (self.mappingsController[mapping.name]) { [self.mappingsController[mapping.name] mergeEntriesFrom:mapping]; } else if (mapping) { + [self.mvc beginUpdates]; + [self.mvc addedMappingAtIndex:index startEditing:NO]; [self.mappingsController insertMapping:mapping atIndex:index]; + [self.mvc endUpdates]; } return !!mapping; } @@ -379,4 +386,75 @@ [self.mappingsController activateMapping:self.mappingsController[idx]]; } +- (id)deviceViewController:(NJDeviceViewController *)dvc + elementForUID:(NSString *)uid { + return self.deviceController[uid]; +} + +- (void)deviceViewControllerDidSelectNothing:(NJDeviceViewController *)dvc { + [self.outputController loadInput:dvc.selectedHandler]; +} + +- (void)deviceViewController:(NJDeviceViewController *)dvc + didSelectBranch:(NJInputPathElement *)handler { + [self.outputController loadInput:dvc.selectedHandler]; +} + +- (void)deviceViewController:(NJDeviceViewController *)dvc + didSelectHandler:(NJInputPathElement *)handler { + [self.outputController loadInput:dvc.selectedHandler]; +} + +- (void)deviceViewController:(NJDeviceViewController *)dvc + didSelectDevice:(NJInputPathElement *)device { + [self.outputController loadInput:dvc.selectedHandler]; +} + +- (void)deviceController:(NJDeviceController *)dc + didAddDevice:(NJDevice *)device { + [self.dvc addedDevice:device atIndex:dc.count - 1]; +} + +- (void)deviceController:(NJDeviceController *)dc + didRemoveDeviceAtIndex:(NSInteger)idx { + [self.dvc removedDeviceAtIndex:idx]; +} + +- (void)deviceControllerDidStartHID:(NJDeviceController *)dc { + [self.dvc hidStarted]; +} + +- (void)deviceControllerDidStopHID:(NJDeviceController *)dc { + [self.dvc hidStopped]; +} + +- (void)deviceController:(NJDeviceController *)dc didInput:(NJInput *)input { + [self.outputController loadInput:input]; + [self.outputController focusKey]; +} + +- (void)deviceController:(NJDeviceController *)dc 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 (!window.attachedSheet) { + [NSApplication.sharedApplication activateIgnoringOtherApps:YES]; + [window makeKeyAndOrderFront:nil]; + [window presentError:error + modalForWindow:window + delegate:nil + didPresentSelector:nil + contextInfo:nil]; + } +} + +- (NSInteger)numberOfDevicesInDeviceList:(NJDeviceViewController *)dvc { + return self.deviceController.count; +} + +- (NJDevice *)deviceViewController:(NJDeviceViewController *)dvc + deviceForIndex:(NSUInteger)idx { + return self.deviceController[idx]; +} + @end