diff options
Diffstat (limited to 'macosx/Source/PluginController.m')
| -rw-r--r-- | macosx/Source/PluginController.m | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/macosx/Source/PluginController.m b/macosx/Source/PluginController.m new file mode 100644 index 00000000..2d9b26c9 --- /dev/null +++ b/macosx/Source/PluginController.m @@ -0,0 +1,83 @@ +#import "PluginController.h" +#import "PcsxrPlugin.h" +#import "PcsxrController.h" + +@interface PluginController () +@property (strong) NSArray *plugins; +@property (strong) NSString *defaultKey; +@property int pluginType; +@end + +@implementation PluginController +@synthesize aboutButton; +@synthesize configureButton; +@synthesize pluginMenu; + +- (IBAction)doAbout:(id)sender +{ + PcsxrPlugin *plugin = (self.plugins)[[pluginMenu indexOfSelectedItem]]; + [plugin aboutAs:self.pluginType]; +} + +- (IBAction)doConfigure:(id)sender +{ + PcsxrPlugin *plugin = (self.plugins)[[pluginMenu indexOfSelectedItem]]; + [plugin configureAs:self.pluginType]; +} + +- (IBAction)selectPlugin:(id)sender +{ + if (sender == pluginMenu) { + NSInteger index = [pluginMenu indexOfSelectedItem]; + if (index != -1) { + PcsxrPlugin *plugin = (self.plugins)[index]; + + if (![[PluginList list] setActivePlugin:plugin forType:self.pluginType]) { + /* plugin won't initialize */ + } + + // write selection to defaults + [[NSUserDefaults standardUserDefaults] setObject:[plugin path] forKey:self.defaultKey]; + + // set button states + [aboutButton setEnabled:[plugin hasAboutAs:self.pluginType]]; + [configureButton setEnabled:[plugin hasConfigureAs:self.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; + + // remember the list + self.pluginType = type; + self.plugins = list; + self.defaultKey = [PcsxrPlugin defaultKeyForType:self.pluginType]; + + // clear the previous menu items + [pluginMenu removeAllItems]; + + // load the currently selected plugin + sel = [[NSUserDefaults standardUserDefaults] stringForKey:self.defaultKey]; + + // add the menu entries + for (PcsxrPlugin *plug in self.plugins) { + NSString *description = [plug description]; + [pluginMenu addItemWithTitle:description]; + + // make sure the currently selected is set as such + if ([sel isEqualToString:[plug path]]) { + [pluginMenu selectItemWithTitle:description]; + } + } + + [self selectPlugin:pluginMenu]; +} + +@end |
