object:nil];
[NSNotificationCenter.defaultCenter
addObserver:self
- selector:@selector(eventTranslationActivated:)
- name:NJEventTranslationActivated
+ selector:@selector(eventSimulationStarted:)
+ name:NJEventSimulationStarted
object:nil];
[NSNotificationCenter.defaultCenter
addObserver:self
- selector:@selector(eventTranslationDeactivated:)
- name:NJEventTranslationDeactivated
+ selector:@selector(eventSimulationStopped:)
+ name:NJEventSimulationStopped
object:nil];
[self.mappingsController load];
return NO;
}
-- (void)eventTranslationActivated:(NSNotification *)note {
+- (void)eventSimulationStarted:(NSNotification *)note {
statusItem.image = [NSImage imageNamed:@"Status Menu Icon"];
[NSWorkspace.sharedWorkspace.notificationCenter
addObserver:self
object:nil];
}
-- (void)eventTranslationDeactivated:(NSNotification *)note {
+- (void)eventSimulationStopped:(NSNotification *)note {
statusItem.image = [NSImage imageNamed:@"Status Menu Icon Disabled"];
[NSWorkspace.sharedWorkspace.notificationCenter
removeObserver:self
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
[self restoreToForeground:sender];
- NSURL *url = [NSURL fileURLWithPath:filename];
- [self.mappingsController addMappingWithContentsOfURL:url];
- return YES;
+ NSError *error;
+ NSURL *URL = [NSURL fileURLWithPath:filename];
+ NJMapping *mapping = [NJMapping mappingWithContentsOfURL:URL
+ mappings:self.mappingsController
+ error:&error];
+ if (mapping) {
+ [self.mappingsController addOrMergeMapping:mapping];
+ return YES;
+ } else {
+ [window presentError:error
+ modalForWindow:window
+ delegate:nil
+ didPresentSelector:nil
+ contextInfo:nil];
+ return NO;
+ }
}
- (void)mappingWasChosen:(NJMapping *)mapping {
- (void)mappingListShouldOpen {
[self restoreToForeground:self];
- [self.mappingsController mappingPressed:self];
+ [self.mappingsController.mvc mappingTriggerClicked:self];
}
- (void)loginItemPromptDidEnd:(NSWindow *)sheet
return NO;
}
+- (void)importMappingClicked:(id)sender {
+ NSOpenPanel *panel = [NSOpenPanel openPanel];
+ panel.allowedFileTypes = @[ @"enjoyable", @"json", @"txt" ];
+ [panel beginSheetModalForWindow:window
+ completionHandler:^(NSInteger result) {
+ if (result != NSFileHandlingPanelOKButton)
+ return;
+ [panel close];
+ NSError *error;
+ NJMapping *mapping = [NJMapping mappingWithContentsOfURL:panel.URL
+ mappings:self.mappingsController
+ error:&error];
+ if (mapping) {
+ [self.mappingsController addOrMergeMapping:mapping];
+ } else {
+ [window presentError:error
+ modalForWindow:window
+ delegate:nil
+ didPresentSelector:nil
+ contextInfo:nil];
+ }
+ }];
+
+}
+
+- (void)exportMappingClicked:(id)sender {
+ NSSavePanel *panel = [NSSavePanel savePanel];
+ panel.allowedFileTypes = @[ @"enjoyable" ];
+ NJMapping *mapping = self.mappingsController.currentMapping;
+ panel.nameFieldStringValue = [mapping.name stringByFixingPathComponent];
+ [panel beginSheetModalForWindow:window
+ completionHandler:^(NSInteger result) {
+ if (result != NSFileHandlingPanelOKButton)
+ return;
+ [panel close];
+ NSError *error;
+ if (![mapping writeToURL:panel.URL error:&error]) {
+ [window presentError:error
+ modalForWindow:window
+ delegate:nil
+ didPresentSelector:nil
+ contextInfo:nil];
+ }
+ }];
+}
+
+
@end