From 7da4efda0fc1a18ea52a8e7504ba8c5ed55cf76e Mon Sep 17 00:00:00 2001 From: Lee Avital Date: Sun, 4 Jan 2015 17:58:18 -0500 Subject: [PATCH] Implement 1429 -- move to next and previous pattern --- include/Pattern.h | 6 ++++++ src/gui/editors/PianoRoll.cpp | 15 +++++++++++++++ src/tracks/Pattern.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/include/Pattern.h b/include/Pattern.h index 840926f51..511dd6cd3 100644 --- a/include/Pattern.h +++ b/include/Pattern.h @@ -94,6 +94,10 @@ public: void checkType(); + // next/previous track based on position in the containing track + Pattern * previousPattern() const; + Pattern * nextPattern() const; + // settings-management virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); @@ -137,6 +141,8 @@ private: NoteVector m_notes; int m_steps; + Pattern * adjacentPatternByOffset(int offset) const; + friend class PatternView; friend class BBTrackContainerView; diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 8c5acca5e..b1b682bca 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -967,6 +967,14 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke ) int amt = quantized ? quantization() : 1; shiftPos( -amt ); } + else if( ke->modifiers() & Qt::AltModifier) + { + Pattern * p = m_pattern->previousPattern(); + if(p != NULL) + { + setCurrentPattern(p); + } + } else { // scroll @@ -1001,6 +1009,13 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke ) int amt = quantized ? quantization() : 1; shiftPos( +amt ); } + else if( ke->modifiers() & Qt::AltModifier) { + Pattern * p = m_pattern->nextPattern(); + if(p != NULL) + { + setCurrentPattern(p); + } + } else { // scroll diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index b5d2da75b..c36418eef 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -434,6 +434,32 @@ void Pattern::loadSettings( const QDomElement & _this ) +Pattern * Pattern::previousPattern() const +{ + return adjacentPatternByOffset(-1); +} + + + + +Pattern * Pattern::nextPattern() const +{ + return adjacentPatternByOffset(1); +} + + + + +Pattern * Pattern::adjacentPatternByOffset(int offset) const +{ + QVector tcos = m_instrumentTrack->getTCOs(); + int tcoNum = m_instrumentTrack->getTCONum(this); + return dynamic_cast(tcos.value(tcoNum + offset, NULL)); +} + + + + void Pattern::clear() { addJournalCheckPoint();