diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 8b7671fba1..a01d5aa25c 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -2669,13 +2669,13 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) else if ( SM == SM_BackFromLabelChange ) { RString sLabel = ScreenTextEntry::s_sLastAnswer; - if ( sLabel.length() > 0 ) + if ( !m_pSong->m_Timing.DoesLabelExist(sLabel) ) { sLabel.Replace("=", "_"); sLabel.Replace(",", "_"); m_pSong->m_Timing.SetLabelAtBeat( GAMESTATE->m_fSongBeat, sLabel ); + SetDirty( true ); } - SetDirty( true ); } else if ( SM == SM_BackFromWarpChange ) { diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 2f808b503c..26991f3d67 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -238,7 +238,7 @@ void TimingData::SetLabelAtRow( int iRow, const RString sLabel ) } else { - if( i > 0 && m_LabelSegments[i-1].m_sLabel == sLabel ) + if( i > 0 && ( m_LabelSegments[i-1].m_sLabel == sLabel || sLabel == "" ) ) m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 ); else m_LabelSegments[i].m_sLabel = sLabel; @@ -545,6 +545,16 @@ float TimingData::GetNextLabelSegmentBeatAtRow( int iRow ) const return NoteRowToBeat(iRow); } +bool TimingData::DoesLabelExist( RString sLabel ) const +{ + FOREACH_CONST( LabelSegment, m_LabelSegments, seg ) + { + if( seg->m_sLabel == sLabel ) + return true; + } + return false; +} + void TimingData::GetBeatAndBPSFromElapsedTime( float fElapsedTime, float &fBeatOut, float &fBPSOut, bool &bFreezeOut, bool &bDelayOut, int &iWarpBeginOut, float &fWarpLengthOut ) const { fElapsedTime += PREFSMAN->m_fGlobalOffsetSeconds; diff --git a/src/TimingData.h b/src/TimingData.h index 1c0a7edcb2..5464a8748e 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -1215,6 +1215,12 @@ public: */ float GetPreviousLabelSegmentBeatAtBeat( float fBeat ) const { return GetPreviousLabelSegmentBeatAtRow( BeatToNoteRow(fBeat) ); } + /** + * @brief Determine if the requisite label already exists. + * @param sLabel the label to check. + * @return true if it exists, false otherwise. */ + bool DoesLabelExist( RString sLabel ) const; + /** * @brief Retrieve the next beat that contains a LabelSegment. * @param iRow the present row.