X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FNJMappingsController.m;h=9c7b641e848ab9e7eec9b7d611a4d89670272afe;hp=531de12645c42b326076d634ecaf4e5f0d246e36;hb=24bdb92798b9abe86c7954042a47523791736b7c;hpb=b14d8429658dd6f3f7b4904301031addb502b22c diff --git a/Classes/NJMappingsController.m b/Classes/NJMappingsController.m index 531de12..9c7b641 100644 --- a/Classes/NJMappingsController.m +++ b/Classes/NJMappingsController.m @@ -42,6 +42,7 @@ } - (void)mappingsSet { + [self postLoadProcess]; [NSNotificationCenter.defaultCenter postNotificationName:NJEventMappingListChanged object:self @@ -111,26 +112,22 @@ [NSUserDefaults.standardUserDefaults setObject:ary forKey:@"mappings"]; } +- (void)postLoadProcess { + for (NJMapping *mapping in self) + [mapping postLoadProcess:self]; +} + - (void)load { NSUInteger selected = [NSUserDefaults.standardUserDefaults integerForKey:@"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 - // an empty mapping for each serialized mapping. Then, deserialize the - // data pointing to the empty mappings. Then merge that data back into - // its equivalent empty one, which is the one we finally use. - for (NSDictionary *storedMapping in storedMappings) { - NJMapping *mapping = [[NJMapping alloc] initWithName:storedMapping[@"name"]]; - [newMappings addObject:mapping]; - } - for (unsigned i = 0; i < storedMappings.count; ++i) { - NJMapping *realMapping = [[NJMapping alloc] initWithSerialization:storedMappings[i] - mappings:newMappings]; - [newMappings[i] mergeEntriesFrom:realMapping]; + NJMapping *mapping = [[NJMapping alloc] initWithSerialization:storedMappings[i]]; + [newMappings addObject:mapping]; } + if (newMappings.count) { _mappings = newMappings; if (selected >= newMappings.count) @@ -147,6 +144,7 @@ NSDictionary *userInfo = CFBridgingRelease(contextInfo); NJMapping *oldMapping = userInfo[@"old mapping"]; NJMapping *newMapping = userInfo[@"new mapping"]; + [alert.window orderOut:nil]; switch (returnCode) { case NSAlertFirstButtonReturn: // Merge [oldMapping mergeEntriesFrom:newMapping]; @@ -157,7 +155,7 @@ case NSAlertThirdButtonReturn: // New Mapping [self.mvc.mappingList beginUpdates]; [_mappings addObject:newMapping]; - [self.mvc addedMappingAtIndex:_mappings.count - 1 startEditing:NO]; + [self.mvc addedMappingAtIndex:_mappings.count - 1 startEditing:YES]; [self.mvc.mappingList endUpdates]; [self activateMapping:newMapping]; [self mappingsChanged]; @@ -195,7 +193,7 @@ [self mappingsChanged]; } else { if (idx == -1) - idx = _mappings.count - 1; + idx = _mappings.count; [self.mvc.mappingList beginUpdates]; [_mappings insertObject:mapping atIndex:idx]; [self.mvc addedMappingAtIndex:idx startEditing:NO]; @@ -255,7 +253,6 @@ atIndex:(NSInteger)index error:(NSError **)error { NJMapping *mapping = [NJMapping mappingWithContentsOfURL:url - mappings:_mappings error:error]; [self addOrMergeMapping:mapping atIndex:index]; return !!mapping;