bool InputConverter::LoadBinds(std::string filename) { std::fstream stream(filename); if (!stream.is_open()) { return false; } while (!stream.eof()) { std::string line; std::getline(stream, line, '\n'); if (line.length() == 0) { continue; } std::stringstream ss(line); std::string type; std::string key; std::string value; ss >> type; ss >> key; ss >> value; for (auto it = m_actions.begin(); it != m_actions.end(); it++) { if (ActionToString(it->first) == type) { it->second = key + " " + value; } } } return true; }
BSCMenuItem::BSCMenuItem(uint32 action, BMessage *message) : BMenuItem(ActionToString(action), message), fAction(action), fMenuIcon(NULL) { }
void InputConverter::SaveBinds(std::string filename) { std::fstream stream(filename); auto it = m_actions.begin(); while (it != m_actions.end()) { stream << ActionToString(it->first) << " " << it->second << "\n"; it++; } }
void EditCoursesMenu::OnRowValueChanged( Row row ) { LOG->Trace( "EditCoursesMenu::OnRowValueChanged(%i)", row ); const bool bCanGoLeft = CanGoLeft(), bCanGoRight = CanGoRight(); m_sprArrows[0].SetDiffuse( bCanGoLeft?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) ); m_sprArrows[1].SetDiffuse( bCanGoRight?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) ); m_sprArrows[0].EnableAnimation( bCanGoLeft ); m_sprArrows[1].EnableAnimation( bCanGoRight ); Course* pCourse = GetSelectedCourse(); CourseEntry* pEntry = GetSelectedEntry(); switch( row ) { case ROW_COURSE: CHECKPOINT; m_textValue[ROW_COURSE].SetText( pCourse->GetFullDisplayTitle() ); m_CourseBanner.LoadFromCourse( pCourse ); m_CourseBanner.ScaleToClipped( COURSE_BANNER_WIDTH, COURSE_BANNER_HEIGHT ); m_iSelection[ROW_ENTRY] = 0; pEntry = GetSelectedEntry(); if( pEntry == NULL ) { CourseEntry ce; const vector<Song*> &apSongs = SONGMAN->GetAllSongs(); ASSERT( !apSongs.empty() ); ce.pSong = apSongs[0]; pCourse->m_entries.push_back( ce ); pEntry = GetSelectedEntry(); } // fall through case ROW_COURSE_OPTIONS: CHECKPOINT; m_textValue[ROW_COURSE_OPTIONS].SetText( ssprintf( "(START) %s, %s, ", pCourse->m_bRepeat ? "repeat" : "no repeat", pCourse->m_bRandomize ? "randomize" : "no randomize" ) + ssprintf( (pCourse->m_iLives==-1) ? "use bar life" : "%d lives", pCourse->m_iLives ) ); // fall through case ROW_ACTION: CHECKPOINT; m_textValue[ROW_ACTION].SetText( "(START) " + ActionToString(GetSelectedAction()) ); // fall through case ROW_ENTRY: CHECKPOINT; m_textValue[ROW_ENTRY].SetText( ssprintf("%d of %d",m_iSelection[ROW_ENTRY]+1, (int)GetSelectedCourse()->m_entries.size()) ); m_iSelection[ROW_ENTRY_TYPE] = pEntry->type; // fall through case ROW_ENTRY_TYPE: CHECKPOINT; m_textValue[ROW_ENTRY_TYPE].SetText( pEntry ? CourseEntryTypeToString(pEntry->type) : CString("(none)") ); // fall through case ROW_ENTRY_OPTIONS: CHECKPOINT; { CStringArray as; const bool *bShow = g_bRowEnabledForType[GetSelectedEntry()->type]; if( bShow[song] ) as.push_back( pEntry->pSong ? pEntry->pSong->GetFullTranslitTitle() : CString("(missing song)") ); if( bShow[group] ) as.push_back( pEntry->group_name.empty() ? CString("(no group)") : pEntry->group_name ); if( bShow[difficulty] ) if( pEntry->difficulty != DIFFICULTY_INVALID ) as.push_back( DifficultyToString(pEntry->difficulty) ); if( bShow[low_meter] ) if( pEntry->low_meter > 0 ) as.push_back( ssprintf("low meter %d", pEntry->low_meter) ); if( bShow[high_meter] ) if( pEntry->high_meter > 0 ) as.push_back( ssprintf("high meter %d", pEntry->high_meter) ); if( bShow[best_worst_value] ) if( pEntry->players_index != -1 ) as.push_back( ssprintf("rank %d", pEntry->players_index+1) ); m_textValue[ROW_ENTRY_OPTIONS].SetText( "(START) " + join(", ",as) ); } // fall through case ROW_ENTRY_PLAYER_OPTIONS: CHECKPOINT; { CString s = "(START) "; PlayerOptions po; po.FromString( pEntry->modifiers ); if( po.GetString().empty() ) s += "(none)"; else s += po.GetString(); m_textValue[ROW_ENTRY_PLAYER_OPTIONS].SetText( s ); } // fall through case ROW_ENTRY_SONG_OPTIONS: CHECKPOINT; { CString s = "(START) "; SongOptions so; so.FromString( pEntry->modifiers ); if( so.GetString().empty() ) s += "(none)"; else s += so.GetString(); m_textValue[ROW_ENTRY_SONG_OPTIONS].SetText( s ); } break; default: ASSERT(0); // invalid row } }
// 查询信号. // 根据查询条件执行动作. // 格式: // condAction = il + pos + sig + action. // = ih + pos + sig + action. // ih 230-20MA-p5 // ih 230-20 MA - p5 // op pos sig - p5 u8 ParseCmd_I(char * pCmdStr, CMD_ST *pstCmd) { static s8 s_ascSigBuf[40]; static s8 s_ascPosBuf[40]; static s8 s_ascActionBuf[40]; u8 ucSigLevel = 0xFF; char * pEnd; char * pStart; char scBackup; CONDITION_POS_ST stPos; CONDITION_SIG_ST stSig; ACTION_ST stAction; if(pCmdStr == NULL) { return 0; } fprintf(stderr,"\t%s:\t开始解析\n",pCmdStr); if (*pCmdStr != 'I' && *pCmdStr != 'i') { assert(0); return 0; } pCmdStr++; if (*pCmdStr == 'h' || *pCmdStr == 'H') { ucSigLevel = 1; } else if (*pCmdStr == 'l' || *pCmdStr == 'L') { ucSigLevel = 0; } else { return 0; // command not recognized. } errno = 0; pCmdStr++; // 确认是否是位置,定位信号名. if (*pCmdStr == POS_PREFIX) // 使用的是指定位置的方式 { pStart = pCmdStr + 1; } else { pStart = pCmdStr; } // 查找有效信号名称. if ((pEnd = strchr(pStart,'H')) == NULL &&(pEnd = strchr(pStart,'M')) == NULL) { ERRINFO("未指定有效的信号名"); return 0; } // 位置信号. scBackup = *pEnd; *pEnd = '\0'; strcpy((char*)s_ascPosBuf,pCmdStr); *pEnd = scBackup; if (HfnGetPos((char*)s_ascPosBuf,&stPos) == false) { ERRINFO("未指定有效的信号名"); return 0; } // 确认信号. 信号和动作之间的分隔符是'-' pStart = pEnd; if ((pEnd = strchr(pStart,'-')) == NULL) { ERRINFO("未指定有效动作"); return 0; } scBackup = *pEnd; *pEnd = '\0'; strcpy((char*)s_ascSigBuf,pStart); *pEnd = scBackup; if (HfnGetSig(pStart,&stSig) == false) { ERRINFO("未指定有效的信号名"); return 0; } pStart = pEnd + 1; // 跳过分隔符. strcpy((char*)s_ascActionBuf,pStart); if (HfnGetAction((char*)s_ascActionBuf,&stAction) == false) { ERRINFO("动作字符串无法解析:%s",pStart); return 0; } // ih/il. ActionToString(&stAction,(char*)s_ascActionBuf); fprintf(stderr,"\t查询信号:%s ,位置:%d,若信号值为%d,执行动作: %s\n", s_ascSigBuf,stPos.m_slPos,ucSigLevel,s_ascActionBuf); // 为了兼容性考虑.需要将相关的单命令解析函数抽离出来,并适当组合.以适当匹配各情况 // 比如这里可能是设置IO.也可能是停止.也可能是设置新的运行目标. pstCmd->m_ucLen++; fprintf(stderr,"\t解析完成,命令ID = %u\n",(unsigned)pstCmd->m_ucLen); return 1; }
void EditMenu::OnRowValueChanged( Row row ) { m_sprArrows[0].SetDiffuse( CanGoLeft()?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) ); m_sprArrows[1].SetDiffuse( CanGoRight()?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) ); m_sprArrows[0].EnableAnimation( CanGoLeft() ); m_sprArrows[1].EnableAnimation( CanGoRight() ); switch( row ) { case ROW_GROUP: m_textValue[ROW_GROUP].SetText( SONGMAN->ShortenGroupName(GetSelectedGroup()) ); m_GroupBanner.LoadFromGroup( GetSelectedGroup() ); m_GroupBanner.ScaleToClipped( GROUP_BANNER_WIDTH, GROUP_BANNER_HEIGHT ); m_pSongs.clear(); SONGMAN->GetSongs( m_pSongs, GetSelectedGroup() ); m_iSelection[ROW_SONG] = 0; // fall through case ROW_SONG: m_textValue[ROW_SONG].SetText( "" ); m_SongBanner.LoadFromSong( GetSelectedSong() ); m_SongBanner.ScaleToClipped( SONG_BANNER_WIDTH, SONG_BANNER_HEIGHT ); m_SongTextBanner.LoadFromSong( GetSelectedSong() ); // fall through case ROW_STEPS_TYPE: m_textValue[ROW_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToString(GetSelectedStepsType()) ); // fall through case ROW_DIFFICULTY: m_textValue[ROW_DIFFICULTY].SetText( DifficultyToString(GetSelectedDifficulty()) ); m_Meter.SetFromSteps( GetSelectedNotes() ); // fall through case ROW_SOURCE_STEPS_TYPE: m_textLabel[ROW_SOURCE_STEPS_TYPE].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) ); m_textValue[ROW_SOURCE_STEPS_TYPE].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) ); m_textValue[ROW_SOURCE_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToString(GetSelectedSourceStepsType()) ); // fall through case ROW_SOURCE_DIFFICULTY: m_textLabel[ROW_SOURCE_DIFFICULTY].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) ); m_textValue[ROW_SOURCE_DIFFICULTY].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) ); m_textValue[ROW_SOURCE_DIFFICULTY].SetText( DifficultyToString(GetSelectedSourceDifficulty()) ); m_SourceMeter.SetFromSteps( GetSelectedSourceNotes() ); m_SourceMeter.SetZoomY( GetSelectedNotes()?0.f:1.f ); m_Actions.clear(); if( GetSelectedNotes() ) { m_Actions.push_back( ACTION_EDIT ); m_Actions.push_back( ACTION_DELETE ); } else if( GetSelectedSourceNotes() ) { m_Actions.push_back( ACTION_COPY ); m_Actions.push_back( ACTION_AUTOGEN ); m_Actions.push_back( ACTION_BLANK ); } else { m_Actions.push_back( ACTION_BLANK ); } m_iSelection[ROW_ACTION] = 0; // fall through case ROW_ACTION: m_textValue[ROW_ACTION].SetText( ActionToString(GetSelectedAction()) ); break; default: ASSERT(0); // invalid row } }
std::string InputConverter::GetAction(int value) { std::string ret = ActionToString(static_cast<Action>(value)); return ret; }