summaryrefslogtreecommitdiff
path: root/muse2/muse/waveedit
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2012-09-30 21:53:03 +0000
committerRobert Jonsson <spamatica@gmail.com>2012-09-30 21:53:03 +0000
commite1a3d5b87883b5faadbd43326326d4c5aadc871d (patch)
treeecbb1a0aa3d5e05039ac5d08ad57bc1d056f072e /muse2/muse/waveedit
parent6db72b766ea8bf781d0172a62f873104b2e7cab6 (diff)
various fixes and changes
Diffstat (limited to 'muse2/muse/waveedit')
-rw-r--r--muse2/muse/waveedit/wavecanvas.cpp43
-rw-r--r--muse2/muse/waveedit/wavecanvas.h1
-rw-r--r--muse2/muse/waveedit/waveedit.cpp4
-rw-r--r--muse2/muse/waveedit/waveedit.h1
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;