summaryrefslogtreecommitdiff
path: root/muse2/muse/eventlist.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2013-09-18 23:54:35 +0200
committerFlorian Jung <flo@windfisch.org>2013-09-18 23:54:35 +0200
commitb3fc353a09496ee0aea7099d72e6963f4c2fc774 (patch)
tree83ab91e988c59076d81ebddc09e8ff274dee8af5 /muse2/muse/eventlist.cpp
parent48a93993cfce160fb7d4cf0b67b4b77e22db19e5 (diff)
parent85a51421d44f3893a1010f77e0418caf6be70235 (diff)
Merge branch 'audiomsg_overhaul' (nonshared eventlists and more)
This introduces the following changes: - Clone Parts no more share their eventlist. Instead, all changes made to one clone are replicated to the other clones' eventlists - audio/song->msg{Add,Delete,Change}{Part,Event,Track} have been replaced by the corresponding UndoOp operations. - Enforcing of const-correctness: No GUI code may ever gain writable access to audio/midi/song data structures. Access must *always* go through applyOperationGroup. This is now enforced. - Removed a bunch of DELETETHIS or REMOVE or otherwise commented out code - Removed dead code - Removed unused Audio Messages (that should go through applyOpGroup anyway.)
Diffstat (limited to 'muse2/muse/eventlist.cpp')
-rw-r--r--muse2/muse/eventlist.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/muse2/muse/eventlist.cpp b/muse2/muse/eventlist.cpp
index 50ba2652..80180ab7 100644
--- a/muse2/muse/eventlist.cpp
+++ b/muse2/muse/eventlist.cpp
@@ -62,7 +62,7 @@ void EventList::read(Xml& xml, const char* name, bool midi)
// add
//---------------------------------------------------------
-iEvent EventList::add(Event& event)
+iEvent EventList::add(Event event)
{
// Changed by Tim. An event list containing wave events should be sorted by
// frames. WaveTrack::fetchData() relies on the sorting order, and
@@ -129,17 +129,51 @@ void EventList::move(Event& event, unsigned tick)
//---------------------------------------------------------
iEvent EventList::find(const Event& event)
+{
+ std::pair<iEvent,iEvent> range = equal_range(event.type() == Wave ? event.frame() : event.tick());
+
+ for (iEvent i = range.first; i != range.second; ++i) {
+ if (i->second == event)
+ return i;
+ }
+ return end();
+}
+
+ciEvent EventList::find(const Event& event) const
{
EventRange range = equal_range(event.type() == Wave ? event.frame() : event.tick());
- for (iEvent i = range.first; i != range.second; ++i) {
+ for (ciEvent i = range.first; i != range.second; ++i) {
if (i->second == event)
return i;
}
return end();
}
+iEvent EventList::findSimilar(const Event& event)
+{
+ std::pair<iEvent,iEvent> range = equal_range(event.type() == Wave ? event.frame() : event.tick());
+
+ for (iEvent i = range.first; i != range.second; ++i) {
+ if (i->second.isSimilarTo(event))
+ return i;
+ }
+ return end();
+}
+
+ciEvent EventList::findSimilar(const Event& event) const
+ {
+ EventRange range = equal_range(event.type() == Wave ? event.frame() : event.tick());
+
+
+ for (ciEvent i = range.first; i != range.second; ++i) {
+ if (i->second.isSimilarTo(event))
+ return i;
+ }
+ return end();
+ }
+
//---------------------------------------------------------
// dump
//---------------------------------------------------------