diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index fce467fdba..d2fb58e6ab 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -181,7 +181,7 @@ PrefsManager::PrefsManager() : m_bShowSelectGroup ( "ShowSelectGroup", false ), m_bShowCaution ( "ShowCaution", true ), m_bShowNativeLanguage ( "ShowNativeLanguage", true ), - m_bArcadeOptionsNavigation ( "ArcadeOptionsNavigation", false ), + m_iArcadeOptionsNavigation ( "ArcadeOptionsNavigation", 0 ), m_MusicWheelUsesSections ( "MusicWheelUsesSections", MusicWheelUsesSections_ALWAYS ), m_iMusicWheelSwitchSpeed ( "MusicWheelSwitchSpeed", 10 ), m_AllowW1 ( "AllowW1", ALLOW_W1_EVERYWHERE ), diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index e9c6400a4e..675d40c961 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -143,7 +143,7 @@ public: Preference m_bShowSelectGroup; Preference m_bShowCaution; Preference m_bShowNativeLanguage; - Preference m_bArcadeOptionsNavigation; + Preference m_iArcadeOptionsNavigation; Preference m_MusicWheelUsesSections; Preference m_iMusicWheelSwitchSpeed; Preference m_AllowW1; diff --git a/stepmania/src/ScreenMiniMenu.cpp b/stepmania/src/ScreenMiniMenu.cpp index a1b64cb4b8..05839d1093 100644 --- a/stepmania/src/ScreenMiniMenu.cpp +++ b/stepmania/src/ScreenMiniMenu.cpp @@ -48,7 +48,7 @@ REGISTER_SCREEN_CLASS( ScreenMiniMenu ); void ScreenMiniMenu::Init() { - if( PREFSMAN->m_bArcadeOptionsNavigation ) + if( PREFSMAN->m_iArcadeOptionsNavigation ) SetNavigation( NAV_THREE_KEY_MENU ); ScreenOptions::Init(); diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index e3be796def..58a5d4ba76 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -30,6 +30,10 @@ * (next screen via "exit" entry) * This is the minimal navigation, for using menus with only three buttons. * + * NAV_THREE_KEY_ALT: + * left, right -> next, prev row + * start -> change option + * * NAV_FIVE_KEY: * start -> next screen * This is a much more convenient navigation, requiring five keys. @@ -46,7 +50,7 @@ * for non-multiselect rows (eg. scroll speed). * * THREE_KEY modes are navigatable with only MenuLeft, MenuRight and MenuStart, and - * are used when PREFSMAN->m_bArcadeOptionsNavigation is enabled. However, they can + * are used when PREFSMAN->m_iArcadeOptionsNavigation is enabled. However, they can * still use MenuUp and MenuDown for nonessential behavior. * * NAV_THREE_KEY_MENU: @@ -77,7 +81,12 @@ StringToX( InputMode ); ScreenOptions::ScreenOptions() { // These can be overridden in a derived Init(). - m_OptionsNavigation = PREFSMAN->m_bArcadeOptionsNavigation? NAV_THREE_KEY:NAV_FIVE_KEY; + switch( PREFSMAN->m_iArcadeOptionsNavigation ) + { + case 0: SetNavigation( NAV_FIVE_KEY ); break; + case 1: SetNavigation( NAV_THREE_KEY ); break; + case 2: SetNavigation( NAV_THREE_KEY_ALT ); break; + } m_InputMode = INPUTMODE_SHARE_CURSOR; } @@ -910,6 +919,10 @@ void ScreenOptions::ProcessMenuStart( const InputEventPlus &input ) return; MenuDown( input ); break; + case NAV_THREE_KEY_ALT: + ChangeValueInRowRelative( m_iCurrentRow[input.pn], input.pn, +1, input.type != IET_FIRST_PRESS ); + break; + case NAV_TOGGLE_THREE_KEY: case NAV_TOGGLE_FIVE_KEY: { @@ -1215,12 +1228,18 @@ bool ScreenOptions::MoveRowAbsolute( PlayerNumber pn, int iRow ) void ScreenOptions::MenuLeft( const InputEventPlus &input ) { - ChangeValueInRowRelative(m_iCurrentRow[input.pn],input.pn,-1, input.type != IET_FIRST_PRESS); + if( m_OptionsNavigation == NAV_THREE_KEY_ALT ) + MenuUpDown( input, -1 ); + else + ChangeValueInRowRelative(m_iCurrentRow[input.pn],input.pn,-1, input.type != IET_FIRST_PRESS); } void ScreenOptions::MenuRight( const InputEventPlus &input ) { - ChangeValueInRowRelative(m_iCurrentRow[input.pn], input.pn,+1, input.type != IET_FIRST_PRESS); + if( m_OptionsNavigation == NAV_THREE_KEY_ALT ) + MenuUpDown( input, +1 ); + else + ChangeValueInRowRelative(m_iCurrentRow[input.pn], input.pn,+1, input.type != IET_FIRST_PRESS); } void ScreenOptions::MenuUp( const InputEventPlus &input ) diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index 4bd7666f11..676d3c9f42 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -89,7 +89,7 @@ protected: bool AllAreOnLastRow() const; protected: // derived classes need access to these - enum Navigation { NAV_THREE_KEY, NAV_THREE_KEY_MENU, NAV_FIVE_KEY, NAV_TOGGLE_THREE_KEY, NAV_TOGGLE_FIVE_KEY }; + enum Navigation { NAV_THREE_KEY, NAV_THREE_KEY_MENU, NAV_THREE_KEY_ALT, NAV_FIVE_KEY, NAV_TOGGLE_THREE_KEY, NAV_TOGGLE_FIVE_KEY }; void SetNavigation( Navigation nav ) { m_OptionsNavigation = nav; } void SetInputMode( InputMode im ) { m_InputMode = im; } diff --git a/stepmania/src/ScreenOptionsManageWorkouts.cpp b/stepmania/src/ScreenOptionsManageWorkouts.cpp index d0a0887500..197fdde554 100644 --- a/stepmania/src/ScreenOptionsManageWorkouts.cpp +++ b/stepmania/src/ScreenOptionsManageWorkouts.cpp @@ -41,7 +41,7 @@ REGISTER_SCREEN_CLASS( ScreenOptionsManageWorkouts ); void ScreenOptionsManageWorkouts::Init() { - if( PREFSMAN->m_bArcadeOptionsNavigation ) + if( PREFSMAN->m_iArcadeOptionsNavigation ) SetNavigation( NAV_THREE_KEY_MENU ); ScreenOptions::Init(); diff --git a/stepmania/src/ScreenOptionsReviewWorkout.cpp b/stepmania/src/ScreenOptionsReviewWorkout.cpp index f975976e2a..4d806cc6cc 100644 --- a/stepmania/src/ScreenOptionsReviewWorkout.cpp +++ b/stepmania/src/ScreenOptionsReviewWorkout.cpp @@ -43,7 +43,7 @@ AutoScreenMessage( SM_BackFromEnterName ) void ScreenOptionsReviewWorkout::Init() { - if( PREFSMAN->m_bArcadeOptionsNavigation ) + if( PREFSMAN->m_iArcadeOptionsNavigation ) SetNavigation( NAV_THREE_KEY_MENU ); ScreenOptions::Init();