Output view controller now has a delegate rather than a direct reference to the input...
[enjoyable.git] / Classes / NJOutputMapping.m
index 28a84ab..2ee6a84 100644 (file)
@@ -9,7 +9,6 @@
 
 #import "EnjoyableApplicationDelegate.h"
 #import "NJMapping.h"
-#import "NJMappingsController.h"
 
 @implementation NJOutputMapping
 
 }
 
 - (NSDictionary *)serialize {
-    return _mapping
-        ? @{ @"type": self.class.serializationCode, @"name": _mapping.name }
+    NSString *name = _mapping ? _mapping.name : self.mappingName;
+    return name
+        ? @{ @"type": self.class.serializationCode, @"name": name }
         : nil;
 }
 
-+ (NJOutputMapping *)outputDeserialize:(NSDictionary *)serialization
-                        withMappings:(id <NSFastEnumeration>)mappings {
++ (NJOutputMapping *)outputDeserialize:(NSDictionary *)serialization {
     NSString *name = serialization[@"name"];
     NJOutputMapping *output = [[NJOutputMapping alloc] init];
-    for (NJMapping *mapping in mappings) {
-        if ([mapping.name isEqualToString:name]) {
-            output.mapping = mapping;
-            return output;
-        }
-    }
-    return nil;
+    output.mappingName = name;
+    return name ? output : nil;
 }
 
 - (void)trigger {
     EnjoyableApplicationDelegate *ctrl = (EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate;
-    [ctrl.mappingsController activateMapping:_mapping];
+    if (_mapping) {
+        [ctrl.ic activateMapping:_mapping];
+        self.mappingName = _mapping.name;
+    } else {
+        // TODO: Show an error message? Unobtrusively since something
+        // is probably running.
+    }
+}
+
+- (void)postLoadProcess:(id <NSFastEnumeration>)allMappings {
+    if (!self.mapping) {
+        for (NJMapping *mapping in allMappings) {
+            if ([mapping.name isEqualToString:self.mappingName]) {
+                self.mapping = mapping;
+                break;
+            }
+        }
+    }
 }
 
 @end