pcsxr-1.9.92
[pcsx_rearmed.git] / macosx / ConfigurationController.m
1 #import "ConfigurationController.h"
2 #import "PcsxController.h"
3 #import "PluginList.h"
4 #import "PcsxPlugin.h"
5 #include "psxcommon.h"
6 #include "plugins.h"
7
8 @implementation ConfigurationController
9
10 - (IBAction)setCheckbox:(id)sender
11 {
12         if ([sender isKindOfClass:[NSMatrix class]]) {
13                 sender = [sender selectedCell];
14         }
15
16         NSString *key = [self keyForSender:sender];
17         if (key) {
18                 [[NSUserDefaults standardUserDefaults] setInteger:[sender intValue] forKey:key];
19                 [PcsxController setConfigFromDefaults];
20         }
21 }
22
23 - (IBAction)setCheckboxInverse:(id)sender
24 {
25         if ([sender isKindOfClass:[NSMatrix class]]) {
26                 sender = [sender selectedCell];
27         }
28
29         NSString *key = [self keyForSender:sender];
30         if (key) {
31                 [[NSUserDefaults standardUserDefaults] setInteger:![sender intValue] forKey:key];
32                 [PcsxController setConfigFromDefaults];
33         }
34 }
35
36 - (IBAction)mcdChangeClicked:(id)sender
37 {
38         int tag = [sender tag];
39         char *mcd;
40         NSTextField *label;
41         NSOpenPanel *openDlg = [NSOpenPanel openPanel];
42         NSString *path;
43
44         if (tag == 1) { mcd = Config.Mcd1; label = mcd1Label; }
45         else { mcd = Config.Mcd2; label = mcd2Label; }
46
47         [openDlg setCanChooseFiles:YES];
48         [openDlg setCanChooseDirectories:NO];
49
50         path = [NSString stringWithCString:mcd];
51
52         if ([openDlg runModalForDirectory:[path stringByDeletingLastPathComponent] file:[path lastPathComponent]] == NSOKButton) {
53                 NSArray* files = [openDlg filenames];
54                 strcpy(mcd, (const char *)[[files objectAtIndex:0] fileSystemRepresentation]);
55
56                 [label setTitleWithMnemonic:[NSString stringWithCString:mcd]];
57
58                 if (tag == 1)
59                         [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd1"];
60                 else
61                         [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd2"];
62     }
63 }
64
65 - (IBAction)mcdNewClicked:(id)sender
66 {
67         int tag = [sender tag];
68         char *mcd;
69         NSTextField *label;
70         NSSavePanel *openDlg = [NSSavePanel savePanel];
71         NSString *path;
72
73         if (tag == 1) { mcd = Config.Mcd1; label = mcd1Label; }
74         else { mcd = Config.Mcd2; label = mcd2Label; }
75
76         path = [NSString stringWithCString:mcd];
77
78         if ([openDlg runModalForDirectory:[path stringByDeletingLastPathComponent] file:@"New Memory Card File.mcr"] == NSOKButton) {
79                 strcpy(mcd, (const char *)[[openDlg filename] fileSystemRepresentation]);
80
81                 [label setTitleWithMnemonic:[NSString stringWithCString:mcd]];
82
83                 if (tag == 1)
84                         [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd1"];
85                 else
86                         [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithCString:mcd] forKey:@"Mcd2"];
87
88                 CreateMcd(mcd);
89     }
90 }
91
92 - (IBAction)setVideoType:(id)sender
93 {
94         int tag = [[sender selectedItem] tag];
95
96         if (3 == 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"];
101         } else {
102                 return;
103         }
104         [PcsxController setConfigFromDefaults];
105
106         if ([sender pullsDown]) {
107                 NSArray *items = [sender itemArray];
108                 int i;
109                 
110                 for (i=0; i<[items count]; i++)
111                         [[items objectAtIndex:i] setState:NSOffState];
112                 
113                 [[sender selectedItem] setState:NSOnState];
114         }
115 }
116
117 - (void)awakeFromNib
118 {
119         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
120
121         [[self window] center];
122
123         // setup checkboxes
124         checkBoxDefaults = [[NSMutableDictionary alloc] init];
125
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"];
140
141         // make the visuals match the defaults
142         NSEnumerator *enumerator= [checkBoxDefaults keyEnumerator];
143         id key;
144         while ((key = [enumerator nextObject])) {
145                 if ([defaults integerForKey:key]) {
146                         [[checkBoxDefaults objectForKey:key] setNextState];
147                 }
148         }
149
150         // special cases
151         if (![PcsxController biosAvailable]) {
152                 // no bios means always use HLE
153                 [usesHleCell setState:NSOnState];
154                 [usesHleCell setEnabled:NO];
155         }
156
157         // setup labels
158         [mcd1Label setTitleWithMnemonic:[NSString stringWithCString:Config.Mcd1]];
159         [mcd2Label setTitleWithMnemonic:[NSString stringWithCString:Config.Mcd2]];
160
161         int tag = [defaults integerForKey:@"AutoDetectVideoType"];
162         if (tag)
163                 tag = 3;
164         else {
165                 tag = [defaults integerForKey:@"VideoTypePAL"]+1;
166         }
167         [vTypePALCell setAutoenablesItems:NO];
168         if ([vTypePALCell pullsDown]) {
169                 [[vTypePALCell itemAtIndex:[vTypePALCell indexOfItemWithTag:tag]] setState:NSOnState];
170         } else {
171                 [vTypePALCell selectItemAtIndex:[vTypePALCell indexOfItemWithTag:tag]];
172         }
173
174         // setup plugin lists
175         PluginList *list = [PluginList list];
176
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];
182 }
183
184 - (void)dealloc
185 {
186         [checkBoxDefaults release];
187         [super dealloc];
188 }
189
190 - (NSString *)keyForSender:(id)sender
191 {
192         NSEnumerator *enumerator= [checkBoxDefaults keyEnumerator];
193         id key;
194         while ((key = [enumerator nextObject])) {
195                 id object = [checkBoxDefaults objectForKey:key];
196                 if ([object isEqual:sender])
197                         return key;
198         }
199
200         return nil;
201 }
202
203 @end