summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/midiedit')
-rw-r--r--muse2/muse/midiedit/dcanvas.cpp63
-rw-r--r--muse2/muse/midiedit/dcanvas.h6
-rw-r--r--muse2/muse/midiedit/dlist.cpp9
-rw-r--r--muse2/muse/midiedit/drumedit.cpp8
-rw-r--r--muse2/muse/midiedit/ecanvas.cpp3
-rw-r--r--muse2/muse/midiedit/ecanvas.h2
-rw-r--r--muse2/muse/midiedit/piano.cpp3
-rw-r--r--muse2/muse/midiedit/prcanvas.cpp17
-rw-r--r--muse2/muse/midiedit/prcanvas.h4
-rw-r--r--muse2/muse/midiedit/scoreedit.cpp78
-rw-r--r--muse2/muse/midiedit/scoreedit.h38
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;