Split view management out of NJDeviceController. Right now this probably just makes...
[enjoyable.git] / Classes / NJMappingsController.m
index 772b14a..c3209ac 100644 (file)
@@ -46,8 +46,7 @@
     return idx < _mappings.count ? _mappings[idx] : nil;
 }
 
-- (void)mappingsChanged {
-    [self save];
+- (void)mappingsSet {
     [tableView reloadData];
     [self updateInterfaceForCurrentMapping];
     [NSNotificationCenter.defaultCenter
                                 NJMappingKey: _currentMapping }];
 }
 
+- (void)mappingsChanged {
+    [self save];
+    [self mappingsSet];
+}
+
 - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
                                   objects:(__unsafe_unretained id [])buffer
                                     count:(NSUInteger)len {
 
 - (void)load {
     NSUInteger selected = [NSUserDefaults.standardUserDefaults integerForKey:@"selected"];
-    NSArray *mappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"];
-    [self loadAllFrom:mappings andActivate:selected];
-}
-
-- (void)loadAllFrom:(NSArray *)storedMappings andActivate:(NSUInteger)selected {
+    NSArray *storedMappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"];
     NSMutableArray* newMappings = [[NSMutableArray alloc] initWithCapacity:storedMappings.count];
 
     // Requires two passes to deal with inter-mapping references. First make
         if (selected >= newMappings.count)
             selected = 0;
         [self activateMapping:_mappings[selected]];
-        [self mappingsChanged];
+        [self mappingsSet];
     }
 }
 
                                                     mappings:_mappings
                                                        error:&error];
     
-    if (mapping && !error) {
+    if (mapping) {
         NJMapping *mergeInto = self[mapping.name];
         if ([mergeInto hasConflictWith:mapping]) {
             NSAlert *conflictAlert = [[NSAlert alloc] init];
                                      didEndSelector:@selector(mappingConflictDidResolve:returnCode:contextInfo:)
                                         contextInfo:(void *)CFBridgingRetain(@{ @"old mapping": mergeInto,
                                                                                 @"new mapping": mapping })];
+        } else if (mergeInto) {
+            [mergeInto mergeEntriesFrom:mapping];
+            [self activateMapping:mergeInto];
+            [self mappingsChanged];
         } else {
             [_mappings addObject:mapping];
             [self activateMapping:mapping];
             [self mappingsChanged];
         }
-    }
-
-    if (error) {
+    } else {
         [window presentError:error
               modalForWindow:window
                     delegate:nil