[sm130labels] Add the other definitions.

This commit is contained in:
Jason Felds
2011-04-04 23:03:10 -04:00
parent 315aaf774d
commit 53971e16e3
2 changed files with 85 additions and 2 deletions
+83
View File
@@ -224,6 +224,27 @@ void TimingData::SetComboAtRow( int iRow, int iCombo )
}
}
void TimingData::SetLabelAtRow( int iRow, const RString sLabel )
{
unsigned i;
for( i=0; i<m_LabelSegments.size(); i++ )
if( m_LabelSegments[i].m_iStartRow >= iRow )
break;
if( i == m_LabelSegments.size() || m_LabelSegments[i].m_iStartRow != iRow )
{
if( i == 0 || m_LabelSegments[i-1].m_sLabel != sLabel )
AddLabelSegment( LabelSegment(iRow, sLabel ) );
}
else
{
if( i > 0 && m_LabelSegments[i-1].m_sLabel == sLabel )
m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 );
else
m_LabelSegments[i].m_sLabel = sLabel;
}
}
float TimingData::GetStopAtRow( int iNoteRow, bool bDelay ) const
{
for( unsigned i=0; i<m_StopSegments.size(); i++ )
@@ -252,6 +273,11 @@ int TimingData::GetComboAtRow( int iNoteRow ) const
return m_ComboSegments[GetComboSegmentIndexAtRow( iNoteRow )].m_iCombo;
}
RString TimingData::GetLabelAtRow( int iRow ) const
{
return m_LabelSegments[GetLabelSegmentIndexAtRow( iRow )].m_sLabel;
}
float TimingData::GetWarpAtRow( int iWarpRow ) const
{
for( unsigned i=0; i<m_WarpSegments.size(); i++ )
@@ -389,6 +415,18 @@ int TimingData::GetComboSegmentIndexAtRow( int iRow ) const
return static_cast<int>(i);
}
int TimingData::GetLabelSegmentIndexAtRow( int iRow ) const
{
unsigned i;
for( i=0; i<m_LabelSegments.size()-1; i++ )
{
const LabelSegment& s = m_LabelSegments[i+1];
if( s.m_iStartRow > iRow )
break;
}
return static_cast<int>(i);
}
BPMSegment& TimingData::GetBPMSegmentAtRow( int iNoteRow )
{
static BPMSegment empty;
@@ -427,6 +465,15 @@ ComboSegment& TimingData::GetComboSegmentAtRow( int iRow )
return m_ComboSegments[i];
}
LabelSegment& TimingData::GetLabelSegmentAtRow( int iRow )
{
unsigned i;
for( i=0; i<m_LabelSegments.size()-1; i++ )
if( m_LabelSegments[i+1].m_iStartRow > iRow )
break;
return m_LabelSegments[i];
}
StopSegment& TimingData::GetStopSegmentAtRow( int iNoteRow, bool bDelay )
{
static StopSegment empty;
@@ -803,6 +850,13 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd )
continue;
comb.m_iStartRow += iRowsToAdd;
}
for( unsigned i = 0; i < m_LabelSegments.size(); i++ )
{
LabelSegment &labl = m_LabelSegments[i];
if( labl.m_iStartRow < iStartRow )
continue;
labl.m_iStartRow += iRowsToAdd;
}
if( iStartRow == 0 )
{
@@ -944,6 +998,22 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete )
// After deleted region:
comb.m_iStartRow -= iRowsToDelete;
}
for( unsigned i = 0; i < m_LabelSegments.size(); i++ )
{
LabelSegment &labl = m_LabelSegments[i];
if( labl.m_iStartRow < iStartRow )
continue;
if( labl.m_iStartRow < iStartRow+iRowsToDelete )
{
m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 );
--i;
continue;
}
labl.m_iStartRow -= iRowsToDelete;
}
this->SetBPMAtRow( iStartRow, fNewBPM );
}
@@ -1049,6 +1119,18 @@ public:
LuaHelpers::CreateTableFromArray(vBPMs, L);
return 1;
}
static int GetLabels( T* p, lua_State *L )
{
vector<RString> vLabels;
FOREACH_CONST( LabelSegment, p->m_LabelSegments, seg )
{
const float fStartRow = NoteRowToBeat(seg->m_iStartRow);
const RString sLabel = seg->m_sLabel;
vLabels.push_back( ssprintf("%f=%s", fStartRow, sLabel.c_str()) );
}
LuaHelpers::CreateTableFromArray(vLabels, L);
return 1;
}
static int GetBPMsAndTimes( T* p, lua_State *L )
{
vector<RString> vBPMs;
@@ -1087,6 +1169,7 @@ public:
ADD_METHOD( GetStops );
ADD_METHOD( GetDelays );
ADD_METHOD( GetBPMs );
ADD_METHOD( GetLabels );
ADD_METHOD( GetBPMsAndTimes );
ADD_METHOD( GetActualBPM );
ADD_METHOD( HasNegativeBPMs );