aboutsummaryrefslogtreecommitdiff
path: root/macosx/PluginController.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/PluginController.m')
-rw-r--r--macosx/PluginController.m81
1 files changed, 81 insertions, 0 deletions
diff --git a/macosx/PluginController.m b/macosx/PluginController.m
new file mode 100644
index 0000000..007e619
--- /dev/null
+++ b/macosx/PluginController.m
@@ -0,0 +1,81 @@
+#import "PluginController.h"
+#import "PcsxPlugin.h"
+#import "PcsxController.h"
+
+@implementation PluginController
+
+- (IBAction)doAbout:(id)sender
+{
+ PcsxPlugin *plugin = [plugins objectAtIndex:[pluginMenu indexOfSelectedItem]];
+ [plugin aboutAs:pluginType];
+}
+
+- (IBAction)doConfigure:(id)sender
+{
+ PcsxPlugin *plugin = [plugins objectAtIndex:[pluginMenu indexOfSelectedItem]];
+
+ [plugin configureAs:pluginType];
+}
+
+- (IBAction)selectPlugin:(id)sender
+{
+ if (sender==pluginMenu) {
+ int index = [pluginMenu indexOfSelectedItem];
+ if (index != -1) {
+ PcsxPlugin *plugin = [plugins objectAtIndex:index];
+
+ if (![[PluginList list] setActivePlugin:plugin forType:pluginType]) {
+ /* plugin won't initialize */
+ }
+
+ // write selection to defaults
+ [[NSUserDefaults standardUserDefaults] setObject:[plugin path] forKey:defaultKey];
+
+ // set button states
+ [aboutButton setEnabled:[plugin hasAboutAs:pluginType]];
+ [configureButton setEnabled:[plugin hasConfigureAs:pluginType]];
+ } else {
+ // set button states
+ [aboutButton setEnabled:NO];
+ [configureButton setEnabled:NO];
+ }
+ }
+}
+
+// must be called before anything else
+- (void)setPluginsTo:(NSArray *)list withType:(int)type
+{
+ NSString *sel;
+ int i;
+
+ // remember the list
+ pluginType = type;
+ plugins = [list retain];
+ defaultKey = [[PcsxPlugin getDefaultKeyForType:pluginType] retain];
+
+ // clear the previous menu items
+ [pluginMenu removeAllItems];
+
+ // load the currently selected plugin
+ sel = [[NSUserDefaults standardUserDefaults] stringForKey:defaultKey];
+
+ // add the menu entries
+ for (i = 0; i < [plugins count]; i++) {
+ [pluginMenu addItemWithTitle:[[plugins objectAtIndex:i] description]];
+
+ // make sure the currently selected is set as such
+ if ([sel isEqualToString:[[plugins objectAtIndex:i] path]]) {
+ [pluginMenu selectItemAtIndex:i];
+ }
+ }
+
+ [self selectPlugin:pluginMenu];
+}
+
+- (void)dealloc
+{
+ if (plugins) [plugins release];
+ if (defaultKey) [defaultKey release];
+}
+
+@end