X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=NJMappingsController.m;h=43f6282a4fc6876814fd4c2e439a34becffa43da;hp=f1e068ee23ef35fdaf6f2b1de59f7b10ac8d2336;hb=6044e47a97de33531c47cd209b30d4405aa0530a;hpb=e23012ee44e26e9fd2bd43340a3fd806b084fa47 diff --git a/NJMappingsController.m b/NJMappingsController.m index f1e068e..43f6282 100644 --- a/NJMappingsController.m +++ b/NJMappingsController.m @@ -7,7 +7,6 @@ #import "NJMappingsController.h" -#import "EnjoyableApplicationDelegate.h" #import "NJMapping.h" #import "NJMappingsController.h" #import "NJOutput.h" @@ -40,6 +39,15 @@ return idx < _mappings.count ? _mappings[idx] : nil; } +- (void)mappingsChanged { + [self save]; + [tableView reloadData]; + popoverActivate.title = _currentMapping.name; + [NSNotificationCenter.defaultCenter + postNotificationName:NJEventMappingListChanged + object:_mappings]; +} + - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id [])buffer count:(NSUInteger)len { @@ -62,25 +70,27 @@ - (void)activateMapping:(NJMapping *)mapping { if (!mapping) mapping = manualMapping; + if (mapping == _currentMapping) + return; NSLog(@"Switching to mapping %@.", mapping.name); manualMapping = mapping; _currentMapping = mapping; [removeButton setEnabled:_mappings[0] != mapping]; [outputController loadCurrent]; popoverActivate.title = _currentMapping.name; + NSUInteger selected = [_mappings indexOfObject:mapping]; + [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:selected] byExtendingSelection:NO]; + [NSUserDefaults.standardUserDefaults setInteger:selected forKey:@"selected"]; [NSNotificationCenter.defaultCenter postNotificationName:NJEventMappingChanged object:_currentMapping]; - [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:[_mappings indexOfObject:mapping]] byExtendingSelection:NO]; } - (IBAction)addPressed:(id)sender { NJMapping *newMapping = [[NJMapping alloc] initWithName:@"Untitled"]; [_mappings addObject:newMapping]; - [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged]; - [tableView reloadData]; - [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:_mappings.count - 1] byExtendingSelection:NO]; - [tableView editColumn:0 row:_mappings.count - 1 withEvent:nil select:YES]; + [self mappingsChanged]; [self activateMapping:newMapping]; + [tableView editColumn:0 row:_mappings.count - 1 withEvent:nil select:YES]; } - (IBAction)removePressed:(id)sender { @@ -88,15 +98,12 @@ return; [_mappings removeObjectAtIndex:tableView.selectedRow]; - [tableView reloadData]; - [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged]; + [self mappingsChanged]; [self activateMapping:_mappings[0]]; - [self save]; } -(void)tableViewSelectionDidChange:(NSNotification *)notify { - if (tableView.selectedRow >= 0) - [self activateMapping:_mappings[tableView.selectedRow]]; + [self activateMapping:self[tableView.selectedRow]]; } - (id)tableView:(NSTableView *)view objectValueForTableColumn:(NSTableColumn *)column row:(NSInteger)index { @@ -108,9 +115,7 @@ forTableColumn:(NSTableColumn *)col row:(NSInteger)index { self[index].name = obj; - [self save]; - [tableView reloadData]; - [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged]; + [self mappingsChanged]; } - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { @@ -118,28 +123,24 @@ } - (BOOL)tableView:(NSTableView *)view shouldEditTableColumn:(NSTableColumn *)column row:(NSInteger)index { - return index > 0; + return YES; } - (void)save { NSLog(@"Saving mappings to defaults."); - [NSUserDefaults.standardUserDefaults setValuesForKeysWithDictionary:[self dumpAll]]; -} - -- (void)load { - [self loadAllFrom:NSUserDefaults.standardUserDefaults.dictionaryRepresentation]; -} - -- (NSDictionary *)dumpAll { NSMutableArray *ary = [[NSMutableArray alloc] initWithCapacity:_mappings.count]; for (NJMapping *mapping in _mappings) [ary addObject:[mapping serialize]]; - NSUInteger current = _currentMapping ? [_mappings indexOfObject:_currentMapping] : 0; - return @{ @"mappings": ary, @"selected": @(current) }; + [NSUserDefaults.standardUserDefaults setObject:ary forKey:@"mappings"]; +} + +- (void)load { + NSUInteger selected = [NSUserDefaults.standardUserDefaults integerForKey:@"selected"]; + NSArray *mappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"]; + [self loadAllFrom:mappings andActivate:selected]; } -- (void)loadAllFrom:(NSDictionary*)envelope { - NSArray *storedMappings = envelope[@"mappings"]; +- (void)loadAllFrom:(NSArray *)storedMappings andActivate:(NSUInteger)selected { NSMutableArray* newMappings = [[NSMutableArray alloc] initWithCapacity:storedMappings.count]; // have to do two passes in case mapping1 refers to mapping2 via a NJOutputMapping @@ -160,13 +161,11 @@ } if (newMappings.count) { - unsigned current = [envelope[@"selected"] unsignedIntValue]; - if (current >= newMappings.count) - current = 0; _mappings = newMappings; - [tableView reloadData]; - [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged]; - [self activateMapping:_mappings[current]]; + if (selected >= newMappings.count) + selected = 0; + [self mappingsChanged]; + [self activateMapping:_mappings[selected]]; } } @@ -248,11 +247,9 @@ mapping = mergeInto; } else { [_mappings addObject:mapping]; - [tableView reloadData]; } - [self save]; - [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged]; + [self mappingsChanged]; [self activateMapping:mapping]; [outputController loadCurrent]; @@ -284,6 +281,7 @@ if (result != NSFileHandlingPanelOKButton) return; [panel close]; + [NSProcessInfo.processInfo disableSuddenTermination]; NSError *error; NSDictionary *serialization = [mapping serialize]; NSData *json = [NSJSONSerialization dataWithJSONObject:serialization @@ -292,6 +290,7 @@ if (!error) [json writeToURL:panel.URL options:NSDataWritingAtomic error:&error]; + [NSProcessInfo.processInfo enableSuddenTermination]; if (error) { [window presentError:error modalForWindow:window