From 7ad820d6fa0846f4f4016ada795fdef286649d59 Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Sat, 8 Sep 2012 05:15:07 +0000 Subject: Wave Editor: Added Edit -> Adjust Wave Offset. Helps compensate for latency. FIXME: Respect clones! If operating on two selected clones of the same part, an extra event is created. May or may not be this code's problem?... --- muse2/muse/waveedit/wavecanvas.cpp | 68 +++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) (limited to 'muse2/muse/waveedit/wavecanvas.cpp') diff --git a/muse2/muse/waveedit/wavecanvas.cpp b/muse2/muse/waveedit/wavecanvas.cpp index 220c2804..2139b647 100644 --- a/muse2/muse/waveedit/wavecanvas.cpp +++ b/muse2/muse/waveedit/wavecanvas.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -1504,6 +1505,68 @@ bool WaveCanvas::deleteItem(MusEGui::CItem* item) return false; } +//--------------------------------------------------------- +// adjustWaveOffset +//--------------------------------------------------------- + +void WaveCanvas::adjustWaveOffset() +{ + bool have_selected = false; + int init_offset = 0; + + for (MusEGui::iCItem k = items.begin(); k != items.end(); ++k) + { + if (k->second->isSelected()) + { + have_selected = true; + init_offset = k->second->event().spos(); + break; + } + } + + if(!have_selected) + { + QMessageBox::information(this, + QString("MusE"), + QWidget::tr("No wave events selected.")); + return; + } + + bool ok = false; + int offset = QInputDialog::getInt(this, + tr("Adjust Wave Offset"), + tr("Wave offset (frames)"), + init_offset, + 0, 2147483647, 1, + &ok); + if(!ok) + return; + + MusECore::Undo operations; + + // FIXME: Respect clones! If operating on two selected clones of the same part, an extra event is created! + // Check - Is it really this code's problem? Seems so, other operations like moving an event seem OK. + for(MusEGui::iCItem ici = items.begin(); ici != items.end(); ++ici) + { + if(ici->second->isSelected()) + { + MusECore::Event oldEvent = ici->second->event(); + if(oldEvent.spos() != offset) + { + MusECore::Part* part = ici->second->part(); + MusECore::Event newEvent = oldEvent.clone(); + newEvent.setSpos(offset); + // Do not do port controller values and clone parts. + operations.push_back(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, oldEvent, part, false, false)); + } + } + } + + MusEGlobal::song->applyOperationGroup(operations); + + redraw(); +} + //--------------------------------------------------------- // draw //--------------------------------------------------------- @@ -1722,7 +1785,10 @@ void WaveCanvas::cmd(int cmd) } break; - + case CMD_ADJUST_WAVE_OFFSET: + adjustWaveOffset(); + break; + case CMD_EDIT_EXTERNAL: modifyoperation = EDIT_EXTERNAL; break; -- cgit v1.2.3