summaryrefslogtreecommitdiff
path: root/muse2/muse/undo.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2013-08-16 23:04:08 +0200
committerFlorian Jung <flo@windfisch.org>2013-08-16 23:04:08 +0200
commit4933ccfe7552dc5dbb2921f6583bbeb92dd144b4 (patch)
treeaca8f234f17bbe94fc78c4d1cedd8e8649d2dd1f /muse2/muse/undo.cpp
parentbe3b3fef8d787f167b57ebfd700717a02c38570d (diff)
Parts have their own, non-shared EventList (still WIP!)
removed refcounting in Eventlist Part::events() is now a const EventList& chaining parts now a Part:: member function made Track::events, ::mpevents public instead of using an insane reference-accessor TODO: need a grouping indicator of clones (like the eventlist pointer was used for)
Diffstat (limited to 'muse2/muse/undo.cpp')
-rw-r--r--muse2/muse/undo.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/muse2/muse/undo.cpp b/muse2/muse/undo.cpp
index 5081f86c..747914e1 100644
--- a/muse2/muse/undo.cpp
+++ b/muse2/muse/undo.cpp
@@ -350,7 +350,7 @@ void Song::doUndo2()
removeTrack2(i->track);
updateFlags |= SC_TRACK_REMOVED;
break;
- case UndoOp::DeleteTrack:
+ case UndoOp::DeleteTrack: // FINDMICHJETZT FIXME TODO: DeletePart on all parts, only empty tracks may be deleted! this removes the necessarity of unchainTrackParts...
insertTrack2(i->track, i->trackno);
chainTrackParts(i->track, true);
@@ -371,15 +371,14 @@ void Song::doUndo2()
Part* part = i->part;
removePart(part);
updateFlags |= SC_PART_REMOVED;
- i->part->events()->incARef(-1);
- unchainClone(i->part);
+ Part* i->part->nextClone();
+ i->part->unchainClone();
}
break;
case UndoOp::DeletePart:
addPart(i->part);
updateFlags |= SC_PART_INSERTED;
- i->part->events()->incARef(1);
- chainClone(i->part);
+ i->part->rechainClone();
break;
case UndoOp::ModifyPartName:
i->part->setName(i->_oldName);
@@ -489,14 +488,12 @@ void Song::doRedo2()
case UndoOp::AddPart:
addPart(i->part);
updateFlags |= SC_PART_INSERTED;
- i->part->events()->incARef(1);
- chainClone(i->part);
+ i->part->rechainClone();
break;
case UndoOp::DeletePart:
removePart(i->part);
updateFlags |= SC_PART_REMOVED;
- i->part->events()->incARef(-1);
- unchainClone(i->part);
+ i->part->unchainClone();
break;
case UndoOp::ModifyPartName:
i->part->setName(i->_newName);
@@ -612,7 +609,7 @@ UndoOp::UndoOp(UndoType type_, Part* part_, unsigned old_len_or_tick, unsigned n
new_partlen_or_tick=new_len_or_tick;
}
-UndoOp::UndoOp(UndoType type_, Event& oev, Event& nev, Part* part_, bool doCtrls_, bool doClones_)
+UndoOp::UndoOp(UndoType type_, const Event& oev, const Event& nev, Part* part_, bool doCtrls_, bool doClones_)
{
assert(type_==ModifyEvent);
assert(part_);
@@ -625,7 +622,7 @@ UndoOp::UndoOp(UndoType type_, Event& oev, Event& nev, Part* part_, bool doCtrls
doClones = doClones_;
}
-UndoOp::UndoOp(UndoType type_, Event& nev, Part* part_, bool doCtrls_, bool doClones_)
+UndoOp::UndoOp(UndoType type_, const Event& nev, Part* part_, bool doCtrls_, bool doClones_)
{
assert(type_==DeleteEvent || type_==AddEvent);
assert(part_);