From f367604af7d47ab5a336949e2cc1252bbab1780b Mon Sep 17 00:00:00 2001 From: Oskar Wallgren Date: Thu, 22 Dec 2016 18:52:55 +0100 Subject: [PATCH] No extra bar with beat note near end --- include/DataFile.h | 1 + src/core/DataFile.cpp | 30 ++++++++++++++++++++++++++++++ src/tracks/Pattern.cpp | 9 +++++---- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/include/DataFile.h b/include/DataFile.h index b65e7917b..85c6260ee 100644 --- a/include/DataFile.h +++ b/include/DataFile.h @@ -125,6 +125,7 @@ private: 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 b1656ba33..0a1add081 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 75009ebfd..3be681b08 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 );