diff options
| author | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2014-07-20 05:09:43 +0000 |
|---|---|---|
| committer | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2014-07-20 05:09:43 +0000 |
| commit | d6942932d64a02aa92b1e04e91f6126f33fdb05e (patch) | |
| tree | 7cad698308e39abc2b0e1c71674c610ec3ce74dd /macosx/Source/ConfigurationController.m | |
| parent | b8d0d24d56dbc0ee64f4ec9a72ab917604d8109d (diff) | |
| download | pcsxr-d6942932d64a02aa92b1e04e91f6126f33fdb05e.tar.gz | |
OS X: Move source files to their own folder.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@90999 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/Source/ConfigurationController.m')
| -rw-r--r-- | macosx/Source/ConfigurationController.m | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/macosx/Source/ConfigurationController.m b/macosx/Source/ConfigurationController.m new file mode 100644 index 00000000..aef8f7f4 --- /dev/null +++ b/macosx/Source/ConfigurationController.m @@ -0,0 +1,291 @@ +#import "ConfigurationController.h" +#import "PcsxrController.h" +#import "PluginList.h" +#import "PcsxrPlugin.h" +#import "PcsxrMemCardController.h" +#import "PcsxrMemCardHandler.h" +#include "psxcommon.h" +#include "plugins.h" + +NSString *const memChangeNotifier = @"PcsxrMemoryCardDidChangeNotifier"; +NSString *const memCardChangeNumberKey = @"PcsxrMemoryCardThatChangedKey"; + +@interface ConfigurationController () +@property (strong) NSMutableDictionary *checkBoxDefaults; +- (NSString *)keyForSender:(id)sender; +@end + +@implementation ConfigurationController +@synthesize autoVTypeCell; +@synthesize bwMdecCell; +@synthesize checkBoxDefaults = _checkBoxDefaults; +@synthesize consoleOutputCell; +@synthesize enableNetPlayCell; +@synthesize noCDAudioCell; +@synthesize noFastBootCell; +@synthesize noXaAudioCell; +@synthesize rCountFixCell; +@synthesize sioIrqAlwaysCell; +@synthesize spuIrqAlwaysCell; +@synthesize usesDynarecCell; +@synthesize usesHleCell; +@synthesize vSyncWAFixCell; +@synthesize vTypePALCell; +@synthesize widescreen; + ++ (void)setMemoryCard:(NSInteger)theCard toURL:(NSURL *)theURL; +{ + if (theCard == 1) { + [[NSUserDefaults standardUserDefaults] setURL:theURL forKey:@"Mcd1"]; + strlcpy(Config.Mcd1, [[theURL path] fileSystemRepresentation], MAXPATHLEN ); + } else { + [[NSUserDefaults standardUserDefaults] setURL:theURL forKey:@"Mcd2"]; + strlcpy(Config.Mcd2, [[theURL path] fileSystemRepresentation], MAXPATHLEN ); + } + + [[NSNotificationCenter defaultCenter] postNotificationName:memChangeNotifier object:nil userInfo: + @{memCardChangeNumberKey: @(theCard)}]; +} + ++ (void)setMemoryCard:(NSInteger)theCard toPath:(NSString *)theFile +{ + [self setMemoryCard:theCard toURL:[NSURL fileURLWithPath:theFile isDirectory:NO]]; +} + +- (IBAction)setCheckbox:(id)sender +{ + if ([sender isKindOfClass:[NSMatrix class]]) { + sender = [sender selectedCell]; + } + + NSString *key = [self keyForSender:sender]; + if (key) { + [[NSUserDefaults standardUserDefaults] setBool:[sender intValue] ? YES : NO forKey:key]; + [PcsxrController setConfigFromDefaults]; + } +} + +- (IBAction)setCheckboxInverse:(id)sender +{ + if ([sender isKindOfClass:[NSMatrix class]]) { + sender = [sender selectedCell]; + } + + NSString *key = [self keyForSender:sender]; + if (key) { + [[NSUserDefaults standardUserDefaults] setBool:[sender intValue] ? NO : YES forKey:key]; + [PcsxrController setConfigFromDefaults]; + } +} + +- (IBAction)mcdChangeClicked:(id)sender +{ + NSInteger tag = [sender tag]; + char *mcd; + NSOpenPanel *openDlg = [NSOpenPanel openPanel]; + NSString *path; + + if (tag == 1) { + mcd = Config.Mcd1; + } else { + mcd = Config.Mcd2; + } + + path = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:mcd length:strlen(mcd)]; + + [openDlg setAllowedFileTypes:[PcsxrMemCardHandler supportedUTIs]]; + [openDlg setDirectoryURL:[NSURL fileURLWithPath:[path stringByDeletingLastPathComponent] isDirectory:YES]]; + [openDlg setNameFieldStringValue:[path lastPathComponent]]; + [openDlg beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) { + if (result == NSFileHandlingPanelOKButton) { + NSURL *mcdURL = [openDlg URLs][0]; + + [ConfigurationController setMemoryCard:tag toURL:mcdURL]; + } + }]; +} + +- (IBAction)mcdNewClicked:(id)sender +{ + NSInteger tag = [sender tag]; + char *mcd; + NSSavePanel *openDlg = [NSSavePanel savePanel]; + NSString *path; + + if (tag == 1) { + mcd = Config.Mcd1; + } else { + mcd = Config.Mcd2; + } + + path = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:mcd length:strlen(mcd)]; + + [openDlg setDirectoryURL:[NSURL fileURLWithPath:[path stringByDeletingLastPathComponent] isDirectory:YES]]; + [openDlg setNameFieldStringValue:NSLocalizedString(@"New Memory Card.mcd", nil)]; + [openDlg setAllowedFileTypes:[PcsxrMemCardHandler supportedUTIs]]; + + [openDlg beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) { + if (result == NSFileHandlingPanelOKButton) { + NSURL *mcdURL = [openDlg URL]; + const char *fileSysRep; + + if ([mcdURL respondsToSelector:@selector(fileSystemRepresentation)]) { + fileSysRep = [mcdURL fileSystemRepresentation]; + } else { + fileSysRep = [[mcdURL path] fileSystemRepresentation]; + } + + //Workaround/kludge to make sure we create a memory card before posting a notification + strlcpy(mcd, fileSysRep, MAXPATHLEN); + CreateMcd(mcd); + + [ConfigurationController setMemoryCard:tag toURL:mcdURL]; + } + }]; +} + +- (IBAction)setVideoType:(id)sender +{ + NSInteger tag = [[sender selectedItem] tag]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + if (3 == tag) { + [defaults setBool:YES forKey:@"AutoDetectVideoType"]; + } else if (1 == tag || 2 == tag) { + [defaults setBool:NO forKey:@"AutoDetectVideoType"]; + [defaults setBool:tag==2 forKey:@"VideoTypePAL"]; + } else { + return; + } + [PcsxrController setConfigFromDefaults]; + + if ([sender pullsDown]) { + NSArray *items = [sender itemArray]; + for (id object in items) { + [object setState:NSOffState]; + } + + [[sender selectedItem] setState:NSOnState]; + } +} + +- (void)windowWillClose:(NSNotification *)notification +{ + [memCardEdit stopMemoryAnimation]; +} + +- (void)windowDidBecomeMain:(NSNotification *)notification +{ + [memCardEdit beginMemoryAnimation]; +} + +- (void)awakeFromNib +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + [[self window] center]; + + // setup checkboxes + self.checkBoxDefaults = [[NSMutableDictionary alloc] init]; + + // check that the outlets are active before adding them + if (noXaAudioCell) + _checkBoxDefaults[@"NoXaAudio"] = noXaAudioCell; + if (enableNetPlayCell) + _checkBoxDefaults[@"NetPlay"] = enableNetPlayCell; + if (sioIrqAlwaysCell) + _checkBoxDefaults[@"SioIrqAlways"] = sioIrqAlwaysCell; + if (bwMdecCell) + _checkBoxDefaults[@"BlackAndWhiteMDECVideo"] = bwMdecCell; + if (autoVTypeCell) + _checkBoxDefaults[@"AutoDetectVideoType"] = autoVTypeCell; + if (vTypePALCell) + _checkBoxDefaults[@"VideoTypePAL"] = vTypePALCell; + if (noCDAudioCell) + _checkBoxDefaults[@"NoCDAudio"] = noCDAudioCell; + if (usesHleCell) + _checkBoxDefaults[@"UseHLE"] = usesHleCell; + if (usesDynarecCell) + _checkBoxDefaults[@"NoDynarec"] = usesDynarecCell; + if (consoleOutputCell) + _checkBoxDefaults[@"ConsoleOutput"] = consoleOutputCell; + if (spuIrqAlwaysCell) + _checkBoxDefaults[@"SpuIrqAlways"] = spuIrqAlwaysCell; + if (rCountFixCell) + _checkBoxDefaults[@"RootCounterFix"] = rCountFixCell; + if (vSyncWAFixCell) + _checkBoxDefaults[@"VideoSyncWAFix"] = vSyncWAFixCell; + if (noFastBootCell) + _checkBoxDefaults[@"NoFastBoot"] = noFastBootCell; + if (widescreen) + _checkBoxDefaults[@"Widescreen"] = widescreen; + + // make the visuals match the defaults + + for (NSString* key in _checkBoxDefaults) { + if ([defaults integerForKey:key]) { + [_checkBoxDefaults[key] setNextState]; + } + } + + // special cases + if (![PcsxrController biosAvailable]) { + // no bios means always use HLE + [usesHleCell setState:NSOnState]; + [usesHleCell setEnabled:NO]; + } + + + // setup labels + + NSInteger tag = [defaults integerForKey:@"AutoDetectVideoType"]; + if (tag) + tag = 3; + else { + tag = [defaults integerForKey:@"VideoTypePAL"]+1; + } + [vTypePALCell setAutoenablesItems:NO]; + if ([vTypePALCell pullsDown]) { + [[vTypePALCell itemAtIndex:[vTypePALCell indexOfItemWithTag:tag]] setState:NSOnState]; + } else { + [vTypePALCell selectItemAtIndex:[vTypePALCell indexOfItemWithTag:tag]]; + } + + // setup plugin lists + PluginList *list = [PluginList list]; + + [list refreshPlugins]; + [graphicsPlugin setPluginsTo:[list pluginsForType:PSE_LT_GPU] withType: PSE_LT_GPU]; + [soundPlugin setPluginsTo:[list pluginsForType:PSE_LT_SPU] withType: PSE_LT_SPU]; + [padPlugin setPluginsTo:[list pluginsForType:PSE_LT_PAD] withType: PSE_LT_PAD]; + [cdromPlugin setPluginsTo:[list pluginsForType:PSE_LT_CDR] withType: PSE_LT_CDR]; + [netPlugin setPluginsTo:[list pluginsForType:PSE_LT_NET] withType: PSE_LT_NET]; + [sio1Plugin setPluginsTo:[list pluginsForType:PSE_LT_SIO1] withType:PSE_LT_SIO1]; + + // Setup hotkey view + [hkController initialize]; +} + +- (NSString *)keyForSender:(id)sender +{ + for (NSString *key in [self.checkBoxDefaults keyEnumerator]) { + id object = (self.checkBoxDefaults)[key]; + if ([object isEqual:sender]) + return key; + } + + return nil; +} + +- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem +{ + NSWindow *window = [self window]; + if(tabViewItem == hkTab) { + [window makeFirstResponder:(NSView*)hkController]; + } + else if([window firstResponder] == (NSView*)hkController) { + [hkController resignFirstResponder]; + } +} + +@end |
