From b50482c1854a8ef3bccba3593c2dff855f607062 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 18 Jul 2005 01:50:31 +0000 Subject: [PATCH] put focus on last selected profile --- stepmania/src/ScreenOptions.cpp | 22 +++++++++++++------- stepmania/src/ScreenOptions.h | 5 +++-- stepmania/src/ScreenOptionsSelectProfile.cpp | 14 +++++++++---- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index a73202386e..27f481bd0c 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -805,7 +805,7 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type ) INPUTMAPPER->IsButtonDown( MenuInput(pn, MENU_BUTTON_LEFT) ); if( bHoldingLeftAndRight ) { - MoveRow( pn, -1, type != IET_FIRST_PRESS ); + MoveRowRelative( pn, -1, type != IET_FIRST_PRESS ); return; } } @@ -907,7 +907,7 @@ void ScreenOptions::ProcessMenuStart( PlayerNumber pn, const InputEventType type case NAV_FIVE_KEY: /* Jump to the exit row. (If everyone's already on the exit row, then * we'll have already gone to the next screen above.) */ - MoveRow( pn, m_pRows.size()-m_iCurrentRow[pn]-1, type != IET_FIRST_PRESS ); + MoveRowRelative( pn, m_pRows.size()-m_iCurrentRow[pn]-1, type != IET_FIRST_PRESS ); break; } } @@ -945,7 +945,7 @@ void ScreenOptions::ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat ) * * XXX: Only allow repeats if the opposite key isn't pressed; otherwise, holding both * directions will repeat in place continuously, which is weird. */ - MoveRow( pn, iDelta, Repeat ); + MoveRowRelative( pn, iDelta, Repeat ); return; } @@ -1045,7 +1045,7 @@ void ScreenOptions::ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat ) /* Up/down */ -void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat ) +void ScreenOptions::MoveRowRelative( PlayerNumber pn, int iDir, bool Repeat ) { const int iCurrentRow = m_iCurrentRow[pn]; OptionRow &row = *m_pRows[iCurrentRow]; @@ -1057,14 +1057,14 @@ void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat ) row.SetChoiceInRowWithFocus( pn, 0 ); } - LOG->Trace("move pn %i, dir %i, rep %i", pn, dir, Repeat); + LOG->Trace("move pn %i, dir %i, rep %i", pn, iDir, Repeat); bool changed = false; FOREACH_PlayerNumber( p ) { if( m_InputMode == INPUTMODE_INDIVIDUAL && p != pn ) continue; // skip - int r = m_iCurrentRow[p] + dir; + int r = m_iCurrentRow[p] + iDir; if( Repeat && ( r == -1 || r == (int) m_pRows.size() ) ) continue; // don't wrap while repeating @@ -1106,13 +1106,19 @@ void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat ) } if( changed ) { - if( dir < 0 ) + if( iDir < 0 ) m_SoundPrevRow.Play(); else m_SoundNextRow.Play(); } } +void ScreenOptions::MoveRowAbsolute( PlayerNumber pn, int iRow, bool bRepeat ) +{ + int iDir = iRow - m_iCurrentRow[pn]; + MoveRowRelative( pn, iDir, bRepeat ); +} + void ScreenOptions::MenuUp( PlayerNumber pn, const InputEventType type ) { MenuUpDown( pn, type, -1 ); @@ -1170,7 +1176,7 @@ void ScreenOptions::MenuUpDown( PlayerNumber pn, const InputEventType type, int if( row.GetRowDef().IsEnabledForPlayer(pn) ) { - MoveRow( pn, iDelta, bRepeat ); + MoveRowRelative( pn, iDelta, bRepeat ); return; } } diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index f8e950806c..de2920672e 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -66,9 +66,10 @@ protected: virtual void BeginFadingOut() { this->PostScreenMessage( SM_BeginFadingOut, 0 ); } - void ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat ); + void ChangeValueInRow( PlayerNumber pn, int iDelta, bool bRepeat ); virtual void AfterChangeValueInRow( PlayerNumber pn ) {} // override this to detect when the value in a row has changed - void MoveRow( PlayerNumber pn, int dir, bool Repeat ); + void MoveRowRelative( PlayerNumber pn, int iDir, bool bRepeat ); + void MoveRowAbsolute( PlayerNumber pn, int iRow, bool bRepeat ); void MenuLeft( PlayerNumber pn, const InputEventType type ) { ChangeValueInRow(pn,-1,type != IET_FIRST_PRESS); } void MenuRight( PlayerNumber pn, const InputEventType type ) { ChangeValueInRow(pn,+1,type != IET_FIRST_PRESS); } diff --git a/stepmania/src/ScreenOptionsSelectProfile.cpp b/stepmania/src/ScreenOptionsSelectProfile.cpp index df132c51a8..21cd129363 100644 --- a/stepmania/src/ScreenOptionsSelectProfile.cpp +++ b/stepmania/src/ScreenOptionsSelectProfile.cpp @@ -55,7 +55,6 @@ void ScreenOptionsSelectProfile::Init() vector vDefs; - vector vHands; OptionRowDefinition def; def.m_layoutType = LAYOUT_SHOW_ONE_IN_ROW; @@ -66,6 +65,7 @@ void ScreenOptionsSelectProfile::Init() def.m_bAllowExplanation = false; int iIndex = 0; + int iRowToSelect = -1; { def.m_sName = ""; @@ -77,13 +77,15 @@ void ScreenOptionsSelectProfile::Init() GameCommand &gc = pHand->m_gc; CString sCommand = "screen,ScreenOptionsEditProfile"; gc.Load( iIndex++, ParseCommands(sCommand) ); - vHands.push_back( pHand ); } vector vsProfileID; PROFILEMAN->GetLocalProfileIDs( vsProfileID ); FOREACH_CONST( CString, vsProfileID, s ) { + if( *s == GAMESTATE->m_sLastSelectedProfileID ) + iRowToSelect = iIndex; + Profile &pro = PROFILEMAN->GetLocalProfile( *s ); def.m_sName = ""; def.m_vsChoices.clear(); @@ -94,10 +96,14 @@ void ScreenOptionsSelectProfile::Init() GameCommand &gc = pHand->m_gc; CString sCommand = "profileid," + *s; gc.Load( iIndex++, ParseCommands(sCommand) ); - vHands.push_back( pHand ); } - InitMenu( vDefs, vHands ); + InitMenu( vDefs, m_OptionRowHandlers ); + + if( iRowToSelect != -1 ) + MoveRowAbsolute( PLAYER_1, iRowToSelect, false ); + + GAMESTATE->m_sLastSelectedProfileID = ""; } ScreenOptionsSelectProfile::~ScreenOptionsSelectProfile()