diff options
Diffstat (limited to 'muse2/muse/midiedit')
-rw-r--r-- | muse2/muse/midiedit/dcanvas.cpp | 63 | ||||
-rw-r--r-- | muse2/muse/midiedit/dcanvas.h | 6 | ||||
-rw-r--r-- | muse2/muse/midiedit/dlist.cpp | 9 | ||||
-rw-r--r-- | muse2/muse/midiedit/drumedit.cpp | 8 | ||||
-rw-r--r-- | muse2/muse/midiedit/ecanvas.cpp | 3 | ||||
-rw-r--r-- | muse2/muse/midiedit/ecanvas.h | 2 | ||||
-rw-r--r-- | muse2/muse/midiedit/piano.cpp | 3 | ||||
-rw-r--r-- | muse2/muse/midiedit/prcanvas.cpp | 17 | ||||
-rw-r--r-- | muse2/muse/midiedit/prcanvas.h | 4 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.cpp | 78 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.h | 38 |
11 files changed, 110 insertions, 121 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) { diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h index 1a1ee546..300f2291 100644 --- a/muse2/muse/midiedit/dcanvas.h +++ b/muse2/muse/midiedit/dcanvas.h @@ -130,7 +130,7 @@ class DrumCanvas : public EventCanvas { void dragEnterEvent(QDragEnterEvent* event); void dragMoveEvent(QDragMoveEvent*); void dragLeaveEvent(QDragLeaveEvent*); - virtual CItem* addItem(MusECore::Part*, MusECore::Event&); + virtual CItem* addItem(MusECore::Part*, const MusECore::Event&); virtual void resizeEvent(QResizeEvent*); virtual void curPartChanged(); int getNextStep(unsigned int pos, int basicStep, int stepSize=1); @@ -167,8 +167,8 @@ class DrumCanvas : public EventCanvas { virtual void modifySelected(NoteInfo::ValType type, int val, bool delta_mode = true); virtual void keyPress(QKeyEvent* event); virtual void keyRelease(QKeyEvent* event); - MusECore::Event *getEventAtCursorPos(); - void selectCursorEvent(MusECore::Event *ev); + const MusECore::Event* getEventAtCursorPos(); + void selectCursorEvent(const MusECore::Event* ev); int pitch_and_track_to_instrument(int pitch, MusECore::Track* track); diff --git a/muse2/muse/midiedit/dlist.cpp b/muse2/muse/midiedit/dlist.cpp index 09b33735..ecfc02ba 100644 --- a/muse2/muse/midiedit/dlist.cpp +++ b/muse2/muse/midiedit/dlist.cpp @@ -208,8 +208,7 @@ void DList::draw(QPainter& p, const QRect& rect) continue; found = true; - MusECore::EventList* el = cur_part->events(); - for(MusECore::iEvent ie = el->begin(); ie != el->end(); ++ie) + for(MusECore::ciEvent ie = cur_part->events().begin(); ie != cur_part->events().end(); ++ie) { MusECore::Event e = ie->second; if(e.type() != MusECore::Controller) @@ -303,14 +302,14 @@ void DList::draw(QPainter& p, const QRect& rect) continue; found = true; - MusECore::EventList* el = cur_part->events(); + const MusECore::EventList& el = cur_part->events(); //MusECore::PartList* part_list = dcanvas->drumEdit()->parts(); //for(MusECore::ciPart ip = part_list->cbegin(); ip != part_list->cend(); ++ip) { //MusECore::Part* part = ip->second; ///if(part->track() != - //MusECore::EventList* el = part->events(); - for(MusECore::iEvent ie = el->begin(); ie != el->end(); ++ie) + //const MusECore::EventList& el = part->events(); + for(MusECore::ciEvent ie = el.begin(); ie != el.end(); ++ie) { MusECore::Event e = ie->second; if(e.type() != MusECore::Controller) diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index a93ad01e..175287cb 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -1850,8 +1850,8 @@ void DrumEdit::hideUnusedInstruments() for (MusECore::ciPart p = parts()->begin(); p != parts()->end(); ++p) if (p->second->track() == track) { - const EventList* el = p->second->cevents(); - for (ciEvent ev=el->begin(); ev!=el->end(); ev++) + const EventList& el = p->second->events(); + for (ciEvent ev=el.begin(); ev!=el.end(); ev++) hide[ev->second.pitch()]=false; } @@ -1883,8 +1883,8 @@ void DrumEdit::hideEmptyInstruments() for (MusECore::ciPart p = parts()->begin(); p != parts()->end(); ++p) if (p->second->track() == track) { - const EventList* el = p->second->cevents(); - for (ciEvent ev=el->begin(); ev!=el->end(); ev++) + const EventList& el = p->second->events(); + for (ciEvent ev=el.begin(); ev!=el.end(); ev++) hide[ev->second.pitch()]=false; } diff --git a/muse2/muse/midiedit/ecanvas.cpp b/muse2/muse/midiedit/ecanvas.cpp index 4ae702f1..d70cc50c 100644 --- a/muse2/muse/midiedit/ecanvas.cpp +++ b/muse2/muse/midiedit/ecanvas.cpp @@ -192,8 +192,7 @@ void EventCanvas::songChanged(MusECore::SongChangedFlags_t flags) if (etick > end_tick) end_tick = etick; - MusECore::EventList* el = part->events(); - for (MusECore::iEvent i = el->begin(); i != el->end(); ++i) { + for (MusECore::ciEvent i = part->events().begin(); i != part->events().end(); ++i) { MusECore::Event e = i->second; // Do not add events which are past the end of the part. if(e.tick() > len) diff --git a/muse2/muse/midiedit/ecanvas.h b/muse2/muse/midiedit/ecanvas.h index 95e856c8..e7d7ad6e 100644 --- a/muse2/muse/midiedit/ecanvas.h +++ b/muse2/muse/midiedit/ecanvas.h @@ -80,7 +80,7 @@ class EventCanvas : public Canvas { bool _setCurPartIfOnlyOneEventIsSelected; void updateSelection(); - virtual CItem* addItem(MusECore::Part*, MusECore::Event&) = 0; + virtual CItem* addItem(MusECore::Part*, const MusECore::Event&) = 0; virtual QPoint raster(const QPoint&) const; virtual MusECore::Undo moveCanvasItems(CItemList&, int, int, DragType, bool rasterize = true) = 0; virtual bool moveItem(MusECore::Undo&, CItem*, const QPoint&, DragType, bool rasterize = true) = 0; diff --git a/muse2/muse/midiedit/piano.cpp b/muse2/muse/midiedit/piano.cpp index 40d93910..17553baa 100644 --- a/muse2/muse/midiedit/piano.cpp +++ b/muse2/muse/midiedit/piano.cpp @@ -570,8 +570,7 @@ void Piano::draw(QPainter& p, const QRect& r) int num = cl->num(); int pitch = num & 0x7f; bool used = false; - MusECore::EventList* el = cur_part->events(); - for (MusECore::ciEvent ie = el->begin(); ie != el->end(); ++ie) + for (MusECore::ciEvent ie = cur_part->events().begin(); ie != cur_part->events().end(); ++ie) { MusECore::Event e = ie->second; if(e.type() != MusECore::Controller) diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 92ed3758..5be4c090 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -59,7 +59,7 @@ namespace MusEGui { // NEvent //--------------------------------------------------------- -NEvent::NEvent(MusECore::Event& e, MusECore::Part* p, int y) : MusEGui::CItem(e, p) +NEvent::NEvent(const MusECore::Event& e, MusECore::Part* p, int y) : MusEGui::CItem(e, p) { y = y - KH/4; unsigned tick = e.tick() + p->tick(); @@ -72,7 +72,7 @@ NEvent::NEvent(MusECore::Event& e, MusECore::Part* p, int y) : MusEGui::CItem(e, // addItem //--------------------------------------------------------- -CItem* PianoCanvas::addItem(MusECore::Part* part, MusECore::Event& event) +CItem* PianoCanvas::addItem(MusECore::Part* part, const MusECore::Event& event) { if (signed(event.tick())<0) { printf("ERROR: trying to add event before current part!\n"); @@ -635,11 +635,10 @@ void PianoCanvas::pianoCmd(int cmd) if (part == 0) break; - 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 = part->events().lower_bound(pos[0] - part->tick()); e != part->events().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; @@ -663,10 +662,8 @@ void PianoCanvas::pianoCmd(int cmd) break; MusECore::Undo operations; - 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 = part->events().lower_bound(pos[0]); e != part->events().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; @@ -989,7 +986,7 @@ void PianoCanvas::curPartChanged() void PianoCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool delta_mode) { - 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) { @@ -1002,7 +999,7 @@ void PianoCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool 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(); @@ -1072,7 +1069,7 @@ void PianoCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool // 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/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index 888427ea..4748093b 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -46,7 +46,7 @@ namespace MusEGui { class NEvent : public CItem { public: - NEvent(MusECore::Event& e, MusECore::Part* p, int y); + NEvent(const MusECore::Event& e, MusECore::Part* p, int y); }; class ScrollScale; @@ -80,7 +80,7 @@ class PianoCanvas : 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/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 543e86aa..954cd08a 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -73,6 +73,8 @@ using namespace std; using MusEGlobal::debugMsg; using MusEGlobal::heavyDebugMsg; +using MusECore::UndoOp; +using MusECore::Undo; namespace MusEGui { @@ -519,7 +521,7 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) selection_changed(); connect(MusEGlobal::song, SIGNAL(songChanged(MusECore::SongChangedFlags_t)), SLOT(song_changed(MusECore::SongChangedFlags_t))); - connect(MusEGlobal::song, SIGNAL(newPartsCreated(const std::map< MusECore::Part*, std::set<MusECore::Part*> >&)), score_canvas, SLOT(add_new_parts(const std::map< MusECore::Part*, std::set<MusECore::Part*> >&))); + connect(MusEGlobal::song, SIGNAL(newPartsCreated(const std::map< const MusECore::Part*, std::set<const MusECore::Part*> >&)), score_canvas, SLOT(add_new_parts(const std::map< const MusECore::Part*, std::set<const MusECore::Part*> >&))); score_canvas->fully_recalculate(); score_canvas->goto_tick(initPos,true); @@ -653,7 +655,7 @@ void ScoreEdit::song_changed(MusECore::SongChangedFlags_t flags) if (flags & (SC_SELECTION | SC_EVENT_MODIFIED | SC_EVENT_REMOVED)) { - map<MusECore::Event*, MusECore::Part*> selection=get_events(score_canvas->get_all_parts(),1); + map<const MusECore::Event*, const MusECore::Part*> selection=get_events(score_canvas->get_all_parts(),1); if (selection.empty()) { apply_velo_to_label->setText(tr("Apply to new notes:")); @@ -664,7 +666,7 @@ void ScoreEdit::song_changed(MusECore::SongChangedFlags_t flags) int velo=-1; int velo_off=-1; - for (map<MusECore::Event*, MusECore::Part*>::iterator it=selection.begin(); it!=selection.end(); it++) + for (map<const MusECore::Event*, const MusECore::Part*>::iterator it=selection.begin(); it!=selection.end(); it++) if (it->first->type()==MusECore::Note) { if (velo==-1) velo=it->first->velo(); @@ -897,7 +899,7 @@ void staff_t::write_status(int level, MusECore::Xml& xml) const xml.tag(level++, "staff"); xml.intTag(level, "type", type); xml.intTag(level, "clef", clef); - for (set<MusECore::Part*>::iterator part=parts.begin(); part!=parts.end(); part++) + for (set<const MusECore::Part*>::iterator part=parts.begin(); part!=parts.end(); part++) { MusECore::Track* track = (*part)->track(); int trkIdx = MusEGlobal::song->tracks()->index(track); @@ -962,7 +964,7 @@ void ScoreEdit::writeStatus(int level, MusECore::Xml& xml) const xml.intTag(level, "preambleContainsKeysig", preamble_keysig_action->isChecked()); xml.intTag(level, "preambleContainsTimesig", preamble_timesig_action->isChecked()); - MusECore::Part* selected_part=score_canvas->get_selected_part(); + const MusECore::Part* selected_part=score_canvas->get_selected_part(); if (selected_part==NULL) { xml.put(level, "<selectedPart>none</selectedPart>"); @@ -1520,9 +1522,9 @@ void ScoreCanvas::move_staff_below(list<staff_t>::iterator dest, list<staff_t>:: move_staff_above(dest, src); } -set<MusECore::Part*> ScoreCanvas::get_all_parts() +set<const MusECore::Part*> ScoreCanvas::get_all_parts() { - set<MusECore::Part*> result; + set<const MusECore::Part*> result; for (list<staff_t>::iterator it=staves.begin(); it!=staves.end(); it++) result.insert(it->parts.begin(), it->parts.end()); @@ -1784,14 +1786,13 @@ void staff_t::create_appropriate_eventlist() // phase one: fill the list ----------------------------------------- //insert note on events - for (set<MusECore::Part*>::const_iterator part_it=parts.begin(); part_it!=parts.end(); part_it++) + for (set<const MusECore::Part*>::const_iterator part_it=parts.begin(); part_it!=parts.end(); part_it++) { - MusECore::Part* part=*part_it; - MusECore::EventList* el=part->events(); + const MusECore::Part* part=*part_it; - for (MusECore::iEvent it=el->begin(); it!=el->end(); it++) + for (MusECore::ciEvent it=part->events().begin(); it!=part->events().end(); it++) { - MusECore::Event& event=it->second; + const MusECore::Event& event=it->second; if ( ( event.isNote() && !event.isNoteOff() && // (event.endTick() <= part->lenTick()) ) && @@ -3804,7 +3805,7 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) if ((mouse_erases_notes) || (event->button()==Qt::MidButton)) //erase? { - MusEGlobal::audio->msgDeleteEvent(dragged_event, dragged_event_part, true, false, false); + MusEGlobal::song->applyOperation(UndoOp(UndoOp::DeleteEvent,dragged_event, dragged_event_part, false, false)); } else if (event->button()==Qt::LeftButton) //edit? { @@ -3818,8 +3819,8 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) { if (mouse_inserts_notes) { - MusECore::Part* curr_part = NULL; - set<MusECore::Part*> possible_dests=staff_it->parts_at_tick(tick); + const MusECore::Part* curr_part = NULL; + set<const MusECore::Part*> possible_dests=staff_it->parts_at_tick(tick); if (!possible_dests.empty()) { @@ -3866,7 +3867,7 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) newevent.setLenTick(curr_part->lenTick() - newevent.tick()); } - MusEGlobal::audio->msgAddEvent(newevent, curr_part, true, false, false); + MusEGlobal::song->applyOperation(UndoOp(UndoOp::AddEvent, newevent, curr_part,false, false)); set_dragged_event_part(curr_part); dragged_event=newevent; @@ -3913,7 +3914,7 @@ void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) { if (debugMsg) cout << "new length <= 0, erasing item" << endl; if (undo_started) MusEGlobal::song->undo(); - MusEGlobal::audio->msgDeleteEvent(dragged_event, dragged_event_part, true, false, false); + MusEGlobal::song->applyOperation(UndoOp(UndoOp::DeleteEvent,dragged_event, dragged_event_part, false, false)); } else { @@ -3928,9 +3929,7 @@ void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) if (!ctrl) deselect_all(); - clicked_event_ptr->setSelected(!clicked_event_ptr->selected()); - - MusEGlobal::song->update(SC_SELECTION); + MusEGlobal::song->applyOperation(UndoOp(UndoOp::SelectEvent, *clicked_event_ptr, !clicked_event_ptr->selected(), clicked_event_ptr->selected())); } setMouseTracking(false); @@ -3971,7 +3970,7 @@ void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) if (!ctrl) deselect_all(); - set<MusECore::Event*> already_processed; + set<const MusECore::Event*> already_processed; for (list<staff_t>::iterator it=staves.begin(); it!=staves.end(); it++) it->apply_lasso(lasso.translated(x_pos-x_left, y_pos - it->y_draw), already_processed); @@ -4029,9 +4028,7 @@ void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) if (!ctrl) deselect_all(); - clicked_event_ptr->setSelected(true); - - MusEGlobal::song->update(SC_SELECTION); + MusEGlobal::song->applyOperation(UndoOp(UndoOp::SelectEvent, *clicked_event_ptr, true, clicked_event_ptr->selected())); } old_pitch=-1; @@ -4505,20 +4502,23 @@ void ScoreCanvas::set_velo_off(int velo) void ScoreCanvas::deselect_all() { - set<MusECore::Part*> all_parts=get_all_parts(); + set<const MusECore::Part*> all_parts=get_all_parts(); + + Undo operations; + operations.combobreaker=true; - for (set<MusECore::Part*>::iterator part=all_parts.begin(); part!=all_parts.end(); part++) - for (MusECore::iEvent event=(*part)->events()->begin(); event!=(*part)->events()->end(); event++) - event->second.setSelected(false); + for (set<const MusECore::Part*>::iterator part=all_parts.begin(); part!=all_parts.end(); part++) + for (MusECore::ciEvent event=(*part)->events().begin(); event!=(*part)->events().end(); event++) + operations.push_back(UndoOp(UndoOp::SelectEvent, event->second, false, event->second.selected())); - MusEGlobal::song->update(SC_SELECTION); + MusEGlobal::song->applyOperationGroup(operations); } bool staff_t::cleanup_parts() { bool did_something=false; - for (set<MusECore::Part*>::iterator it=parts.begin(); it!=parts.end();) + for (set<const MusECore::Part*>::iterator it=parts.begin(); it!=parts.end();) { bool valid=false; @@ -4549,18 +4549,18 @@ bool staff_t::cleanup_parts() return did_something; } -set<MusECore::Part*> staff_t::parts_at_tick(unsigned tick) +set<const MusECore::Part*> staff_t::parts_at_tick(unsigned tick) { - set<MusECore::Part*> result; + set<const MusECore::Part*> result; - for (set<MusECore::Part*>::iterator it=parts.begin(); it!=parts.end(); it++) + for (set<const MusECore::Part*>::iterator it=parts.begin(); it!=parts.end(); it++) if ((tick >= (*it)->tick()) && (tick<=(*it)->endTick())) result.insert(*it); return result; } -void staff_t::apply_lasso(QRect rect, set<MusECore::Event*>& already_processed) +void staff_t::apply_lasso(QRect rect, set<const MusECore::Event*>& already_processed) { for (ScoreItemList::iterator it=itemlist.begin(); it!=itemlist.end(); it++) for (set<FloItem>::iterator it2=it->second.begin(); it2!=it->second.end(); it2++) @@ -4569,7 +4569,7 @@ void staff_t::apply_lasso(QRect rect, set<MusECore::Event*>& already_processed) if (rect.contains(it2->x, it2->y)) if (already_processed.find(it2->source_event)==already_processed.end()) { - it2->source_event->setSelected(!it2->source_event->selected()); + MusEGlobal::song->applyOperation(UndoOp(UndoOp::SelectEvent,*it2->source_event,!it2->source_event->selected(),it2->source_event->selected())); already_processed.insert(it2->source_event); } } @@ -4617,7 +4617,7 @@ void staff_t::update_part_indices() { part_indices.clear(); - for (set<MusECore::Part*>::iterator it=parts.begin(); it!=parts.end(); it++) + for (set<const MusECore::Part*>::iterator it=parts.begin(); it!=parts.end(); it++) part_indices.insert((*it)->sn()); } @@ -4654,15 +4654,15 @@ void ScoreEdit::keyPressEvent(QKeyEvent* event) } -void ScoreCanvas::add_new_parts(const std::map< MusECore::Part*, std::set<MusECore::Part*> >& param) +void ScoreCanvas::add_new_parts(const std::map< const MusECore::Part*, std::set<const MusECore::Part*> >& param) { for (list<staff_t>::iterator staff=staves.begin(); staff!=staves.end(); staff++) { - for (std::map< MusECore::Part*, set<MusECore::Part*> >::const_iterator it = param.begin(); it!=param.end(); it++) + for (std::map< const MusECore::Part*, set<const MusECore::Part*> >::const_iterator it = param.begin(); it!=param.end(); it++) if (staff->parts.find(it->first)!=staff->parts.end()) staff->parts.insert(it->second.begin(), it->second.end()); - //staff->cleanup_parts(); // don't cleanup here, because at this point, the parts may only exist + //staff->cleanup_parts(); // don't cleanup here, because at this point, the parts might exist only // in the operation group. cleanup could remove them immediately staff->update_part_indices(); } diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 3b413660..31bc0cff 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -257,8 +257,8 @@ class FloEvent enum typeEnum { NOTE_ON = 30, NOTE_OFF = 10, BAR = 20, KEY_CHANGE=23, TIME_SIG=26 }; //the order matters! typeEnum type; unsigned tick; - MusECore::Part* source_part; - MusECore::Event* source_event; + const MusECore::Part* source_part; + const MusECore::Event* source_event; int pitch; mutable int vel; @@ -270,7 +270,7 @@ class FloEvent MusECore::key_enum key; - FloEvent(unsigned ti, int p,int v,int l,typeEnum t, MusECore::Part* part=NULL, MusECore::Event* event=NULL) + FloEvent(unsigned ti, int p,int v,int l,typeEnum t, const MusECore::Part* part=NULL, const MusECore::Event* event=NULL) { pitch=p; vel=v; @@ -312,8 +312,8 @@ class FloItem enum typeEnum { NOTE=21, REST=22, NOTE_END=01, REST_END=02, BAR =10, KEY_CHANGE=13, TIME_SIG=16}; //the order matters! typeEnum type; unsigned begin_tick; - MusECore::Event* source_event; - MusECore::Part* source_part; + const MusECore::Event* source_event; + const MusECore::Part* source_part; note_pos_t pos; int len; @@ -343,7 +343,7 @@ class FloItem - FloItem(typeEnum t, note_pos_t p, int l=0,int d=0, bool ti=false, unsigned beg=0, MusECore::Part* part=NULL, MusECore::Event* event=NULL) + FloItem(typeEnum t, note_pos_t p, int l=0,int d=0, bool ti=false, unsigned beg=0, const MusECore::Part* part=NULL, const MusECore::Event* event=NULL) { pos=p; dots=d; @@ -546,7 +546,7 @@ enum staff_mode_t struct staff_t { - set<MusECore::Part*> parts; + set<const MusECore::Part*> parts; set<int> part_indices; ScoreEventList eventlist; ScoreItemList itemlist; @@ -568,7 +568,7 @@ struct staff_t void process_itemlist(); void calc_item_pos(); - void apply_lasso(QRect rect, set<MusECore::Event*>& already_processed); + void apply_lasso(QRect rect, set<const MusECore::Event*>& already_processed); void recalculate() { @@ -585,7 +585,7 @@ struct staff_t parent=parent_; } - staff_t (ScoreCanvas* parent_, staff_type_t type_, clef_t clef_, set<MusECore::Part*> parts_) + staff_t (ScoreCanvas* parent_, staff_type_t type_, clef_t clef_, set<const MusECore::Part*> parts_) { type=type_; clef=clef_; @@ -596,7 +596,7 @@ struct staff_t bool cleanup_parts(); - set<MusECore::Part*> parts_at_tick(unsigned tick); + set<const MusECore::Part*> parts_at_tick(unsigned tick); void read_status(MusECore::Xml& xml); void write_status(int level, MusECore::Xml& xml) const; @@ -718,7 +718,7 @@ class ScoreCanvas : public MusEGui::View float y_scroll_speed; float y_scroll_pos; - MusECore::Part* selected_part; + const MusECore::Part* selected_part; int selected_part_index; int last_len; @@ -742,11 +742,11 @@ class ScoreCanvas : public MusEGui::View bool inserting; bool dragging; bool drag_cursor_changed; - MusECore::Part* dragged_event_part; + const MusECore::Part* dragged_event_part; int dragged_event_part_index; MusECore::Event dragged_event; MusECore::Event original_dragged_event; - MusECore::Event* clicked_event_ptr; + const MusECore::Event* clicked_event_ptr; int old_pitch; unsigned old_dest_tick; @@ -790,7 +790,7 @@ class ScoreCanvas : public MusEGui::View void deselect_all(); void midi_note(int pitch, int velo); - void add_new_parts(const std::map< MusECore::Part*, std::set<MusECore::Part*> >&); + void add_new_parts(const std::map< const MusECore::Part*, std::set<const MusECore::Part*> >&); public slots: void x_scroll_event(int); @@ -855,12 +855,12 @@ class ScoreCanvas : public MusEGui::View int get_last_len() {return last_len;} void set_last_len(int l) {last_len=l;} - MusECore::Part* get_selected_part() {return selected_part;} - void set_selected_part(MusECore::Part* p) {selected_part=p; if (selected_part) selected_part_index=selected_part->sn();} - MusECore::Part* get_dragged_event_part() {return dragged_event_part;} - void set_dragged_event_part(MusECore::Part* p) {dragged_event_part=p; if (dragged_event_part) dragged_event_part_index=dragged_event_part->sn();} + const MusECore::Part* get_selected_part() const {return selected_part;} + void set_selected_part(const MusECore::Part* p) {selected_part=p; if (selected_part) selected_part_index=selected_part->sn();} + const MusECore::Part* get_dragged_event_part() const {return dragged_event_part;} + void set_dragged_event_part(const MusECore::Part* p) {dragged_event_part=p; if (dragged_event_part) dragged_event_part_index=dragged_event_part->sn();} - set<MusECore::Part*> get_all_parts(); + set<const MusECore::Part*> get_all_parts(); void write_staves(int level, MusECore::Xml& xml) const; |