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
18 - (void)didSwitchApplication:(NSNotification *)notification {
19 NSRunningApplication *currentApp = notification.userInfo[NSWorkspaceApplicationKey];
20 [self.mappingsController activateMappingForProcess:currentApp.localizedName];
23 - (void)applicationDidFinishLaunching:(NSNotification *)notification {
24 [NSNotificationCenter.defaultCenter
26 selector:@selector(mappingDidChange:)
27 name:NJEventMappingChanged
29 [NSNotificationCenter.defaultCenter
31 selector:@selector(mappingListDidChange:)
32 name:NJEventMappingListChanged
34 [NSNotificationCenter.defaultCenter
36 selector:@selector(eventTranslationActivated:)
37 name:NJEventTranslationActivated
39 [NSNotificationCenter.defaultCenter
41 selector:@selector(eventTranslationDeactivated:)
42 name:NJEventTranslationDeactivated
45 [self.inputController setup];
46 [self.mappingsController load];
49 - (void)applicationWillTerminate:(NSNotification *)aNotification {
50 [NSUserDefaults.standardUserDefaults synchronize];
51 [NSNotificationCenter.defaultCenter removeObserver:self];
54 - (void)eventTranslationActivated:(NSNotification *)note {
55 [NSWorkspace.sharedWorkspace.notificationCenter
57 selector:@selector(didSwitchApplication:)
58 name:NSWorkspaceDidActivateApplicationNotification
60 NSLog(@"Listening for application changes.");
63 - (void)eventTranslationDeactivated:(NSNotification *)note {
64 [NSWorkspace.sharedWorkspace.notificationCenter
66 name:NSWorkspaceDidActivateApplicationNotification
68 NSLog(@"Ignoring application changes.");
71 - (void)mappingListDidChange:(NSNotification *)note {
72 NSArray *mappings = note.object;
73 while (dockMenuBase.lastItem.representedObject)
74 [dockMenuBase removeLastItem];
76 for (NJMapping *mapping in mappings) {
77 NSString *keyEquiv = ++added < 10 ? @(added).stringValue : @"";
78 NSMenuItem *item = [dockMenuBase addItemWithTitle:mapping.name
79 action:@selector(chooseMapping:)
80 keyEquivalent:keyEquiv];
81 item.representedObject = mapping;
83 [_outputController refreshMappings];
86 - (void)mappingDidChange:(NSNotification *)note {
87 NJMapping *current = note.object;
88 for (NSMenuItem *item in dockMenuBase.itemArray)
89 if (item.representedObject)
90 item.state = item.representedObject == current;
93 - (void)chooseMapping:(NSMenuItem *)sender {
94 NJMapping *chosen = sender.representedObject;
95 [self.mappingsController activateMapping:chosen];