Move logic into messages rather than directly in the callback functions.
[enjoyable.git] / TargetConfig.m
index 8e4fc40..e9c374e 100644 (file)
@@ -7,30 +7,37 @@
 
 #import "TargetConfig.h"
 
+#import "ApplicationController.h"
+#import "Config.h"
+#import "ConfigsController.h"
 
 @implementation TargetConfig
 
-@synthesize config;
++ (NSString *)serializationCode {
+    return @"cfg";
+}
 
--(NSString*) stringify {
-       return [[NSString alloc] initWithFormat: @"cfg~%@", [config name]];
+- (NSDictionary *)serialize {
+    return _config
+        ? @{ @"type": @"cfg", @"name": _config.name }
+        : @{};
 }
 
-+(TargetConfig*) unstringifyImpl: (NSArray*) comps withConfigList: (NSArray*) configs {
-       NSParameterAssert([comps count] == 2);
-       NSString* name = comps[1];
-       TargetConfig* target = [[TargetConfig alloc] init];
-       for(int i=0; i<[configs count]; i++)
-               if([[configs[i] name] isEqualToString:name]) {
-                       [target setConfig: configs[i]];
-                       return target;
-               }
-       NSLog(@"Warning: couldn't find matching config to restore from: %@",name);
-       return NULL;
++ (TargetConfig *)targetDeserialize:(NSDictionary *)serialization
+                        withConfigs:(NSArray *)configs {
+    NSString *name = serialization[@"name"];
+    TargetConfig *target = [[TargetConfig alloc] init];
+    for (Config *config in configs) {
+        if ([config.name isEqualToString:name]) {
+            target.config = config;
+            return target;
+        }
+    }
+    return nil;
 }
 
--(void) trigger {
-       [[(ApplicationController *)[[NSApplication sharedApplication] delegate] configsController] activateConfig:config];
+- (void)trigger {
+    [[(ApplicationController *)[[NSApplication sharedApplication] delegate] configsController] activateConfig:_config];
 }
 
 @end