From 7768134149a6dc70155cc52ac9feb1524e994d55 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Jun 2011 17:03:53 -0400 Subject: [PATCH] Alright pumpervinil, you got your Delay wish. I hope that's enough for you. --- Themes/_fallback/Languages/en.ini | 1 + src/ScreenEdit.cpp | 23 +++++++++++++++++++++++ src/ScreenEdit.h | 1 + 3 files changed, 25 insertions(+) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index 01b038adf5..75e0cfdf1b 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -814,6 +814,7 @@ CoinsPerCredit=Coins Per Credit Connection=Connection Convert pause to beats=Convert pause to beats Convert selection to pause=Convert selection to pause +Convert selection to delay=Convert selection to delay Convert selection to warp=Convert selection to Warp Segment Convert selection to fake=Convert selection to Fake Segment Copy=Copy diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index db85c529d5..b5ff78ffae 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -538,6 +538,8 @@ static MenuDef g_AlterMenu( EditMode_Practice, true, true, 0, NULL ), MenuRowDef(ScreenEdit::convert_to_pause, "Convert selection to pause", true, EditMode_Full, true, true, 0, NULL ), + MenuRowDef(ScreenEdit::convert_to_delay, "Convert selection to delay", true, + EditMode_Full, true, true, 0, NULL ), MenuRowDef(ScreenEdit::convert_to_warp, "Convert selection to warp", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef(ScreenEdit::convert_to_fake, "Convert selection to fake", true, @@ -3719,6 +3721,27 @@ void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector &iAn m_NoteFieldEdit.m_iEndMarker = -1; break; } + case convert_to_delay: + { + ASSERT_M( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1, "Attempted to convert beats outside the notefield to pauses!" ); + float fMarkerStart = GetAppropriateTiming().GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker) ); + float fMarkerEnd = GetAppropriateTiming().GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) ); + + // The length of the delay segment we're going to create. This includes time spent in any + // stops in the selection, which will be deleted and subsumed into the new stop. + float fStopLength = fMarkerEnd - fMarkerStart; + + NoteDataUtil::DeleteRows( m_NoteDataEdit, + m_NoteFieldEdit.m_iBeginMarker, + m_NoteFieldEdit.m_iEndMarker-m_NoteFieldEdit.m_iBeginMarker + ); + GetAppropriateTiming().DeleteRows( m_NoteFieldEdit.m_iBeginMarker, + m_NoteFieldEdit.m_iEndMarker-m_NoteFieldEdit.m_iBeginMarker ); + GetAppropriateTiming().SetDelayAtRow( m_NoteFieldEdit.m_iBeginMarker, fStopLength ); + m_NoteFieldEdit.m_iBeginMarker = -1; + m_NoteFieldEdit.m_iEndMarker = -1; + break; + } case convert_to_warp: { float startBeat = NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker); diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 35f30f155b..f3e4a912e5 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -385,6 +385,7 @@ public: play, record, convert_to_pause, + convert_to_delay, convert_to_warp, convert_to_fake, NUM_ALTER_MENU_CHOICES