1 #import "ConfigurationController.h"
2 #import "PcsxController.h"
8 @implementation ConfigurationController
10 - (IBAction)setCheckbox:(id)sender
12 if ([sender isKindOfClass:[NSMatrix class]]) {
13 sender = [sender selectedCell];
16 NSString *key = [self keyForSender:sender];
18 [[NSUserDefaults standardUserDefaults] setInteger:[sender intValue] forKey:key];
19 [PcsxController setConfigFromDefaults];
23 - (IBAction)setCheckboxInverse:(id)sender
25 if ([sender isKindOfClass:[NSMatrix class]]) {
26 sender = [sender selectedCell];
29 NSString *key = [self keyForSender:sender];
31 [[NSUserDefaults standardUserDefaults] setInteger:![sender intValue] forKey:key];
32 [PcsxController setConfigFromDefaults];
36 - (IBAction)mcdChangeClicked:(id)sender
38 int tag = [sender tag];
41 NSOpenPanel *openDlg = [NSOpenPanel openPanel];
44 if (tag == 1) { mcd = Config.Mcd1; label = mcd1Label; }
45 else { mcd = Config.Mcd2; label = mcd2Label; }
47 [openDlg setCanChooseFiles:YES];
48 [openDlg setCanChooseDirectories:NO];
50 path = [NSString stringWithCString:mcd];
52 if ([openDlg runModalForDirectory:[path stringByDeletingLastPathComponent] file:[path lastPathComponent]] == NSOKButton) {
53 NSArray* files = [openDlg filenames];
54 strcpy(mcd, (const char *)[[files objectAtIndex:0] fileSystemRepresentation]);
56 [label setTitleWithMnemonic:[NSString stringWithCString:mcd]];
59 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd1"];
61 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd2"];
65 - (IBAction)mcdNewClicked:(id)sender
67 int tag = [sender tag];
70 NSSavePanel *openDlg = [NSSavePanel savePanel];
73 if (tag == 1) { mcd = Config.Mcd1; label = mcd1Label; }
74 else { mcd = Config.Mcd2; label = mcd2Label; }
76 path = [NSString stringWithCString:mcd];
78 if ([openDlg runModalForDirectory:[path stringByDeletingLastPathComponent] file:@"New Memory Card File.mcr"] == NSOKButton) {
79 strcpy(mcd, (const char *)[[openDlg filename] fileSystemRepresentation]);
81 [label setTitleWithMnemonic:[NSString stringWithCString:mcd]];
84 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd1"];
86 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd2"];
92 - (IBAction)setVideoType:(id)sender
94 int tag = [[sender selectedItem] tag];
97 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AutoDetectVideoType"];
98 } else if (1 == tag || 2 == tag) {
99 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"AutoDetectVideoType"];
100 [[NSUserDefaults standardUserDefaults] setBool:tag==2 forKey:@"VideoTypePAL"];
104 [PcsxController setConfigFromDefaults];
106 if ([sender pullsDown]) {
107 NSArray *items = [sender itemArray];
110 for (i=0; i<[items count]; i++)
111 [[items objectAtIndex:i] setState:NSOffState];
113 [[sender selectedItem] setState:NSOnState];
119 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
121 [[self window] center];
124 checkBoxDefaults = [[NSMutableDictionary alloc] init];
126 // check that the outlets are active before adding them
127 if (noXaAudioCell) [checkBoxDefaults setObject:noXaAudioCell forKey:@"NoXaAudio"];
128 if (sioIrqAlwaysCell) [checkBoxDefaults setObject:sioIrqAlwaysCell forKey:@"SioIrqAlways"];
129 if (bwMdecCell) [checkBoxDefaults setObject:bwMdecCell forKey:@"BlackAndWhiteMDECVideo"];
130 if (autoVTypeCell) [checkBoxDefaults setObject:autoVTypeCell forKey:@"AutoDetectVideoType"];
131 if (vTypePALCell) [checkBoxDefaults setObject:vTypePALCell forKey:@"VideoTypePAL"];
132 if (noCDAudioCell) [checkBoxDefaults setObject:noCDAudioCell forKey:@"NoCDAudio"];
133 if (usesHleCell) [checkBoxDefaults setObject:usesHleCell forKey:@"UseHLE"];
134 if (usesDynarecCell) [checkBoxDefaults setObject:usesDynarecCell forKey:@"NoDynarec"];
135 if (consoleOutputCell) [checkBoxDefaults setObject:consoleOutputCell forKey:@"ConsoleOutput"];
136 if (spuIrqAlwaysCell) [checkBoxDefaults setObject:spuIrqAlwaysCell forKey:@"SpuIrqAlways"];
137 if (rCountFixCell) [checkBoxDefaults setObject:rCountFixCell forKey:@"RootCounterFix"];
138 if (vSyncWAFixCell) [checkBoxDefaults setObject:vSyncWAFixCell forKey:@"VideoSyncWAFix"];
139 if (noFastBootCell) [checkBoxDefaults setObject:noFastBootCell forKey:@"NoFastBoot"];
141 // make the visuals match the defaults
142 NSEnumerator *enumerator= [checkBoxDefaults keyEnumerator];
144 while ((key = [enumerator nextObject])) {
145 if ([defaults integerForKey:key]) {
146 [[checkBoxDefaults objectForKey:key] setNextState];
151 if (![PcsxController biosAvailable]) {
152 // no bios means always use HLE
153 [usesHleCell setState:NSOnState];
154 [usesHleCell setEnabled:NO];
158 [mcd1Label setTitleWithMnemonic:[NSString stringWithCString:Config.Mcd1]];
159 [mcd2Label setTitleWithMnemonic:[NSString stringWithCString:Config.Mcd2]];
161 int tag = [defaults integerForKey:@"AutoDetectVideoType"];
165 tag = [defaults integerForKey:@"VideoTypePAL"]+1;
167 [vTypePALCell setAutoenablesItems:NO];
168 if ([vTypePALCell pullsDown]) {
169 [[vTypePALCell itemAtIndex:[vTypePALCell indexOfItemWithTag:tag]] setState:NSOnState];
171 [vTypePALCell selectItemAtIndex:[vTypePALCell indexOfItemWithTag:tag]];
174 // setup plugin lists
175 PluginList *list = [PluginList list];
177 [list refreshPlugins];
178 [graphicsPlugin setPluginsTo:[list pluginsForType:PSE_LT_GPU] withType: PSE_LT_GPU];
179 [soundPlugin setPluginsTo:[list pluginsForType:PSE_LT_SPU] withType: PSE_LT_SPU];
180 [padPlugin setPluginsTo:[list pluginsForType:PSE_LT_PAD] withType: PSE_LT_PAD];
181 [cdromPlugin setPluginsTo:[list pluginsForType:PSE_LT_CDR] withType: PSE_LT_CDR];
186 [checkBoxDefaults release];
190 - (NSString *)keyForSender:(id)sender
192 NSEnumerator *enumerator= [checkBoxDefaults keyEnumerator];
194 while ((key = [enumerator nextObject])) {
195 id object = [checkBoxDefaults objectForKey:key];
196 if ([object isEqual:sender])