diff options
Diffstat (limited to 'muse2/muse/functions.cpp')
-rw-r--r-- | muse2/muse/functions.cpp | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 256e4ad0..7459f30b 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -55,7 +55,7 @@ #include <QDrag> #include <QMessageBox> #include <QClipboard> - +#include <QSet> using namespace std; @@ -1278,34 +1278,22 @@ void shrink_parts(int raster) MusEGlobal::song->applyOperationGroup(operations); } -void internal_schedule_expand_part(Part* part, int raster, Undo& operations) -{ - EventList* events=part->events(); - unsigned len=part->lenTick(); - - for (iEvent ev=events->begin(); ev!=events->end(); ev++) - if (ev->second.endTick() > len) - len=ev->second.endTick(); - - if (raster) len=ceil((float)len/raster)*raster; - - if (len > part->lenTick()) - { - MidiPart* new_part = new MidiPart(*(MidiPart*)part); - new_part->setLenTick(len); - operations.push_back(UndoOp(UndoOp::ModifyPart, part, new_part, true, false)); - } -} void schedule_resize_all_same_len_clone_parts(Part* part, unsigned new_len, Undo& operations) { + QSet<const Part*> already_done; + + for (Undo::iterator op_it=operations.begin(); op_it!=operations.end();op_it++) + if (op_it->type==UndoOp::ModifyPart || op_it->type==UndoOp::DeletePart) + already_done.insert(op_it->nPart); + unsigned old_len=part->lenTick(); if (old_len!=new_len) { Part* part_it=part; do { - if (part_it->lenTick()==old_len) + if (part_it->lenTick()==old_len && !already_done.contains(part_it)) { MidiPart* new_part = new MidiPart(*(MidiPart*)part_it); new_part->setLenTick(new_len); |