X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=ConfigsController.m;fp=ConfigsController.m;h=50861cf73f66f5b3cf37dd9ec01b44e62daee2af;hp=10adcee4215190686ba70176ea791a76a9cff023;hb=19eadf9e688d8c087b47f83f8634593fddd641ac;hpb=3dfe18e6224331f1161ddcc057f755d41ff55266 diff --git a/ConfigsController.m b/ConfigsController.m index 10adcee..50861cf 100644 --- a/ConfigsController.m +++ b/ConfigsController.m @@ -7,7 +7,7 @@ @implementation ConfigsController { NSMutableArray *configs; - Config *neutralConfig; + Config *manualConfig; } @synthesize currentConfig; @@ -16,36 +16,35 @@ - (id)init { if ((self = [super init])) { configs = [[NSMutableArray alloc] init]; - currentConfig = [[Config alloc] init]; - [currentConfig setName: @"(default)"]; + currentConfig = [[Config alloc] init]; + currentConfig.name = @"(default)"; + manualConfig = currentConfig; [configs addObject:currentConfig]; } return self; } -// TODO: Neutral config stuff is a mess. +- (Config *)objectForKeyedSubscript:(NSString *)name { + for (Config *config in configs) + if ([name isEqualToString:config.name]) + return config; + return nil; +} --(void) restoreNeutralConfig { - if(!neutralConfig) - return; - [self activateConfig: neutralConfig forApplication: NULL]; +- (void)activateConfigForProcess:(NSString *)processName { + Config *oldConfig = manualConfig; + [self activateConfig:self[processName]]; + manualConfig = oldConfig; } --(void) activateConfig: (Config*)config forApplication: (ProcessSerialNumber*) psn { - if(currentConfig == config) +- (void)activateConfig:(Config *)config { + if (!config) + config = manualConfig; + if (currentConfig == config) return; - - if(psn) { - if(!neutralConfig) - neutralConfig = currentConfig; - } else { - neutralConfig = NULL; - } - - if(currentConfig != NULL) { - [targetController reset]; - } + manualConfig = config; currentConfig = config; + [targetController reset]; [removeButton setEnabled:configs[0] != config]; [targetController load]; [(ApplicationController *)[[NSApplication sharedApplication] delegate] configChanged]; @@ -66,8 +65,13 @@ if (tableView.selectedRow == 0) return; - Config *current_config = configs[tableView.selectedRow]; + Config *toRemove = configs[tableView.selectedRow]; [configs removeObjectAtIndex:tableView.selectedRow]; + + if (toRemove == currentConfig) + currentConfig = configs[0]; + if (toRemove == manualConfig) + manualConfig = configs[0]; // remove all "switch to configuration" actions for (Config *config in configs) { @@ -75,7 +79,7 @@ for (id key in entries) { Target *target = entries[key]; if ([target isKindOfClass:[TargetConfig class]] - && [(TargetConfig *)target config] == current_config) + && [(TargetConfig *)target config] == toRemove) [entries removeObjectForKey: key]; } } @@ -85,7 +89,7 @@ -(void)tableViewSelectionDidChange:(NSNotification *)notify { if (tableView.selectedRow >= 0) - [self activateConfig:configs[tableView.selectedRow] forApplication: NULL]; + [self activateConfig:configs[tableView.selectedRow]]; } - (id)tableView:(NSTableView *)view objectValueForTableColumn:(NSTableColumn *)column row:(int)index { @@ -107,16 +111,6 @@ - (BOOL)tableView:(NSTableView *)view shouldEditTableColumn:(NSTableColumn *)column row:(int)index { return index > 0; -} - -- (Config *)currentConfig { - return currentConfig; -} - -- (Config *)currentNeutralConfig { - if (neutralConfig) - return neutralConfig; - return currentConfig; } -(void) save { @@ -141,9 +135,9 @@ [ary addObject: cfgInfo]; } envelope[@"configurationList"] = ary; - envelope[@"selectedIndex"] = @([configs indexOfObject: [self currentNeutralConfig] ]); return envelope; } + -(void) loadAllFrom: (NSDictionary*) envelope{ if(envelope == NULL) return; @@ -163,25 +157,13 @@ } } - configs = newConfigs; - [tableView reloadData]; - currentConfig = NULL; - [(ApplicationController *)[[NSApplication sharedApplication] delegate] configsChanged]; - - int index = [envelope[@"selectedIndex"] intValue]; - if (index < configs.count) - [self activateConfig: configs[index] forApplication: NULL]; -} - --(void) applicationSwitchedTo: (NSString*) name withPsn: (ProcessSerialNumber) psn { - for(int i=0; i<[configs count]; i++) { - Config* cfg = configs[i]; - if([[cfg name] isEqualToString: name]) { - [self activateConfig: cfg forApplication: &psn]; - return; - } - } - [self restoreNeutralConfig]; + if (newConfigs.count) { + configs = newConfigs; + [tableView reloadData]; + currentConfig = configs[0]; + manualConfig = configs[0]; + [(ApplicationController *)[[NSApplication sharedApplication] delegate] configsChanged]; + } } @end