2 // EnjoyableApplicationDelegate.m
5 // Created by Sam McCall on 4/05/09.
8 #import "EnjoyableApplicationDelegate.h"
11 #import "NJMappingsController.h"
12 #import "NJDeviceController.h"
13 #import "NJOutputController.h"
16 @implementation EnjoyableApplicationDelegate {
17 NSInteger mappingsMenuIndex;
20 - (void)didSwitchApplication:(NSNotification *)notification {
21 NSRunningApplication *currentApp = notification.userInfo[NSWorkspaceApplicationKey];
22 [self.mappingsController activateMappingForProcess:currentApp.localizedName];
25 - (void)applicationDidFinishLaunching:(NSNotification *)notification {
26 [NSNotificationCenter.defaultCenter
28 selector:@selector(mappingDidChange:)
29 name:NJEventMappingChanged
31 [NSNotificationCenter.defaultCenter
33 selector:@selector(eventTranslationActivated:)
34 name:NJEventTranslationActivated
36 [NSNotificationCenter.defaultCenter
38 selector:@selector(eventTranslationDeactivated:)
39 name:NJEventTranslationDeactivated
42 mappingsMenuIndex = dockMenuBase.numberOfItems;
43 while (![dockMenuBase itemAtIndex:mappingsMenuIndex - 1].isSeparatorItem)
46 self.outputController.enabled = NO;
47 [self.inputController setup];
48 [self.mappingsController load];
51 - (void)applicationWillTerminate:(NSNotification *)aNotification {
52 [NSUserDefaults.standardUserDefaults synchronize];
55 - (void)eventTranslationActivated:(NSNotification *)note {
56 [NSWorkspace.sharedWorkspace.notificationCenter
58 selector:@selector(didSwitchApplication:)
59 name:NSWorkspaceDidActivateApplicationNotification
61 NSLog(@"Listening for application changes.");
64 - (void)eventTranslationDeactivated:(NSNotification *)note {
65 [NSWorkspace.sharedWorkspace.notificationCenter
67 name:NSWorkspaceDidActivateApplicationNotification
69 NSLog(@"Ignoring application changes.");
72 - (IBAction)toggleActivity:(id)sender {
73 self.inputController.translatingEvents = !self.inputController.translatingEvents;
76 - (void)mappingsChanged {
77 NSInteger removeFrom = mappingsMenuIndex;
78 while (dockMenuBase.numberOfItems > removeFrom)
79 [dockMenuBase removeItemAtIndex:dockMenuBase.numberOfItems - 1];
81 for (NJMapping *mapping in self.mappingsController) {
82 NSString *keyEquiv = ++added < 10 ? @(added).stringValue : @"";
83 [dockMenuBase addItemWithTitle:mapping.name
84 action:@selector(chooseMapping:)
85 keyEquivalent:keyEquiv];
88 [_outputController refreshMappings];
91 - (void)mappingDidChange:(NSNotification *)note {
92 NJMapping *current = note.object;
93 NSArray *mappings = self.mappingsController.mappings;
94 for (NSUInteger i = 0; i < mappings.count; ++i)
95 [dockMenuBase itemAtIndex:i + mappingsMenuIndex].state = mappings[i] == current;
98 - (void)chooseMapping:(id)sender {
99 NSInteger idx = [dockMenuBase indexOfItem:sender] - mappingsMenuIndex;
100 NJMapping *chosen = self.mappingsController[idx];
101 [_mappingsController activateMapping:chosen];