Split NJMappingController view handling off into NJMappingViewController. This is...
[enjoyable.git] / Classes / EnjoyableApplicationDelegate.m
index b1d9907..fe781ef 100644 (file)
         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