From 89a7c390e617e965bdeef0cf5b637dd34560fc4f Mon Sep 17 00:00:00 2001 From: allejok96 Date: Wed, 25 May 2022 16:38:49 +0200 Subject: [PATCH] Avoid update if nothing has changed --- include/Note.h | 2 +- src/core/Note.cpp | 6 ++++-- src/gui/clips/MidiClipView.cpp | 9 ++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/Note.h b/include/Note.h index b528b89f7..c2644e197 100644 --- a/include/Note.h +++ b/include/Note.h @@ -250,7 +250,7 @@ class NoteVector: public QVector { public: bool getBounds(TimePos& start, TimePos& end, int& lower, int& upper) const; - void transpose(int semitones) const; + bool transpose(int semitones) const; }; diff --git a/src/core/Note.cpp b/src/core/Note.cpp index b9ce91cf4..cb55c1a8b 100644 --- a/src/core/Note.cpp +++ b/src/core/Note.cpp @@ -278,13 +278,15 @@ bool NoteVector::getBounds(TimePos& start, TimePos& end, int& lower, int& upper) * Notes will be hard-clipped to the MIDI note range. To prevent this use getBounds() prior to transposing. * * \param semitones Semitones to transpose + * \return bool True if notes were transposed */ -void NoteVector::transpose(int semitones) const +bool NoteVector::transpose(int semitones) const { - if (empty() || !semitones) { return; } + if (empty() || !semitones) { return false; } for (Note* note: *this) { note->setKey(note->key() + semitones); } + return true; } diff --git a/src/gui/clips/MidiClipView.cpp b/src/gui/clips/MidiClipView.cpp index 9909525fe..eb26e5295 100644 --- a/src/gui/clips/MidiClipView.cpp +++ b/src/gui/clips/MidiClipView.cpp @@ -172,7 +172,7 @@ void MidiClipView::transposeSelection() // Engine::getSong()->addJournalCheckPoint(); QSet m_changedTracks; - for (ClipView* clipview: getClickedClips()) + for (ClipView* clipview: selection) { if (auto mcv = dynamic_cast(clipview)) { @@ -183,10 +183,13 @@ void MidiClipView::transposeSelection() m_changedTracks.insert(track); } auto clip = mcv->getMidiClip(); - clip->notes().transpose(semitones); - emit clip->dataChanged(); + if (clip->notes().transpose(semitones)) + { + emit clip->dataChanged(); + } } } + // At least one clip must have notes to show the transpose dialog, so something *has* changed Engine::getSong()->setModified(); }