// TODO: This is such a mess... void UpdateNativeMenuKeys() { std::vector<KeyDef> confirmKeys, cancelKeys; std::vector<KeyDef> tabLeft, tabRight; std::vector<KeyDef> upKeys, downKeys, leftKeys, rightKeys; int confirmKey = g_Config.iButtonPreference == PSP_SYSTEMPARAM_BUTTON_CROSS ? CTRL_CROSS : CTRL_CIRCLE; int cancelKey = g_Config.iButtonPreference == PSP_SYSTEMPARAM_BUTTON_CROSS ? CTRL_CIRCLE : CTRL_CROSS; KeyFromPspButton(confirmKey, &confirmKeys); KeyFromPspButton(cancelKey, &cancelKeys); KeyFromPspButton(CTRL_LTRIGGER, &tabLeft); KeyFromPspButton(CTRL_RTRIGGER, &tabRight); KeyFromPspButton(CTRL_UP, &upKeys); KeyFromPspButton(CTRL_DOWN, &downKeys); KeyFromPspButton(CTRL_LEFT, &leftKeys); KeyFromPspButton(CTRL_RIGHT, &rightKeys); #ifdef ANDROID // Hardcode DPAD on Android upKeys.push_back(KeyDef(DEVICE_ID_ANY, NKCODE_DPAD_UP)); downKeys.push_back(KeyDef(DEVICE_ID_ANY, NKCODE_DPAD_DOWN)); leftKeys.push_back(KeyDef(DEVICE_ID_ANY, NKCODE_DPAD_LEFT)); rightKeys.push_back(KeyDef(DEVICE_ID_ANY, NKCODE_DPAD_RIGHT)); #endif // Push several hard-coded keys before submitting to native. const KeyDef hardcodedConfirmKeys[] = { KeyDef(DEVICE_ID_KEYBOARD, NKCODE_SPACE), KeyDef(DEVICE_ID_KEYBOARD, NKCODE_ENTER), KeyDef(DEVICE_ID_ANY, NKCODE_BUTTON_A), }; // If they're not already bound, add them in. for (size_t i = 0; i < ARRAY_SIZE(hardcodedConfirmKeys); i++) { if (std::find(confirmKeys.begin(), confirmKeys.end(), hardcodedConfirmKeys[i]) == confirmKeys.end()) confirmKeys.push_back(hardcodedConfirmKeys[i]); } const KeyDef hardcodedCancelKeys[] = { KeyDef(DEVICE_ID_KEYBOARD, NKCODE_ESCAPE), KeyDef(DEVICE_ID_ANY, NKCODE_BACK), KeyDef(DEVICE_ID_ANY, NKCODE_BUTTON_B), }; for (size_t i = 0; i < ARRAY_SIZE(hardcodedCancelKeys); i++) { if (std::find(cancelKeys.begin(), cancelKeys.end(), hardcodedCancelKeys[i]) == cancelKeys.end()) cancelKeys.push_back(hardcodedCancelKeys[i]); } SetDPadKeys(upKeys, downKeys, leftKeys, rightKeys); SetConfirmCancelKeys(confirmKeys, cancelKeys); SetTabLeftRightKeys(tabLeft, tabRight); }
void SaveToIni(IniFile &file) { IniFile::Section *controls = file.GetOrCreateSection("ControlMapping"); for (size_t i = 0; i < ARRAY_SIZE(psp_button_names); i++) { std::vector<KeyDef> keys; KeyFromPspButton(psp_button_names[i].key, &keys); std::string value; for (size_t j = 0; j < keys.size(); j++) { char temp[128]; sprintf(temp, "%i-%i", keys[j].deviceId, keys[j].keyCode); value += temp; if (j != keys.size() - 1) value += ","; } controls->Set(psp_button_names[i].name.c_str(), value, ""); } }