summaryrefslogtreecommitdiff
path: root/muse2/muse/functions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/functions.cpp')
-rw-r--r--muse2/muse/functions.cpp28
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);