diff options
author | Robert Jonsson <spamatica@gmail.com> | 2012-09-30 21:53:03 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2012-09-30 21:53:03 +0000 |
commit | e1a3d5b87883b5faadbd43326326d4c5aadc871d (patch) | |
tree | ecbb1a0aa3d5e05039ac5d08ad57bc1d056f072e /muse2/muse/waveedit | |
parent | 6db72b766ea8bf781d0172a62f873104b2e7cab6 (diff) |
various fixes and changes
Diffstat (limited to 'muse2/muse/waveedit')
-rw-r--r-- | muse2/muse/waveedit/wavecanvas.cpp | 43 | ||||
-rw-r--r-- | muse2/muse/waveedit/wavecanvas.h | 1 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveedit.cpp | 4 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveedit.h | 1 |
4 files changed, 47 insertions, 2 deletions
diff --git a/muse2/muse/waveedit/wavecanvas.cpp b/muse2/muse/waveedit/wavecanvas.cpp index 8c1b0012..1fa070ec 100644 --- a/muse2/muse/waveedit/wavecanvas.cpp +++ b/muse2/muse/waveedit/wavecanvas.cpp @@ -48,6 +48,7 @@ #include <math.h> #include <errno.h> #include <sys/wait.h> +#include <set> #include "app.h" #include "xml.h" @@ -1862,8 +1863,46 @@ void WaveCanvas::cmd(int cmd) paramA = 0.25; break; - - + case CMD_CREATE_PART_REGION: + { + // create a new part and put in the copy buffer + MusECore::Part* pt = editor->curCanvasPart(); + if (pt == 0 || pt->track()->type() != MusECore::Track::WAVE) + return; + MusECore::WavePart *origPart = (MusECore::WavePart*)pt; + if (MusEGlobal::song->lpos() < origPart->tick() || MusEGlobal::song->rpos() > origPart->endTick()) + { + QMessageBox::warning(this, tr("Part creation failed"), + tr("Left and right position markers must be placed inside the current part."), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + MusECore::WavePart *tempPart = new MusECore::WavePart(origPart->track()); + unsigned origFrame = origPart->frame(); + unsigned frameDistance = MusEGlobal::song->lPos().frame() - origFrame; + 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++) + { + // TODO: handle multiple events correctly, + // the math for subsequent events isn't correct + 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; + partList.insert(tempPart); + + QMimeData *mimeData = MusECore::parts_to_mime(partList); + QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); + QMessageBox::information(this, tr("Part created"), + tr("The selected region has been copied to the clipboard and can be pasted in the arranger."), + QMessageBox::Ok, QMessageBox::Ok); + } + break; case CMD_ERASE_MEASURE: case CMD_DELETE_MEASURE: case CMD_CREATE_MEASURE: diff --git a/muse2/muse/waveedit/wavecanvas.h b/muse2/muse/waveedit/wavecanvas.h index f9553845..5ad836bc 100644 --- a/muse2/muse/waveedit/wavecanvas.h +++ b/muse2/muse/waveedit/wavecanvas.h @@ -154,6 +154,7 @@ class WaveCanvas : public EventCanvas { enum { CMD_MUTE=0, CMD_NORMALIZE, CMD_FADE_IN, CMD_FADE_OUT, CMD_REVERSE, CMD_GAIN_FREE, CMD_GAIN_200, CMD_GAIN_150, CMD_GAIN_75, CMD_GAIN_50, CMD_GAIN_25, CMD_EDIT_COPY, CMD_EDIT_CUT, CMD_EDIT_PASTE, CMD_PASTE_DIALOG, CMD_DEL, + CMD_CREATE_PART_REGION, CMD_EDIT_EXTERNAL, CMD_QUANTIZE, CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp index 56185a83..ca98e380 100644 --- a/muse2/muse/waveedit/waveedit.cpp +++ b/muse2/muse/waveedit/waveedit.cpp @@ -139,6 +139,10 @@ WaveEdit::WaveEdit(MusECore::PartList* pl) mapper->setMapping(copyAction, WaveCanvas::CMD_EDIT_COPY); connect(copyAction, SIGNAL(triggered()), mapper, SLOT(map())); + copyPartRegionAction = menuEdit->addAction(tr("&Create Part from Region")); + mapper->setMapping(copyPartRegionAction, WaveCanvas::CMD_CREATE_PART_REGION); + connect(copyPartRegionAction, SIGNAL(triggered()), mapper, SLOT(map())); + cutAction = menuEdit->addAction(tr("C&ut")); mapper->setMapping(cutAction, WaveCanvas::CMD_EDIT_CUT); connect(cutAction, SIGNAL(triggered()), mapper, SLOT(map())); diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h index 7165a63a..f0bcf199 100644 --- a/muse2/muse/waveedit/waveedit.h +++ b/muse2/muse/waveedit/waveedit.h @@ -68,6 +68,7 @@ class WaveEdit : public MidiEditor { QAction* selectNoneAction; QAction* cutAction; QAction* copyAction; + QAction* copyPartRegionAction; QAction* pasteAction; QAction* selectPrevPartAction; QAction* selectNextPartAction; |