diff --git a/include/DataFile.h b/include/DataFile.h index b65e7917b0d..85c6260ee9c 100644 --- a/include/DataFile.h +++ b/include/DataFile.h @@ -125,6 +125,7 @@ class EXPORT DataFile : public QDomDocument void upgrade_1_0_99(); void upgrade_1_1_0(); void upgrade_1_1_91(); + void upgrade_1_2_0_rc3(); void upgrade(); diff --git a/src/core/DataFile.cpp b/src/core/DataFile.cpp index b1656ba33ce..0a1add0818a 100644 --- a/src/core/DataFile.cpp +++ b/src/core/DataFile.cpp @@ -901,6 +901,32 @@ void DataFile::upgrade_1_1_91() } +void DataFile::upgrade_1_2_0_rc3() +{ + // Upgrade from earlier bbtrack beat note behaviour of adding + // steps if a note is placed after the last step. + QDomNodeList list = elementsByTagName( "bbtrack" ); + for( int i = 0; !list.item( i ).isNull(); ++i ) + { + list = elementsByTagName( "pattern" ); + for( int i = 0; !list.item( i ).isNull(); ++i ) + { + int patternLength, steps; + QDomElement el = list.item( i ).toElement(); + for( int i = 0; !list.item( i ).isNull(); ++i ) + { + if( el.attribute( "len" ) != "" ) + { + patternLength = el.attribute( "len" ).toInt(); + steps = patternLength / 12; + el.setAttribute( "steps", steps ); + } + } + } + } +} + + void DataFile::upgrade() { ProjectVersion version = @@ -977,6 +1003,10 @@ void DataFile::upgrade() { upgrade_1_1_91(); } + if( version < "1.2.0-rc3" ) + { + upgrade_1_2_0_rc3(); + } // update document meta data documentElement().setAttribute( "version", LDF_VERSION_STRING ); diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index 75009ebfd5f..3be681b0880 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -196,21 +196,22 @@ MidiTime Pattern::beatPatternLength() const if( ( *it )->length() < 0 ) { max_length = qMax( max_length, - ( *it )->pos() + - MidiTime::ticksPerTact() / - MidiTime::stepsPerTact() ); + ( *it )->pos() + 1 ); } } if( m_steps != MidiTime::stepsPerTact() ) { max_length = m_steps * MidiTime::ticksPerTact() / - MidiTime::stepsPerTact() ; + MidiTime::stepsPerTact(); } return MidiTime( max_length ).nextFullTact() * MidiTime::ticksPerTact(); } + + + Note * Pattern::addNote( const Note & _new_note, const bool _quant_pos ) { Note * new_note = new Note( _new_note );