diff --git a/stepmania/src/OptionRow.cpp b/stepmania/src/OptionRow.cpp index 58cb11465b..65d004ad05 100644 --- a/stepmania/src/OptionRow.cpp +++ b/stepmania/src/OptionRow.cpp @@ -93,6 +93,8 @@ void OptionRow::LoadMetrics( const CString &sType ) COLOR_NOT_SELECTED .Load(m_sType,"ColorNotSelected"); COLOR_DISABLED .Load(m_sType,"ColorDisabled"); CAPITALIZE_ALL_OPTION_NAMES .Load(m_sType,"CapitalizeAllOptionNames"); + SHOW_UNDERLINES .Load(m_sType,"ShowUnderlines"); + TWEEN_SECONDS .Load(m_sType,"TweenSeconds"); } void OptionRow::LoadNormal( const OptionRowDefinition &def, OptionRowHandler *pHand, bool bFirstItemGoesDown ) @@ -364,8 +366,12 @@ void OptionRow::LoadExit() m_textTitle.SetHidden( true ); } -void OptionRow::PositionUnderlines( bool bShowUnderlines, float fTweenSeconds ) +void OptionRow::PositionUnderlines() { + /* + SHOW_UNDERLINES + TWEEN_SECONDS + */ if( m_RowType == ROW_EXIT ) return; @@ -373,13 +379,15 @@ void OptionRow::PositionUnderlines( bool bShowUnderlines, float fTweenSeconds ) { vector &vpUnderlines = m_Underline[p]; + PlayerNumber pnTakeSelectedFrom = m_RowDef.bOneChoiceForAllPlayers ? PLAYER_1 : p; + const int iNumUnderlines = (m_RowDef.layoutType == LAYOUT_SHOW_ONE_IN_ROW) ? 1 : vpUnderlines.size(); for( int i=0; iReload( def ); - switch( GetRowType() ) { case OptionRow::ROW_NORMAL: { - ASSERT( m_RowDef.layoutType == LAYOUT_SHOW_ONE_IN_ROW ); + if( m_pHand == NULL ) + return; + + ExportOptions(); + + OptionRowDefinition def; + m_pHand->Reload( def ); + ASSERT( !m_RowDef.choices.empty() ); + m_RowDef = def; + FOREACH_PlayerNumber( p ) + m_vbSelected[p].resize( m_RowDef.choices.size(), false ); + UpdateText(); + PositionUnderlines(); + + ImportOptions(); } break; case OptionRow::ROW_EXIT: @@ -671,8 +686,6 @@ void OptionRow::Reload() default: ASSERT(0); } - - ImportOptions(); } void OptionRow::HandleMessage( const CString& sMessage ) @@ -704,8 +717,14 @@ void OptionRow::ImportOptions() if( m_pHand == NULL ) return; + // clear selections + FOREACH_PlayerNumber( p ) + FOREACH( bool, m_vbSelected[p], b ) + *b = false; + if( m_RowDef.bOneChoiceForAllPlayers ) { + ASSERT( m_vbSelected[0].size() == m_RowDef.choices.size() ); ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[0] ); m_pHand->ImportOption( m_RowDef, PLAYER_1, m_vbSelected[0] ); INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[0] ); @@ -715,6 +734,7 @@ void OptionRow::ImportOptions() { FOREACH_HumanPlayer( p ) { + ASSERT( m_vbSelected[p].size() == m_RowDef.choices.size() ); ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[p] ); m_pHand->ImportOption( m_RowDef, p, m_vbSelected[p] ); INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[p] ); @@ -732,6 +752,7 @@ int OptionRow::ExportOptions() if( m_RowDef.bOneChoiceForAllPlayers ) { + ASSERT( m_vbSelected[0].size() == m_RowDef.choices.size() ); ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[0] ); iChangeMask |= m_pHand->ExportOption( m_RowDef, PLAYER_1, m_vbSelected[0] ); INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[0] ); @@ -740,6 +761,7 @@ int OptionRow::ExportOptions() { FOREACH_HumanPlayer( p ) { + ASSERT( m_vbSelected[p].size() == m_RowDef.choices.size() ); ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[p] ); iChangeMask |= m_pHand->ExportOption( m_RowDef, p, m_vbSelected[p] ); INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[p] ); diff --git a/stepmania/src/OptionRow.h b/stepmania/src/OptionRow.h index 073613e801..129b5c8eb8 100644 --- a/stepmania/src/OptionRow.h +++ b/stepmania/src/OptionRow.h @@ -97,8 +97,8 @@ public: ); void DetachHandler(); - void PositionUnderlines( bool bShowUnderlines, float fTweenSeconds ); - void PositionIcons( float fTweenSeconds ); + void PositionUnderlines(); + void PositionIcons(); void UpdateText(); void UpdateEnabledDisabled( bool bThisRowHasFocus[NUM_PLAYERS], @@ -144,7 +144,7 @@ public: virtual void HandleMessage( const CString& sMessage ); protected: - CString m_sType; + CString m_sType; OptionRowDefinition m_RowDef; RowType m_RowType; OptionRowHandler* m_pHand; @@ -174,6 +174,8 @@ protected: ThemeMetric COLOR_NOT_SELECTED; ThemeMetric COLOR_DISABLED; ThemeMetric CAPITALIZE_ALL_OPTION_NAMES; + ThemeMetric SHOW_UNDERLINES; + ThemeMetric TWEEN_SECONDS; }; #endif diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index 04485d9704..a5f104266d 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -377,7 +377,7 @@ void ScreenOptions::PositionUnderlines() for( unsigned r=0; r