diff --git a/src/TimingData.cpp b/src/TimingData.cpp index bf1d9e2819..40401d9911 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -109,6 +109,38 @@ void TimingData::SetDelayAtRow( int iRow, float fSeconds ) SetStopAtRow(iRow,fSeconds,true); } +void TimingData::SetTimeSignatureAtRow( int iRow, int iNumerator, int iDenominator ) +{ + unsigned i; + for( i = 0; i < m_vTimeSignatureSegments.size(); i++ ) + { + if( m_vTimeSignatureSegments[i].m_iStartRow >= iRow) + break; // We found our segment. + } + TimeSignatureSegment &ts = m_vTimeSignatureSegments[i]; + TimeSignatureSegment &prev = m_vTimeSignatureSegments[i-1]; + if( i == m_vTimeSignatureSegments.size() || ts.m_iStartRow != iRow ) + { + // There is no TimeSignatureSegment at the specified beat. + // If the TimeSignatureSegment being set differs + // from the last TimeSignature, create a new TimeSignatureSegment. + if( i == 0 || ( prev.m_iNumerator != iNumerator || prev.m_iDenominator != iDenominator ) ) + AddTimeSignatureSegment( TimeSignatureSegment(iRow, iNumerator, iDenominator) ); + } + else // TimeSignatureSegment being modified is m_vTimeSignatureSegments[i] + { + if( i > 0 && prev.m_iNumerator == iNumerator + && prev.m_iDenominator == iDenominator ) + m_vTimeSignatureSegments.erase( m_vTimeSignatureSegments.begin()+i, + m_vTimeSignatureSegments.begin()+i+1 ); + else + { + ts.m_iNumerator = iNumerator; + ts.m_iDenominator = iDenominator; + } + } +} + /* void TimingData::SetWarpAtRow( int iRowAt, float fLengthBeats ) {