diff --git a/stepmania/src/OptionRowHandler.cpp b/stepmania/src/OptionRowHandler.cpp index e7c7f07f74..e38a0078aa 100644 --- a/stepmania/src/OptionRowHandler.cpp +++ b/stepmania/src/OptionRowHandler.cpp @@ -309,6 +309,7 @@ public: defOut.layoutType = LAYOUT_SHOW_ONE_IN_ROW; defOut.m_bExportOnChange = true; m_vsReloadRowMessages.push_back( MessageToString(MESSAGE_CURRENT_SONG_CHANGED) ); + m_vsReloadRowMessages.push_back( MessageToString(MESSAGE_EDIT_STEPS_TYPE_CHANGED) ); if( GAMESTATE->m_pCurSong != NULL ) { @@ -767,7 +768,7 @@ public: defOut.name = opt->name; } - virtual void ImportOption( const OptionRowDefinition &row, PlayerNumber pn, vector &vbSelectedOut ) const + virtual void ImportOption( const OptionRowDefinition &def, PlayerNumber pn, vector &vbSelectedOut ) const { int iSelection = opt->Get(); SelectExactlyOne( iSelection, vbSelectedOut ); @@ -853,7 +854,7 @@ public: if( *m_pstToFill == STEPS_TYPE_INVALID ) m_pstToFill->Set( m_vStepsTypesToShow[0] ); } - virtual void ImportOption( const OptionRowDefinition &row, PlayerNumber pn, vector &vbSelectedOut ) const + virtual void ImportOption( const OptionRowDefinition &def, PlayerNumber pn, vector &vbSelectedOut ) const { if( GAMESTATE->m_pCurSteps[0] ) { @@ -881,6 +882,7 @@ class OptionRowHandlerSteps : public OptionRowHandler { public: BroadcastOnChangePtr *m_ppStepsToFill; + const BroadcastOnChange *m_pst; vector m_vSteps; OptionRowHandlerSteps::OptionRowHandlerSteps() { Init(); } @@ -898,21 +900,33 @@ public: Init(); defOut.Init(); - if( sParam == "EditSourceSteps" ) + if( sParam == "EditSteps" ) + { + m_ppStepsToFill = &GAMESTATE->m_pCurSteps[0]; + m_pst = &GAMESTATE->m_stEdit; + m_vsReloadRowMessages.push_back( MessageToString(MESSAGE_EDIT_STEPS_TYPE_CHANGED) ); + } + else if( sParam == "EditSourceSteps" ) + { m_ppStepsToFill = &GAMESTATE->m_pEditSourceSteps; + m_pst = &GAMESTATE->m_stEditSource; + m_vsReloadRowMessages.push_back( MessageToString(MESSAGE_EDIT_SOURCE_STEPS_TYPE_CHANGED) ); + } else + { RageException::Throw( "invalid StepsType param \"%s\"", sParam.c_str() ); + } m_sName = sParam; defOut.name = sParam; defOut.bOneChoiceForAllPlayers = true; defOut.layoutType = LAYOUT_SHOW_ONE_IN_ROW; defOut.m_bExportOnChange = true; - m_vsReloadRowMessages.push_back( MessageToString(MESSAGE_EDIT_SOURCE_STEPS_TYPE_CHANGED) ); + m_vsReloadRowMessages.push_back( MessageToString(MESSAGE_CURRENT_SONG_CHANGED) ); if( GAMESTATE->m_pCurSong ) { - GAMESTATE->m_pCurSong->GetSteps( m_vSteps, GAMESTATE->m_stEditSource ); + GAMESTATE->m_pCurSong->GetSteps( m_vSteps, *m_pst ); StepsUtil::SortNotesArrayByDifficulty( m_vSteps ); for( unsigned i=0; i &vbSelectedOut ) const + virtual void ImportOption( const OptionRowDefinition &def, PlayerNumber pn, vector &vbSelectedOut ) const { + ASSERT( m_vSteps.size() == vbSelectedOut.size() ); + + // look for matching steps vector::const_iterator iter = find( m_vSteps.begin(), m_vSteps.end(), m_ppStepsToFill->Get() ); if( iter != m_vSteps.end() ) { @@ -938,6 +955,15 @@ public: vbSelectedOut[i] = true; return; } + // look for matching difficulty + FOREACH_CONST( Steps*, m_vSteps, s ) + { + unsigned i = s - m_vSteps.begin(); + vbSelectedOut[i] = true; + ExportOption( def, pn, vbSelectedOut ); // current steps changed + return; + } + // default to 1st vbSelectedOut[0] = true; } virtual int ExportOption( const OptionRowDefinition &def, PlayerNumber pn, const vector &vbSelected ) const @@ -999,7 +1025,7 @@ public: defOut.choices.push_back( s ); } } - virtual void ImportOption( const OptionRowDefinition &row, PlayerNumber pn, vector &vbSelectedOut ) const + virtual void ImportOption( const OptionRowDefinition &def, PlayerNumber pn, vector &vbSelectedOut ) const { vbSelectedOut[0] = true; }