diff options
author | Florian Jung <flo@windfisch.org> | 2013-09-18 23:54:35 +0200 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2013-09-18 23:54:35 +0200 |
commit | b3fc353a09496ee0aea7099d72e6963f4c2fc774 (patch) | |
tree | 83ab91e988c59076d81ebddc09e8ff274dee8af5 /muse2/muse/waveedit | |
parent | 48a93993cfce160fb7d4cf0b67b4b77e22db19e5 (diff) | |
parent | 85a51421d44f3893a1010f77e0418caf6be70235 (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/waveedit')
-rw-r--r-- | muse2/muse/waveedit/wavecanvas.cpp | 45 | ||||
-rw-r--r-- | muse2/muse/waveedit/wavecanvas.h | 4 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveview.cpp | 5 |
3 files changed, 25 insertions, 29 deletions
diff --git a/muse2/muse/waveedit/wavecanvas.cpp b/muse2/muse/waveedit/wavecanvas.cpp index 95ecd250..db886bce 100644 --- a/muse2/muse/waveedit/wavecanvas.cpp +++ b/muse2/muse/waveedit/wavecanvas.cpp @@ -79,7 +79,7 @@ namespace MusEGui { // WEvent //--------------------------------------------------------- -WEvent::WEvent(MusECore::Event& e, MusECore::Part* p, int height) : MusEGui::CItem(e, p) +WEvent::WEvent(const MusECore::Event& e, MusECore::Part* p, int height) : MusEGui::CItem(e, p) { unsigned frame = e.frame() + p->frame(); setPos(QPoint(frame, 0)); @@ -93,7 +93,7 @@ WEvent::WEvent(MusECore::Event& e, MusECore::Part* p, int height) : MusEGui::CIt // addItem //--------------------------------------------------------- -CItem* WaveCanvas::addItem(MusECore::Part* part, MusECore::Event& event) +CItem* WaveCanvas::addItem(MusECore::Part* part, const MusECore::Event& event) { if (signed(event.frame())<0) { printf("ERROR: trying to add event before current part!\n"); @@ -183,9 +183,8 @@ void WaveCanvas::songChanged(MusECore::SongChangedFlags_t flags) if (esample > endSample) endSample = esample; - MusECore::EventList* el = part->events(); - for (MusECore::iEvent i = el->begin(); i != el->end(); ++i) { - MusECore::Event e = i->second; + for (MusECore::ciEvent i = part->events().begin(); i != part->events().end(); ++i) { + const MusECore::Event& e = i->second; // Do not add events which are past the end of the part. if(e.frame() > len) break; @@ -578,9 +577,9 @@ void WaveCanvas::draw(QPainter& p, const QRect& r) if(ci->isSelected()) list4.push_back(ci); // Draw clone parts, and parts with hidden events, in front of others all except selected. - //else if(ci->event().empty() && (ci->part()->events()->arefCount() > 1 || ci->part()->cachedHasHiddenEvents())) + //else if(ci->event().empty() && (ci->part()->hasClones() || ci->part()->cachedHasHiddenEvents())) // Draw clone parts in front of others all except selected. - //else if(ci->event().empty() && (ci->part()->events()->arefCount() > 1)) + //else if(ci->event().empty() && ci->part()->hasClones()) // list3.push_back(ci); else // Draw unselected parts. @@ -1327,9 +1326,9 @@ MusECore::Undo WaveCanvas::moveCanvasItems(MusEGui::CItemList& items, int /*dp*/ MusECore::Part* opart = ip2c->first; if (opart->hasHiddenEvents()) { - forbidden=true; - break; - } + forbidden=true; + break; + } } @@ -1478,7 +1477,6 @@ void WaveCanvas::newItem(MusEGui::CItem* item, bool noSnap) if (diff > 0)// part must be extended? { - //schedule_resize_all_same_len_clone_parts(part, event.endTick(), operations); schedule_resize_all_same_len_clone_parts(part, event.endFrame(), operations); printf("newItem: extending\n"); } @@ -1686,11 +1684,11 @@ void WaveCanvas::waveCmd(int cmd) if (part == 0) break; - MusECore::EventList* el = part->events(); + const MusECore::EventList& el = part->events(); MusECore::Undo operations; std::list <MusECore::Event> elist; - for (MusECore::iEvent e = el->lower_bound(pos[0] - part->tick()); e != el->end(); ++e) + for (MusECore::ciEvent e = el.lower_bound(pos[0] - part->tick()); e != el.end(); ++e) elist.push_back((MusECore::Event)e->second); for (std::list<MusECore::Event>::iterator i = elist.begin(); i != elist.end(); ++i) { MusECore::Event event = *i; @@ -1714,10 +1712,10 @@ void WaveCanvas::waveCmd(int cmd) break; MusECore::Undo operations; - MusECore::EventList* el = part->events(); + const MusECore::EventList& el = part->events(); std::list<MusECore::Event> elist; - for (MusECore::iEvent e = el->lower_bound(pos[0]); e != el->end(); ++e) + for (MusECore::ciEvent e = el.lower_bound(pos[0]); e != el.end(); ++e) elist.push_back((MusECore::Event)e->second); for (std::list<MusECore::Event>::iterator i = elist.begin(); i != elist.end(); ++i) { MusECore::Event event = *i; @@ -1927,17 +1925,17 @@ void WaveCanvas::cmd(int cmd) tempPart->setPos(MusEGlobal::song->lpos()); tempPart->setLenTick(MusEGlobal::song->rpos() - MusEGlobal::song->lpos()); // loop through the events and set them accordingly - for (MusECore::iEvent iWaveEvent = origPart->events()->begin(); iWaveEvent != origPart->events()->end(); iWaveEvent++) + for (MusECore::ciEvent iWaveEvent = origPart->events().begin(); iWaveEvent != origPart->events().end(); iWaveEvent++) { // TODO: handle multiple events correctly, // the math for subsequent events isn't correct - MusECore::Event &ev = iWaveEvent->second; + const MusECore::Event& ev = iWaveEvent->second; MusECore::Event *newEvent = new MusECore::Event(ev.clone()); newEvent->setSpos(ev.spos() + frameDistance); newEvent->setLenTick(MusEGlobal::song->rpos() - MusEGlobal::song->lpos()); tempPart->addEvent(*newEvent); } - std::set<MusECore::Part*> partList; + std::set<const MusECore::Part*> partList; partList.insert(tempPart); QMimeData *mimeData = MusECore::parts_to_mime(partList); @@ -1993,10 +1991,9 @@ MusECore::WaveSelectionList WaveCanvas::getSelection(unsigned startpos, unsigned MusECore::WavePart* wp = (MusECore::WavePart*)(ip->second); unsigned part_offset = wp->frame(); - MusECore::EventList* el = wp->events(); - //printf("eventlist length=%d\n",el->size()); + const MusECore::EventList& el = wp->events(); - for (MusECore::iEvent e = el->begin(); e != el->end(); ++e) { + for (MusECore::ciEvent e = el.begin(); e != el.end(); ++e) { MusECore::Event event = e->second; if (event.empty()) continue; @@ -2587,7 +2584,7 @@ void WaveCanvas::curPartChanged() void WaveCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool delta_mode) { // TODO: New WaveCanvas: Convert this routine to frames and remove unneeded operations. - QList< QPair<MusECore::EventList*,MusECore::Event> > already_done; + QList< QPair<int,MusECore::Event> > already_done; MusEGlobal::audio->msgIdle(true); MusEGlobal::song->startUndo(); for (MusEGui::iCItem i = items.begin(); i != items.end(); ++i) { @@ -2600,7 +2597,7 @@ void WaveCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool d MusECore::WavePart* part = (MusECore::WavePart*)(e->part()); - if (already_done.contains(QPair<MusECore::EventList*,MusECore::Event>(part->events(), event))) + if (already_done.contains(QPair<int,MusECore::Event>(part->clonemaster_sn(), event))) continue; MusECore::Event newEvent = event.clone(); @@ -2670,7 +2667,7 @@ void WaveCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool d // Indicate do not do port controller values and clone parts. MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, false, false)); - already_done.append(QPair<MusECore::EventList*,MusECore::Event>(part->events(), event)); + already_done.append(QPair<int,MusECore::Event>(part->clonemaster_sn(), event)); } MusEGlobal::song->endUndo(SC_EVENT_MODIFIED); MusEGlobal::audio->msgIdle(false); diff --git a/muse2/muse/waveedit/wavecanvas.h b/muse2/muse/waveedit/wavecanvas.h index 10f75291..63979915 100644 --- a/muse2/muse/waveedit/wavecanvas.h +++ b/muse2/muse/waveedit/wavecanvas.h @@ -64,7 +64,7 @@ namespace MusEGui { class WEvent : public CItem { public: - WEvent(MusECore::Event& e, MusECore::Part* p, int height); + WEvent(const MusECore::Event& e, MusECore::Part* p, int height); }; //--------------------------------------------------------- @@ -124,7 +124,7 @@ class WaveCanvas : public EventCanvas { virtual void dragEnterEvent(QDragEnterEvent* event); virtual void dragMoveEvent(QDragMoveEvent*); virtual void dragLeaveEvent(QDragLeaveEvent*); - virtual CItem* addItem(MusECore::Part*, MusECore::Event&); + virtual CItem* addItem(MusECore::Part*, const MusECore::Event&); int y2pitch(int) const; int pitch2y(int) const; diff --git a/muse2/muse/waveedit/waveview.cpp b/muse2/muse/waveedit/waveview.cpp index 3e3ea057..2cb63dc5 100644 --- a/muse2/muse/waveedit/waveview.cpp +++ b/muse2/muse/waveedit/waveview.cpp @@ -119,9 +119,8 @@ void WaveView::pdraw(QPainter& p, const QRect& rr) int channels = wp->track()->channels(); int px = wp->frame(); - MusECore::EventList* el = wp->events(); - for (MusECore::iEvent e = el->begin(); e != el->end(); ++e) { - MusECore::Event event = e->second; + for (MusECore::ciEvent e = wp->events().begin(); e != wp->events().end(); ++e) { + const MusECore::Event event& = e->second; if (event.empty()) continue; MusECore::SndFileR f = event.sndFile(); |