diff options
Diffstat (limited to 'muse2/muse/midiedit/dcanvas.cpp')
-rw-r--r-- | muse2/muse/midiedit/dcanvas.cpp | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp index ebe3a6c8..ba18d8a3 100644 --- a/muse2/muse/midiedit/dcanvas.cpp +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -80,7 +80,7 @@ DEvent::DEvent(MusECore::Event e, MusECore::Part* p, int instr) // addItem //--------------------------------------------------------- -CItem* DrumCanvas::addItem(MusECore::Part* part, MusECore::Event& event) +CItem* DrumCanvas::addItem(MusECore::Part* part, const MusECore::Event& event) { if (signed(event.tick())<0) { printf("ERROR: trying to add event before current part!\n"); @@ -516,11 +516,10 @@ void DrumCanvas::newItem(CItem* item, bool noSnap, bool replace) event.setPitch(npitch); // check for existing event // if found change command semantic from insert to delete - MusECore::EventList* el = part->events(); - MusECore::iEvent lower = el->lower_bound(event.tick()); - MusECore::iEvent upper = el->upper_bound(event.tick()); + MusECore::ciEvent lower = part->events().lower_bound(event.tick()); + MusECore::ciEvent upper = part->events().upper_bound(event.tick()); - for (MusECore::iEvent i = lower; i != upper; ++i) { + for (MusECore::ciEvent i = lower; i != upper; ++i) { MusECore::Event ev = i->second; if(!ev.isNote()) continue; @@ -1027,10 +1026,10 @@ void DrumCanvas::mapChanged(int spitch, int dpitch) if (old_style_drummap_mode) { MusECore::Undo operations; - std::vector< std::pair<MusECore::Part*, MusECore::Event*> > delete_events; + std::vector< std::pair<MusECore::Part*, MusECore::Event> > delete_events; std::vector< std::pair<MusECore::Part*, MusECore::Event> > add_events; - typedef std::vector< std::pair<MusECore::Part*, MusECore::Event*> >::iterator idel_ev; + typedef std::vector< std::pair<MusECore::Part*, MusECore::Event> >::iterator idel_ev; typedef std::vector< std::pair<MusECore::Part*, MusECore::Event> >::iterator iadd_ev; MusECore::MidiTrackList* tracks = MusEGlobal::song->midis(); @@ -1042,9 +1041,9 @@ void DrumCanvas::mapChanged(int spitch, int dpitch) MusECore::MidiPort* mp = &MusEGlobal::midiPorts[curTrack->outPort()]; MusECore::PartList* parts= curTrack->parts(); for (MusECore::iPart part = parts->begin(); part != parts->end(); ++part) { - MusECore::EventList* events = part->second->events(); + const MusECore::EventList& events = part->second->events(); MusECore::Part* thePart = part->second; - for (MusECore::iEvent i = events->begin(); i != events->end(); ++i) { + for (MusECore::ciEvent i = events.begin(); i != events.end(); ++i) { MusECore::Event event = i->second; if(event.type() != MusECore::Controller && event.type() != MusECore::Note) continue; @@ -1058,9 +1057,9 @@ void DrumCanvas::mapChanged(int spitch, int dpitch) } if (pitch == spitch) { - MusECore::Event* spitch_event = &(i->second); - delete_events.push_back(std::pair<MusECore::Part*, MusECore::Event*>(thePart, spitch_event)); - MusECore::Event newEvent = spitch_event->clone(); + const MusECore::Event& spitch_event = i->second; + delete_events.push_back(std::pair<MusECore::Part*, MusECore::Event>(thePart, spitch_event)); + MusECore::Event newEvent = spitch_event.clone(); if(drc) newEvent.setA((newEvent.dataA() & ~0xff) | dpitch); else @@ -1068,9 +1067,9 @@ void DrumCanvas::mapChanged(int spitch, int dpitch) add_events.push_back(std::pair<MusECore::Part*, MusECore::Event>(thePart, newEvent)); } else if (pitch == dpitch) { - MusECore::Event* dpitch_event = &(i->second); - delete_events.push_back(std::pair<MusECore::Part*, MusECore::Event*>(thePart, dpitch_event)); - MusECore::Event newEvent = dpitch_event->clone(); + const MusECore::Event& dpitch_event = i->second; + delete_events.push_back(std::pair<MusECore::Part*, MusECore::Event>(thePart, dpitch_event)); + MusECore::Event newEvent = dpitch_event.clone(); if(drc) newEvent.setA((newEvent.dataA() & ~0xff) | spitch); else @@ -1083,8 +1082,8 @@ void DrumCanvas::mapChanged(int spitch, int dpitch) for (idel_ev i = delete_events.begin(); i != delete_events.end(); i++) { MusECore::Part* thePart = (*i).first; - MusECore::Event* theEvent = (*i).second; - operations.push_back(MusECore::UndoOp(MusECore::UndoOp::DeleteEvent, *theEvent, thePart, true, false)); + const MusECore::Event& theEvent = (*i).second; + operations.push_back(MusECore::UndoOp(MusECore::UndoOp::DeleteEvent, theEvent, thePart, true, false)); } MusECore::DrumMap dm = MusEGlobal::drumMap[spitch]; @@ -1212,9 +1211,8 @@ void DrumCanvas::resizeEvent(QResizeEvent* ev) void DrumCanvas::modifySelected(NoteInfo::ValType type, int val, bool delta_mode) { - QList< QPair<MusECore::EventList*,MusECore::Event> > already_done; - MusEGlobal::audio->msgIdle(true); - MusEGlobal::song->startUndo(); + QList< QPair<int,MusECore::Event> > already_done; + MusECore::Undo operations; for (iCItem i = items.begin(); i != items.end(); ++i) { if (!(i->second->isSelected())) continue; @@ -1225,7 +1223,7 @@ void DrumCanvas::modifySelected(NoteInfo::ValType type, int val, bool delta_mode MusECore::MidiPart* part = (MusECore::MidiPart*)(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(); @@ -1303,14 +1301,12 @@ void DrumCanvas::modifySelected(NoteInfo::ValType type, int val, bool delta_mode } break; } - MusEGlobal::song->changeEvent(event, newEvent, part); - // 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)); + operations.push_back(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, false, false)); + + already_done.append(QPair<int,MusECore::Event>(part->clonemaster_sn(), event)); } - MusEGlobal::song->endUndo(SC_EVENT_MODIFIED); - MusEGlobal::audio->msgIdle(false); + MusEGlobal::song->applyOperationGroup(operations); } //--------------------------------------------------------- @@ -1481,18 +1477,17 @@ void DrumCanvas::setStep(int v) //--------------------------------------------------------- // getEventAtCursorPos //--------------------------------------------------------- -MusECore::Event *DrumCanvas::getEventAtCursorPos() +const MusECore::Event* DrumCanvas::getEventAtCursorPos() { if (_tool != CursorTool) return 0; if (instrument_map[cursorPos.y()].tracks.contains(curPart->track())) { - MusECore::EventList* el = curPart->events(); - MusECore::iEvent lower = el->lower_bound(cursorPos.x()-curPart->tick()); - MusECore::iEvent upper = el->upper_bound(cursorPos.x()-curPart->tick()); + MusECore::ciEvent lower = curPart->events().lower_bound(cursorPos.x()-curPart->tick()); + MusECore::ciEvent upper = curPart->events().upper_bound(cursorPos.x()-curPart->tick()); int curPitch = instrument_map[cursorPos.y()].pitch; - for (MusECore::iEvent i = lower; i != upper; ++i) { - MusECore::Event &ev = i->second; + for (MusECore::ciEvent i = lower; i != upper; ++i) { + const MusECore::Event& ev = i->second; if (ev.isNote() && ev.pitch() == curPitch) return &ev; } @@ -1503,7 +1498,7 @@ MusECore::Event *DrumCanvas::getEventAtCursorPos() //--------------------------------------------------------- // selectCursorEvent //--------------------------------------------------------- -void DrumCanvas::selectCursorEvent(MusECore::Event *ev) +void DrumCanvas::selectCursorEvent(const MusECore::Event* ev) { for (iCItem i = items.begin(); i != items.end(); ++i) { |