// <KEY_SEQUENCE> KeySeq *SettingLoader::load_KEY_SEQUENCE( const tstringi &i_name, bool i_isInParen, Modifier::Type i_mode) { KeySeq keySeq(i_name); while (!isEOL()) { Modifier::Type mode; Modifier modifier = load_MODIFIER(i_mode, m_defaultKeySeqModifier, &mode); keySeq.setMode(mode); Token *t = lookToken(); if (t->isCloseParen() && i_isInParen) break; else if (t->isOpenParen()) { getToken(); // open paren KeySeq *ks = load_KEY_SEQUENCE(_T(""), true, i_mode); getToken(); // close paren keySeq.add(ActionKeySeq(ks)); } else if (*t == _T("$")) { // <KEYSEQ_NAME> getToken(); t = getToken(); KeySeq *ks = m_setting->m_keySeqs.searchByName(t->getString()); if (ks == NULL) throw ErrorMessage() << _T("`$") << *t << _T("': unknown keyseq name."); if (!ks->isCorrectMode(i_mode)) throw ErrorMessage() << _T("`$") << *t << _T("': Some of R-, IL-, IC-, NL-, CL-, SL-, KL-, MAX-, MIN-, MMAX-, MMIN-, T-, TS-, M0...M9- and L0...L9- are used in the keyseq. They are prohibited in this context."); keySeq.setMode(ks->getMode()); keySeq.add(ActionKeySeq(ks)); } else if (*t == _T("&")) { // <FUNCTION_NAME> getToken(); t = getToken(); // search function ActionFunction af(createFunctionData(t->getString()), modifier); if (af.m_functionData == NULL) throw ErrorMessage() << _T("`&") << *t << _T("': unknown function name."); af.m_functionData->load(this); keySeq.add(af); } else { // <KEYSEQ_MODIFIED_KEY_NAME> ModifiedKey mkey; mkey.m_modifier = modifier; mkey.m_key = load_KEY_NAME(); keySeq.add(ActionKey(mkey)); } } return m_setting->m_keySeqs.add(keySeq); }
void PortableAction(int state, int action) { LOGI("PortableAction %d %d",state,action); if (PortableInMenu()) { if (action >= PORT_ACT_MENU_UP && action <= PORT_ACT_MENU_BACK) { int sdl_code [] = { SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RETURN, SDL_SCANCODE_ESCAPE }; PortableKeyEvent(state, sdl_code[action-PORT_ACT_MENU_UP], 0); return; } } else { int key = -1; switch (action) { case PORT_ACT_LEFT: key = key_left; break; case PORT_ACT_RIGHT: key = key_right; break; case PORT_ACT_FWD: key = key_up; break; case PORT_ACT_BACK: key = key_down; break; case PORT_ACT_MOVE_LEFT: key = key_strafeleft; break; case PORT_ACT_MOVE_RIGHT: key = key_straferight; break; case PORT_ACT_USE: key = key_use; break; case PORT_ACT_ATTACK: key = key_fire; break; case PORT_ACT_JUMP: key = key_jump; break; case PORT_ACT_STRAFE: key = key_strafe; break; case PORT_ACT_SPEED: key = key_speed; break; case PORT_ACT_MAP: key = key_map_toggle; break; case PORT_ACT_MAP_ZOOM_IN: key = key_map_zoomin; break; case PORT_ACT_MAP_ZOOM_OUT: key = key_map_zoomout; break; case PORT_ACT_INVUSE: key = key_useartifact; break; case PORT_ACT_INVDROP: key = key_invdrop; break; case PORT_ACT_INVPREV: key = key_invleft; break; case PORT_ACT_INVNEXT: key = key_invright; break; case PORT_ACT_NEXT_WEP: key = key_nextweapon; break; case PORT_ACT_PREV_WEP: key = key_prevweapon; break; case PORT_ACT_QUICKSAVE: key = key_menu_qsave; break; case PORT_ACT_QUICKLOAD: key = key_menu_qload; break; case PORT_ACT_GAMMA: key = key_menu_gamma; break; case PORT_ACT_HELPCOMP: key = key_mission; break; case PORT_ACT_SHOW_WEAPONS: key = key_invpop; break; case PORT_ACT_SHOW_KEYS: key = key_invkey; break; case PORT_ACT_FLY_UP: key = key_flyup; break; case PORT_ACT_FLY_DOWN: key = key_flydown; break; case PORT_ACT_FLY_CENTER: key = key_flycenter; break; case PORT_ACT_WEAP1: newweapon = 1; break; case PORT_ACT_WEAP2: newweapon = 2; break; case PORT_ACT_WEAP3: newweapon = 3; break; case PORT_ACT_WEAP4: newweapon = 4; break; case PORT_ACT_WEAP5: newweapon = 5; break; case PORT_ACT_WEAP6: newweapon = 6; break; case PORT_ACT_WEAP7: newweapon = 7; break; case PORT_ACT_WEAP8: newweapon = 8; break; } if (key != -1) ActionKey(state,key); } }
ActionValue::WeakPtr ActionValue::find(const ActionGenerator *gen, QObject *controller) { return actionMap()->value(ActionKey(controller, gen)); }