[_continuousOutputsTick invalidate];
}
-- (void)expandRecursive:(id <NJInputPathElement>)pathElement {
+- (void)expandRecursive:(NJInputPathElement *)pathElement {
if (pathElement) {
- [self expandRecursive:pathElement.base];
+ [self expandRecursive:pathElement.parent];
[outlineView expandItem:pathElement];
}
}
[self expandRecursive:handler];
[outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:[outlineView rowForItem:handler]]
byExtendingSelection: NO];
- [outputController focusKey];
+ if (!self.simulatingEvents)
+ [outputController focusKey];
}
- (void)hidManager:(NJHIDManager *)manager
valueChanged:(IOHIDValueRef)value
fromDevice:(IOHIDDeviceRef)device {
- if (self.translatingEvents) {
+ if (self.simulatingEvents
+ && !NSApplication.sharedApplication.isActive) {
[self runOutputForDevice:device value:value];
} else {
[self showOutputForDevice:device value:value];
}
- (void)hidManager:(NJHIDManager *)manager didError:(NSError *)error {
- [outlineView.window presentError:error
- modalForWindow:outlineView.window
- delegate:nil
- didPresentSelector:nil
- contextInfo:nil];
+ // 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 (!outlineView.window.attachedSheet) {
+ [NSApplication.sharedApplication activateIgnoringOtherApps:YES];
+ [outlineView.window makeKeyAndOrderFront:nil];
+ [outlineView.window presentError:error
+ modalForWindow:outlineView.window
+ delegate:nil
+ didPresentSelector:nil
+ contextInfo:nil];
+ }
+ self.simulatingEvents = NO;
+ if (manager.running)
+ [self hidManagerDidStart:manager];
+ else
+ [self hidManagerDidStop:manager];
}
- (void)hidManagerDidStart:(NJHIDManager *)manager {
}
- (NJInput *)selectedInput {
- id <NJInputPathElement> item = [outlineView itemAtRow:outlineView.selectedRow];
- return (!item.children && item.base) ? item : nil;
+ NJInputPathElement *item = [outlineView itemAtRow:outlineView.selectedRow];
+ return (NJInput *)((!item.children && item.parent) ? item : nil);
}
- (NSInteger)outlineView:(NSOutlineView *)outlineView
- numberOfChildrenOfItem:(id <NJInputPathElement>)item {
+ numberOfChildrenOfItem:(NJInputPathElement *)item {
return item ? item.children.count : _devices.count;
}
- (BOOL)outlineView:(NSOutlineView *)outlineView
- isItemExpandable:(id <NJInputPathElement>)item {
+ isItemExpandable:(NJInputPathElement *)item {
return item ? [[item children] count] > 0: YES;
}
- (id)outlineView:(NSOutlineView *)outlineView
child:(NSInteger)index
- ofItem:(id <NJInputPathElement>)item {
+ ofItem:(NJInputPathElement *)item {
return item ? item.children[index] : _devices[index];
}
- (id)outlineView:(NSOutlineView *)outlineView
objectValueForTableColumn:(NSTableColumn *)tableColumn
- byItem:(id <NJInputPathElement>)item {
+ byItem:(NJInputPathElement *)item {
return item ? item.name : @"root";
}
- (void)outlineViewSelectionDidChange:(NSNotification *)notification {
- id <NJInputPathElement> item = [outlineView itemAtRow:outlineView.selectedRow];
+ NJInputPathElement *item = [outlineView itemAtRow:outlineView.selectedRow];
if (item)
[NSUserDefaults.standardUserDefaults setObject:item.uid
forKey:@"selected input"];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView
- isGroupItem:(id <NJInputPathElement>)item {
+ isGroupItem:(NJInputPathElement *)item {
return [item isKindOfClass:NJDevice.class];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView_
- shouldSelectItem:(id <NJInputPathElement>)item {
+ shouldSelectItem:(NJInputPathElement *)item {
return ![self outlineView:outlineView_ isGroupItem:item];
}
- (void)outlineViewItemDidExpand:(NSNotification *)notification {
- id <NJInputPathElement> item = notification.userInfo[@"NSObject"];
+ NJInputPathElement *item = notification.userInfo[@"NSObject"];
NSString *uid = item.uid;
if (![_expanded containsObject:uid])
[_expanded addObject:uid];
}
- (void)outlineViewItemDidCollapse:(NSNotification *)notification {
- id <NJInputPathElement> item = notification.userInfo[@"NSObject"];
+ NJInputPathElement *item = notification.userInfo[@"NSObject"];
[_expanded removeObject:item.uid];
[NSUserDefaults.standardUserDefaults setObject:_expanded
forKey:@"expanded rows"];
}
-- (void)setTranslatingEvents:(BOOL)translatingEvents {
- if (translatingEvents != _translatingEvents) {
- _translatingEvents = translatingEvents;
- NSInteger state = translatingEvents ? NSOnState : NSOffState;
+- (void)setSimulatingEvents:(BOOL)simulatingEvents {
+ if (simulatingEvents != _simulatingEvents) {
+ _simulatingEvents = simulatingEvents;
+ NSInteger state = simulatingEvents ? NSOnState : NSOffState;
translatingEventsButton.state = state;
- NSString *name = translatingEvents
- ? NJEventTranslationActivated
- : NJEventTranslationDeactivated;
+ NSString *name = simulatingEvents
+ ? NJEventSimulationStarted
+ : NJEventSimulationStopped;
[NSNotificationCenter.defaultCenter postNotificationName:name
object:self];
- if (!translatingEvents && !NSApplication.sharedApplication.isActive)
+ if (!simulatingEvents && !NSApplication.sharedApplication.isActive)
[self stopHid];
- else if (translatingEvents || NSApplication.sharedApplication.isActive)
+ else
[self startHid];
}
}
}
- (void)stopHidIfDisabled:(NSNotification *)application {
- if (!self.translatingEvents)
+ if (!self.simulatingEvents)
[self stopHid];
}
-- (IBAction)translatingEventsChanged:(NSButton *)sender {
- self.translatingEvents = sender.state == NSOnState;
+- (IBAction)simulatingEventsChanged:(NSButton *)sender {
+ self.simulatingEvents = sender.state == NSOnState;
}
@end