App delegate now controls communication between device / mapping controllers and...
[enjoyable.git] / Classes / NJMappingsController.m
index 8f0492c..44a9c43 100644 (file)
@@ -11,8 +11,6 @@
 #import "NJOutput.h"
 #import "NJEvents.h"
 
-#define PB_ROW @"com.yukkurigames.Enjoyable.MappingRow"
-
 @implementation NJMappingsController {
     NSMutableArray *_mappings;
     NJMapping *_manualMapping;
     _manualMapping = oldMapping;
 }
 
+- (void)activateMappingForcibly:(NJMapping *)mapping {
+    NSLog(@"Switching to mapping %@.", mapping.name);
+    _currentMapping = mapping;
+    NSUInteger idx = [self indexOfMapping:_currentMapping];
+    [NSNotificationCenter.defaultCenter
+     postNotificationName:NJEventMappingChanged
+                  object:self
+                userInfo:@{ NJMappingKey : _currentMapping,
+                            NJMappingIndexKey: @(idx) }];
+}
+
 - (void)activateMapping:(NJMapping *)mapping {
     if (!mapping)
         mapping = _manualMapping;
     if (mapping == _currentMapping)
         return;
-    NSLog(@"Switching to mapping %@.", mapping.name);
     _manualMapping = mapping;
-    _currentMapping = mapping;
-    NSUInteger idx = [_mappings indexOfObjectIdenticalTo:_currentMapping];
-    [NSNotificationCenter.defaultCenter
-         postNotificationName:NJEventMappingChanged
-                       object:self
-                     userInfo:@{ NJMappingKey : _currentMapping,
-                                 NJMappingIndexKey: @(idx) }];
+    [self activateMappingForcibly:mapping];
 }
 
 - (void)save {
     NSArray *storedMappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"];
     NSMutableArray* newMappings = [[NSMutableArray alloc] initWithCapacity:storedMappings.count];
 
-    for (unsigned i = 0; i < storedMappings.count; ++i) {
-        NJMapping *mapping = [[NJMapping alloc] initWithSerialization:storedMappings[i]];
-        [newMappings addObject:mapping];
-    }
-    
+    for (NSDictionary *serialization in storedMappings)
+        [newMappings addObject:
+         [[NJMapping alloc] initWithSerialization:serialization]];
     
     if (newMappings.count) {
         _mappings = newMappings;
 - (void)mergeMapping:(NJMapping *)mapping intoMapping:(NJMapping *)existing {
     [existing mergeEntriesFrom:mapping];
     [self mappingsChanged];
-    if (existing == _currentMapping) {
-        // FIXME: Hack to trigger updates in the rest of the UI.
-        _currentMapping = nil;
-        NJMapping *manual = _manualMapping;
-        [self activateMapping:existing];
-        _manualMapping = manual;
-    }
+    if (existing == _currentMapping)
+        [self activateMappingForcibly:mapping];
 }
 
 - (void)renameMapping:(NJMapping *)mapping to:(NSString *)name {
     mapping.name = name;
-    if (mapping == _currentMapping) {
-        // FIXME: Hack to trigger updates in the rest of the UI.
-        _currentMapping = nil;
-        NJMapping *manual = _manualMapping;
-        [self activateMapping:mapping];
-        _manualMapping = manual;        
-    }
     [self mappingsChanged];
+    if (mapping == _currentMapping)
+        [self activateMappingForcibly:mapping];
 }
 
 - (void)addMapping:(NJMapping *)mapping {