diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index 7106651772..cf93e41bab 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -334,6 +334,8 @@ void NoteDataUtil::LoadTransformedSlidingWindow( const NoteData &in, NoteData &o out.SetNumTracks( iNewNumTracks ); + if( in.GetNumTracks() == 0 ) + return; // nothing to do and don't AV below int iCurTrackOffset = 0; int iTrackOffsetMin = 0; @@ -1842,6 +1844,22 @@ void NoteDataUtil::RemoveAllTapsExceptForType( NoteData& ndInOut, TapNote::Type } } +int NoteDataUtil::GetNumUsedTracks( const NoteData& in ) +{ + for( int t=0; t2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ), MenuRow( ScreenEdit::play, "Play selection", true, true, 0, NULL ), MenuRow( ScreenEdit::record, "Record in selection", true, true, 0, NULL ), @@ -2132,6 +2132,15 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns AlterType at = (AlterType)iAnswers[c]; switch( at ) { + case autogen_to_fill_width: + { + NoteData temp( m_Clipboard ); + int iNumUsedTracks = NoteDataUtil::GetNumUsedTracks( temp ); + temp.SetNumTracks( iNumUsedTracks ); + NoteDataUtil::LoadTransformedSlidingWindow( temp, m_Clipboard, m_Clipboard.GetNumTracks() ); + NoteDataUtil::FixImpossibleRows( m_Clipboard, GAMESTATE->m_pCurSteps[0]->m_StepsType ); + } + break; case backwards: NoteDataUtil::Backwards( m_Clipboard ); break; case swap_sides: NoteDataUtil::SwapSides( m_Clipboard ); break; case copy_left_to_right: NoteDataUtil::CopyLeftToRight( m_Clipboard ); break; diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index ce34848ea0..bfcd08e65f 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -293,7 +293,8 @@ public: NUM_TRANSFORM_TYPES }; enum AlterType - { + { + autogen_to_fill_width, backwards, swap_sides, copy_left_to_right,