summaryrefslogtreecommitdiff
path: root/macosx/plugins/DFInput/macsrc/cfgHelper.m
diff options
context:
space:
mode:
authorSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-08-29 23:36:29 +0000
committerSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-08-29 23:36:29 +0000
commit460faedba401d0f1a754e8d3b9d4fd1c853d9413 (patch)
tree64f2b3f0e960c0da80df729ead41a9a1165b37dc /macosx/plugins/DFInput/macsrc/cfgHelper.m
parent06f5ec54da4efb1383298da7c2d20805c5304dd1 (diff)
downloadpcsxr-460faedba401d0f1a754e8d3b9d4fd1c853d9413.tar.gz
Re-working how DFInput on OS X stores preferences, making it match the rest of the OS X plug-ins.
Do some localization support work on DFInput on OS X. Bump the version in the info.plist file for DFInput to 1.5. Other code changes and improvements on the Mac port. git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@87023 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/plugins/DFInput/macsrc/cfgHelper.m')
-rw-r--r--macosx/plugins/DFInput/macsrc/cfgHelper.m243
1 files changed, 243 insertions, 0 deletions
diff --git a/macosx/plugins/DFInput/macsrc/cfgHelper.m b/macosx/plugins/DFInput/macsrc/cfgHelper.m
new file mode 100644
index 00000000..b51c5ee4
--- /dev/null
+++ b/macosx/plugins/DFInput/macsrc/cfgHelper.m
@@ -0,0 +1,243 @@
+//
+// cfgHelper.m
+// Pcsxr
+//
+// Created by C.W. Betts on 8/28/13.
+//
+//
+
+#include "cfg.h"
+#import <Foundation/Foundation.h>
+#import "ARCBridge.h"
+#import "PadController.h"
+
+#define padType @"Pad Type"
+#define deviceNumber @"Device Number"
+#define dfKey @"Key Value"
+#define joyType @"Joystick Type"
+#define joyVal @"Joystick Value"
+
+#define dSelect @"DKEY_SELECT"
+#define dStart @"DKEY_START"
+#define dUp @"DKEY_UP"
+#define dRight @"DKEY_RIGHT"
+#define dDown @"DKEY_DOWN"
+#define dLeft @"DKEY_LEFT"
+#define dL1 @"DKEY_L1"
+#define dL2 @"DKEY_L2"
+#define dL3 @"DKEY_L3"
+#define dR1 @"DKEY_R1"
+#define dR2 @"DKEY_R2"
+#define dR3 @"DKEY_R3"
+#define dTriangle @"DKEY_TRIANGLE"
+#define dCircle @"DKEY_CIRCLE"
+#define dCross @"DKEY_CROSS"
+#define dSquare @"DKEY_SQUARE"
+#define dAnalog @"DKEY_ANALOG"
+#define dLeftAnalogXP @"LeftAnalogXP"
+#define dLeftAnalogXM @"LeftAnalogXM"
+#define dLeftAnalogYP @"LeftAnalogYP"
+#define dLeftAnalogYM @"LeftAnalogYM"
+#define dRightAnalogXP @"RightAnalogXP"
+#define dRightAnalogXM @"RightAnalogXM"
+#define dRightAnalogYP @"RightAnalogYP"
+#define dRightAnalogYM @"RightAnalogYM"
+
+NSDictionary *DefaultPadArray(int padnum)
+{
+ NSMutableDictionary *mutArray = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+ @(padnum), deviceNumber,
+ @(PSE_PAD_TYPE_STANDARD), padType,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@8, joyVal, @(BUTTON), joyType, nil], dSelect,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@9, joyVal, @(BUTTON), joyType, nil], dStart,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@(-2), joyVal, @(AXIS), joyType, nil], dUp,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@1, joyVal, @(AXIS), joyType, nil], dRight,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@2, joyVal, @(AXIS), joyType, nil], dDown,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@(-1), joyVal, @(AXIS), joyType, nil], dLeft,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@4, joyVal, @(BUTTON), joyType, nil], dL2,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@6, joyVal, @(BUTTON), joyType, nil], dL1,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@5, joyVal, @(BUTTON), joyType, nil], dR2,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@7, joyVal, @(BUTTON), joyType, nil], dR1,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@0, joyVal, @(BUTTON), joyType, nil], dTriangle,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@1, joyVal, @(BUTTON), joyType, nil], dCircle,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@2, joyVal, @(BUTTON), joyType, nil], dCross,
+ [NSMutableDictionary dictionaryWithObjectsAndKeys:@3, joyVal, @(BUTTON), joyType, nil], dSquare,
+ nil];
+ if (padnum == 0) {
+ [[mutArray objectForKey:dSelect] setObject:@9 forKey:dfKey];
+ [[mutArray objectForKey:dStart] setObject:@10 forKey:dfKey];
+ [[mutArray objectForKey:dUp] setObject:@127 forKey:dfKey];
+ [[mutArray objectForKey:dRight] setObject:@125 forKey:dfKey];
+ [[mutArray objectForKey:dDown] setObject:@126 forKey:dfKey];
+ [[mutArray objectForKey:dLeft] setObject:@124 forKey:dfKey];
+ [[mutArray objectForKey:dL2] setObject:@16 forKey:dfKey];
+ [[mutArray objectForKey:dR2] setObject:@18 forKey:dfKey];
+ [[mutArray objectForKey:dL1] setObject:@14 forKey:dfKey];
+ [[mutArray objectForKey:dR1] setObject:@15 forKey:dfKey];
+ [[mutArray objectForKey:dTriangle] setObject:@3 forKey:dfKey];
+ [[mutArray objectForKey:dCircle] setObject:@8 forKey:dfKey];
+ [[mutArray objectForKey:dCross] setObject:@7 forKey:dfKey];
+ [[mutArray objectForKey:dSquare] setObject:@2 forKey:dfKey];
+ [mutArray setObject:[NSDictionary dictionaryWithObject:@12 forKey:dfKey] forKey:dAnalog];
+ }
+ return [NSDictionary dictionaryWithDictionary:mutArray];
+}
+
+static NSDictionary *DictionaryFromButtonDef(KEYDEF theKey)
+{
+ NSMutableDictionary *mutDict = [NSMutableDictionary dictionaryWithCapacity:3];
+ if (theKey.Key) {
+ [mutDict setObject:@(theKey.Key) forKey:dfKey];
+ }
+ if (theKey.JoyEvType != NONE) {
+ [mutDict setObject:@(theKey.JoyEvType) forKey:joyType];
+ switch (theKey.JoyEvType) {
+ case BUTTON:
+ [mutDict setObject:@(theKey.J.Button) forKey:joyVal];
+ break;
+
+ case HAT:
+ [mutDict setObject:@(theKey.J.Hat) forKey:joyVal];
+ break;
+
+ case AXIS:
+ [mutDict setObject:@(theKey.J.Axis) forKey:joyVal];
+ break;
+
+ case NONE:
+ default:
+ //[mutDict setObject:@(theKey.J.d) forKey:joyVal];
+ [mutDict removeObjectForKey:joyType];
+ break;
+ }
+ }
+ return [NSDictionary dictionaryWithDictionary:mutDict];
+}
+
+static void SetKeyFromDictionary(NSDictionary *inDict, KEYDEF *outDef)
+{
+ assert(outDef != NULL);
+ if (!inDict) {
+ return;
+ }
+ NSNumber *theJoyType = [inDict objectForKey:joyType];
+ if (theJoyType) {
+ NSNumber *theJoyVal = [inDict objectForKey:joyVal];
+ outDef->JoyEvType = [theJoyType unsignedCharValue];
+ switch (outDef->JoyEvType) {
+ case BUTTON:
+ outDef->J.Button = [theJoyVal unsignedShortValue];
+ break;
+
+ case HAT:
+ outDef->J.Hat = [theJoyVal unsignedShortValue];
+ break;
+
+ case AXIS:
+ outDef->J.Axis = [theJoyVal shortValue];
+ break;
+
+ default:
+ break;
+ }
+ }
+ NSNumber *keyVal = [inDict objectForKey:dfKey];
+ if (keyVal) {
+ outDef->Key = [keyVal unsignedShortValue];
+ }
+}
+
+void LoadPadArray(int padnum, NSDictionary *nsPrefs)
+{
+ PADDEF *curDef = &g.cfg.PadDef[padnum];
+ curDef->DevNum = [[nsPrefs objectForKey:deviceNumber] charValue];
+ curDef->Type = [[nsPrefs objectForKey:padType] unsignedShortValue];
+ curDef->VisualVibration = 0; //Not implemented on OS X right now.
+
+ //Analog buttons
+ SetKeyFromDictionary([nsPrefs objectForKey:dL3], &curDef->KeyDef[DKEY_L3]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dR3], &curDef->KeyDef[DKEY_R3]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dAnalog], &curDef->KeyDef[DKEY_ANALOG]);
+
+ //Analog sticks
+ SetKeyFromDictionary([nsPrefs objectForKey:dLeftAnalogXP], &curDef->AnalogDef[ANALOG_LEFT][ANALOG_XP]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dLeftAnalogXM], &curDef->AnalogDef[ANALOG_LEFT][ANALOG_XM]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dLeftAnalogYP], &curDef->AnalogDef[ANALOG_LEFT][ANALOG_YP]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dLeftAnalogYM], &curDef->AnalogDef[ANALOG_LEFT][ANALOG_YM]);
+
+ SetKeyFromDictionary([nsPrefs objectForKey:dRightAnalogXP], &curDef->AnalogDef[ANALOG_RIGHT][ANALOG_XP]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dRightAnalogXM], &curDef->AnalogDef[ANALOG_RIGHT][ANALOG_XM]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dRightAnalogYP], &curDef->AnalogDef[ANALOG_RIGHT][ANALOG_YP]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dRightAnalogYM], &curDef->AnalogDef[ANALOG_RIGHT][ANALOG_YM]);
+
+ //Digital shouldurs
+ SetKeyFromDictionary([nsPrefs objectForKey:dL1], &curDef->KeyDef[DKEY_L1]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dL2], &curDef->KeyDef[DKEY_L2]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dR1], &curDef->KeyDef[DKEY_R1]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dR2], &curDef->KeyDef[DKEY_R2]);
+
+ //Digital buttons
+ SetKeyFromDictionary([nsPrefs objectForKey:dSelect], &curDef->KeyDef[DKEY_SELECT]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dStart], &curDef->KeyDef[DKEY_START]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dUp], &curDef->KeyDef[DKEY_UP]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dRight], &curDef->KeyDef[DKEY_RIGHT]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dDown], &curDef->KeyDef[DKEY_DOWN]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dLeft], &curDef->KeyDef[DKEY_LEFT]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dTriangle], &curDef->KeyDef[DKEY_TRIANGLE]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dCircle], &curDef->KeyDef[DKEY_CIRCLE]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dCross], &curDef->KeyDef[DKEY_CROSS]);
+ SetKeyFromDictionary([nsPrefs objectForKey:dSquare], &curDef->KeyDef[DKEY_SQUARE]);
+}
+
+NSDictionary *SavePadArray(int padnum)
+{
+ NSMutableDictionary *mutArray = [NSMutableDictionary dictionary];
+ PADDEF *curDef = &g.cfg.PadDef[padnum];
+ [mutArray setObject:@(curDef->DevNum) forKey:deviceNumber];
+ [mutArray setObject:@(curDef->Type) forKey:padType];
+
+ switch (curDef->Type) {
+ case PSE_PAD_TYPE_ANALOGPAD:
+ {
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_L3]) forKey:dL3];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_R3]) forKey:dR3];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_ANALOG]) forKey:dAnalog];
+
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_LEFT][ANALOG_XP]) forKey:dLeftAnalogXP];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_LEFT][ANALOG_XM]) forKey:dLeftAnalogXM];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_LEFT][ANALOG_YP]) forKey:dLeftAnalogYP];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_LEFT][ANALOG_YM]) forKey:dLeftAnalogYM];
+
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_RIGHT][ANALOG_XP]) forKey:dRightAnalogXP];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_RIGHT][ANALOG_XM]) forKey:dRightAnalogXM];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_RIGHT][ANALOG_YP]) forKey:dRightAnalogYP];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->AnalogDef[ANALOG_RIGHT][ANALOG_YM]) forKey:dRightAnalogYM];
+ }
+ //Fall through
+
+ case PSE_PAD_TYPE_STANDARD:
+ {
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_L1]) forKey:dL1];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_L2]) forKey:dL2];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_R1]) forKey:dR1];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_R2]) forKey:dR2];
+
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_SELECT]) forKey:dSelect];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_START]) forKey:dStart];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_UP]) forKey:dUp];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_RIGHT]) forKey:dRight];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_DOWN]) forKey:dDown];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_LEFT]) forKey:dLeft];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_TRIANGLE]) forKey:dTriangle];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_CIRCLE]) forKey:dCircle];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_CROSS]) forKey:dCross];
+ [mutArray setObject:DictionaryFromButtonDef(curDef->KeyDef[DKEY_SQUARE]) forKey:dSquare];
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return [NSDictionary dictionaryWithDictionary:mutArray];
+}