/* * Copyright (c) 2010, Wei Mingzhi . * All Rights Reserved. * * Based on: HIDInput by Gil Pedersen. * Copyright (c) 2004, Gil Pedersen. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #import #import "PadController.h" #include "pad.h" #import "ARCBridge.h" static NSWindow *padWindow = nil; static PadController *padController = nil; #define APP_ID @"net.pcsxr.DFInputPlugin" void DoAbout() { // Get parent application instance NSApplication *app = [NSApplication sharedApplication]; NSBundle *bundle = [NSBundle bundleWithIdentifier:APP_ID]; // Get Credits.rtf NSString *path = [bundle pathForResource:@"Credits" ofType:@"rtf"]; NSAttributedString *credits; if (path) { credits = [[NSAttributedString alloc] initWithPath: path documentAttributes:NULL]; AUTORELEASEOBJNORETURN(credits); } else { credits = AUTORELEASEOBJ([[NSAttributedString alloc] initWithString:@""]); } // Get Application Icon NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:[bundle bundlePath]]; NSSize size = NSMakeSize(64, 64); [icon setSize:size]; NSDictionary *infoPaneDict = [NSDictionary dictionaryWithObjectsAndKeys: [bundle objectForInfoDictionaryKey:@"CFBundleName"], @"ApplicationName", icon, @"ApplicationIcon", [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"], @"ApplicationVersion", [bundle objectForInfoDictionaryKey:@"CFBundleVersion"], @"Version", [bundle objectForInfoDictionaryKey:@"NSHumanReadableCopyright"], @"Copyright", credits, @"Credits", nil]; dispatch_async(dispatch_get_main_queue(), ^{ [app orderFrontStandardAboutPanelWithOptions:infoPaneDict]; }); } long DoConfiguration() { SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE); LoadPADConfig(); if (padWindow == nil) { if (padController == nil) { padController = [[PadController alloc] initWithWindowNibName:@"NetPcsxrHIDInputPluginMain"]; } padWindow = [padController window]; } [padWindow center]; [padWindow makeKeyAndOrderFront:nil]; return 0; } @implementation PadController - (IBAction)cancel:(id)sender { SDL_Quit(); [self close]; } - (IBAction)ok:(id)sender { SavePADConfig(); SDL_Quit(); [self close]; } - (void)awakeFromNib { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowWillClose:) name:NSWindowWillCloseNotification object:[self window]]; [controllerView1 addSubview: controllerView]; [controllerView setController:0]; } - (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem { PadView *newView = nil; if ([[tabViewItem identifier] isEqualToString:@"pad1"]) newView = controllerView1; else if ([[tabViewItem identifier] isEqualToString:@"pad2"]) newView = controllerView2; if (nil != newView) { [controllerView removeFromSuperviewWithoutNeedingDisplay]; [newView addSubview: controllerView]; [controllerView setFrame:[newView frame]]; [controllerView setController:[newView isEqual:controllerView1] ? 0 : 1]; } } - (void)windowBecameKey:(NSNotification *)notification { if ([[controllerView1 subviews] count] > 0) [controllerView setController:0]; else if ([[controllerView2 subviews] count] > 0) [controllerView setController:1]; [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidBecomeKeyNotification object:[self window]]; } - (void)windowWillClose:(NSNotification *)aNotification { if ([aNotification object] == [self window]) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowBecameKey:) name:NSWindowDidBecomeKeyNotification object:[self window]]; } } @end char* PLUGLOC(char *toloc) { NSBundle *mainBundle = [NSBundle bundleForClass:[PadController class]]; NSString *origString = nil, *transString = nil; origString = [NSString stringWithCString:toloc encoding:NSUTF8StringEncoding]; transString = [mainBundle localizedStringForKey:origString value:nil table:nil]; return (char*)[transString cStringUsingEncoding:NSUTF8StringEncoding]; }