summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2010-12-04 01:43:20 +0000
committerTim E. Real <termtech@rogers.com>2010-12-04 01:43:20 +0000
commit6154806a2ceb84ef5b14d763afa0c48da085f8ec (patch)
tree297a7787ffc71b6760dba80593c044854e9e69b0 /muse2/muse/midiedit
parentcac5fa2640723963b5a4ec7649cdc5dc8fd966ec (diff)
Ported all copy/paste/drag/drop coding. Fixed arranger menu cut/copy enable.
Diffstat (limited to 'muse2/muse/midiedit')
-rw-r--r--muse2/muse/midiedit/dcanvas.cpp90
-rw-r--r--muse2/muse/midiedit/dcanvas.h5
-rw-r--r--muse2/muse/midiedit/drumedit.cpp12
-rw-r--r--muse2/muse/midiedit/ecanvas.cpp185
-rw-r--r--muse2/muse/midiedit/ecanvas.h8
-rw-r--r--muse2/muse/midiedit/pianoroll.cpp18
-rw-r--r--muse2/muse/midiedit/prcanvas.cpp110
-rw-r--r--muse2/muse/midiedit/prcanvas.h5
8 files changed, 329 insertions, 104 deletions
diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp
index 9ad99b0e..17a4ac88 100644
--- a/muse2/muse/midiedit/dcanvas.cpp
+++ b/muse2/muse/midiedit/dcanvas.cpp
@@ -5,14 +5,14 @@
// (C) Copyright 1999 Werner Schweer (ws@seh.de)
//=========================================================
-#include <qpainter.h>
-#include <qapplication.h>
-#include <qclipboard.h>
-#include <q3dragobject.h>
+#include <QPainter>
+#include <QApplication>
+#include <QClipboard>
+#include <QDrag>
+
//Added by qt3to4:
#include <QDragLeaveEvent>
#include <Q3PointArray>
-#include <Q3CString>
#include <QDragEnterEvent>
#include <QDragMoveEvent>
#include <QDropEvent>
@@ -21,8 +21,8 @@
#include <stdio.h>
#include <values.h>
#include <errno.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
+//#include <sys/stat.h>
+//#include <sys/mman.h>
#include "dcanvas.h"
#include "midieditor.h"
@@ -814,6 +814,7 @@ void DrumCanvas::cmd(int cmd)
redraw();
}
+/*
//---------------------------------------------------------
// getTextDrag
//---------------------------------------------------------
@@ -874,6 +875,7 @@ Q3TextDrag* DrumCanvas::getTextDrag(QWidget* parent)
fclose(tmp);
return drag;
}
+*/
//---------------------------------------------------------
// copy
@@ -882,11 +884,14 @@ Q3TextDrag* DrumCanvas::getTextDrag(QWidget* parent)
void DrumCanvas::copy()
{
- Q3TextDrag* drag = getTextDrag(0);
- if (drag)
- QApplication::clipboard()->setData(drag, QClipboard::Clipboard);
+ //QDrag* drag = getTextDrag();
+ QMimeData* md = getTextDrag();
+
+ if (md)
+ QApplication::clipboard()->setMimeData(md, QClipboard::Clipboard);
}
+/*
//---------------------------------------------------------
// paste
//---------------------------------------------------------
@@ -906,7 +911,6 @@ int DrumCanvas::pasteAt(const QString& pt, int pos)
switch (token) {
case Xml::Error:
case Xml::End:
- //song->endUndo(SC_EVENT_INSERTED); By T356
song->endUndo(modified);
return pos;
case Xml::TagStart:
@@ -928,7 +932,6 @@ int DrumCanvas::pasteAt(const QString& pt, int pos)
Part* newPart = curPart->clone();
newPart->setLenTick(newPart->lenTick()+diff);
// Indicate no undo, and do port controller values but not clone parts.
- //audio->msgChangePart(curPart, newPart,false);
audio->msgChangePart(curPart, newPart, false, true, false);
modified=modified|SC_PART_MODIFIED;
@@ -936,11 +939,9 @@ int DrumCanvas::pasteAt(const QString& pt, int pos)
}
// Indicate no undo, and do not do port controller values and clone parts.
- //audio->msgAddEvent(e, curPart, false);
audio->msgAddEvent(e, curPart, false, false, false);
}
else
- //xml.unknown("EventCanvas::paste"); By T356
xml.unknown("DCanvas::pasteAt");
break;
case Xml::TagEnd:
@@ -949,6 +950,7 @@ int DrumCanvas::pasteAt(const QString& pt, int pos)
}
}
}
+*/
//---------------------------------------------------------
// paste
@@ -957,6 +959,7 @@ int DrumCanvas::pasteAt(const QString& pt, int pos)
void DrumCanvas::paste()
{
+/*
// Q3CString subtype("eventlist"); // ddskrjo
QString subtype("eventlist");
QMimeSource* ms = QApplication::clipboard()->data();
@@ -966,6 +969,13 @@ void DrumCanvas::paste()
return;
}
pasteAt(pt, song->cpos());
+*/
+ QString stype("x-muse-eventlist");
+
+ //QString s = QApplication::clipboard()->text(stype, QClipboard::Selection);
+ QString s = QApplication::clipboard()->text(stype, QClipboard::Clipboard); // TODO CHECK Tim.
+
+ pasteAt(s, song->cpos());
}
//---------------------------------------------------------
@@ -974,14 +984,24 @@ void DrumCanvas::paste()
void DrumCanvas::startDrag(CItem* /* item*/, bool copymode)
{
- Q3TextDrag* drag = getTextDrag(this);
- if (drag) {
-// QApplication::clipboard()->setData(drag, QClipboard::Clipboard);
-
+ QMimeData* md = getTextDrag();
+ //QDrag* drag = getTextDrag();
+
+ if (md) {
+// QApplication::clipboard()->setData(drag, QClipboard::Clipboard); // This line NOT enabled in muse-1
+ //QApplication::clipboard()->setMimeData(md); // TODO CHECK Tim.
+ //QApplication::clipboard()->setMimeData(drag->mimeData()); //
+
+ // "Note that setMimeData() assigns ownership of the QMimeData object to the QDrag object.
+ // The QDrag must be constructed on the heap with a parent QWidget to ensure that Qt can
+ // clean up after the drag and drop operation has been completed. "
+ QDrag* drag = new QDrag(this);
+ drag->setMimeData(md);
+
if (copymode)
- drag->dragCopy();
+ drag->exec(Qt::CopyAction);
else
- drag->dragMove();
+ drag->exec(Qt::MoveAction);
}
}
@@ -991,7 +1011,8 @@ void DrumCanvas::startDrag(CItem* /* item*/, bool copymode)
void DrumCanvas::dragEnterEvent(QDragEnterEvent* event)
{
- event->accept(Q3TextDrag::canDecode(event));
+ ///event->accept(Q3TextDrag::canDecode(event));
+ event->acceptProposedAction(); // TODO CHECK Tim.
}
//---------------------------------------------------------
@@ -1000,7 +1021,8 @@ void DrumCanvas::dragEnterEvent(QDragEnterEvent* event)
void DrumCanvas::dragMoveEvent(QDragMoveEvent*)
{
-// printf("drag move %x\n", this);
+ //printf("drag move %x\n", this); // REMOVE Tim
+ //event->acceptProposedAction();
}
//---------------------------------------------------------
@@ -1009,9 +1031,11 @@ void DrumCanvas::dragMoveEvent(QDragMoveEvent*)
void DrumCanvas::dragLeaveEvent(QDragLeaveEvent*)
{
-// printf("drag leave\n");
+ //printf("drag leave\n"); // REMOVE Tim
+ //event->acceptProposedAction();
}
+/*
//---------------------------------------------------------
// dropEvent
//---------------------------------------------------------
@@ -1020,17 +1044,31 @@ void DrumCanvas::viewDropEvent(QDropEvent* event)
{
QString text;
if (event->source() == this) {
- printf("local DROP\n");
+ printf("local DROP\n"); // REMOVE Tim
+ //event->acceptProposedAction();
+ //event->ignore(); // TODO CHECK Tim.
return;
}
- if (Q3TextDrag::decode(event, text)) {
+ //if (event->mimeData()->hasText()) {
+ if (event->mimeData()->hasFormat("text/x-muse-eventlist")) {
+
+ //text = event->mimeData()->text();
+ text = QString(event->mimeData()->data("text/x-muse-eventlist"));
+
// printf("drop <%s>\n", text.ascii());
int x = editor->rasterVal(event->pos().x());
if (x < 0)
x = 0;
pasteAt(text, x);
+ //event->accept(); // TODO
+ }
+ else {
+ printf("cannot decode drop\n");
+ //event->acceptProposedAction();
+ //event->ignore(); // TODO CHECK Tim.
}
}
+*/
//---------------------------------------------------------
// keyPressed
@@ -1286,6 +1324,6 @@ void DrumCanvas::modifySelected(NoteInfo::ValType type, int delta)
void DrumCanvas::curPartChanged()
{
- editor->setCaption(getCaption());
+ editor->setWindowTitle(getCaption());
}
diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h
index 7f5034fc..2b93ddae 100644
--- a/muse2/muse/midiedit/dcanvas.h
+++ b/muse2/muse/midiedit/dcanvas.h
@@ -10,7 +10,6 @@
#include "ecanvas.h"
#include "song.h"
-//Added by qt3to4:
#include <QResizeEvent>
#include <QDragEnterEvent>
#include <QDropEvent>
@@ -33,7 +32,6 @@ class DEvent : public CItem {
class ScrollScale;
class PianoRoll;
-class Q3TextDrag;
//---------------------------------------------------------
// DrumCanvas
@@ -56,15 +54,12 @@ class DrumCanvas : public EventCanvas {
int y2pitch(int y) const;
int pitch2y(int pitch) const;
- Q3TextDrag* getTextDrag(QWidget* parent);
void copy();
- int pasteAt(const QString& pt, int pos);
void paste();
void startDrag(CItem*, bool copymode);
void dragEnterEvent(QDragEnterEvent* event);
void dragMoveEvent(QDragMoveEvent*);
void dragLeaveEvent(QDragLeaveEvent*);
- void viewDropEvent(QDropEvent* event);
virtual void addItem(Part*, Event&);
virtual void resizeEvent(QResizeEvent*);
virtual void curPartChanged();
diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp
index b623f56f..44a6682e 100644
--- a/muse2/muse/midiedit/drumedit.cpp
+++ b/muse2/muse/midiedit/drumedit.cpp
@@ -881,11 +881,7 @@ void DrumEdit::cmd(int cmd)
void DrumEdit::clipboardChanged()
{
- QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard);
- if (ms && ms->format(0)) {
- bool flag = strcmp(ms->format(0), "text/eventlist;charset=UTF-8") == 0;
- menuEdit->setItemEnabled(DrumCanvas::CMD_PASTE, flag);
- }
+ pasteAction->setEnabled(QApplication::clipboard()->mimeData()->hasFormat(QString("text/x-muse-eventlist")));
}
//---------------------------------------------------------
@@ -895,9 +891,9 @@ void DrumEdit::clipboardChanged()
void DrumEdit::selectionChanged()
{
bool flag = canvas->selectionSize() > 0;
- menuEdit->setItemEnabled(DrumCanvas::CMD_CUT, flag);
- menuEdit->setItemEnabled(DrumCanvas::CMD_COPY, flag);
- menuEdit->setItemEnabled(DrumCanvas::CMD_DEL, flag);
+ cutAction->setEnabled(flag);
+ copyAction->setEnabled(flag);
+ deleteAction->setEnabled(flag);
}
//---------------------------------------------------------
diff --git a/muse2/muse/midiedit/ecanvas.cpp b/muse2/muse/midiedit/ecanvas.cpp
index 7fc7002d..c790d8c0 100644
--- a/muse2/muse/midiedit/ecanvas.cpp
+++ b/muse2/muse/midiedit/ecanvas.cpp
@@ -6,15 +6,23 @@
//=========================================================
#include <values.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <QKeyEvent>
+#include <QDropEvent>
+#include <QEvent>
+#include <QMimeData>
+#include <QByteArray>
+#include <QDrag>
+#include "xml.h"
#include "midieditor.h"
#include "ecanvas.h"
#include "song.h"
#include "event.h"
#include "shortcuts.h"
-//Added by qt3to4:
-#include <QKeyEvent>
-#include <QEvent>
+#include "audio.h"
//---------------------------------------------------------
// EventCanvas
@@ -253,11 +261,14 @@ MidiTrack* EventCanvas::track() const
void EventCanvas::keyPress(QKeyEvent* event)
{
int key = event->key();
- if (event->state() & Qt::ShiftButton)
+ ///if (event->state() & Qt::ShiftButton)
+ if (event->modifiers() & Qt::ShiftButton)
key += Qt::SHIFT;
- if (event->state() & Qt::AltButton)
+ ///if (event->state() & Qt::AltButton)
+ if (event->modifiers() & Qt::AltButton)
key += Qt::ALT;
- if (event->state() & Qt::ControlButton)
+ ///if (event->state() & Qt::ControlButton)
+ if (event->modifiers() & Qt::ControlButton)
key+= Qt::CTRL;
//
@@ -361,3 +372,165 @@ void EventCanvas::keyPress(QKeyEvent* event)
else
event->ignore();
}
+
+//---------------------------------------------------------
+// getTextDrag
+//---------------------------------------------------------
+
+//QDrag* EventCanvas::getTextDrag(QWidget* parent)
+QMimeData* EventCanvas::getTextDrag()
+ {
+ //---------------------------------------------------
+ // generate event list from selected events
+ //---------------------------------------------------
+
+ EventList el;
+ unsigned startTick = MAXINT;
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ if (!i->second->isSelected())
+ continue;
+ ///NEvent* ne = (NEvent*)(i->second);
+ CItem* ne = i->second;
+ Event e = ne->event();
+ if (startTick == MAXINT)
+ startTick = e.tick();
+ el.add(e);
+ }
+
+ //---------------------------------------------------
+ // write events as XML into tmp file
+ //---------------------------------------------------
+
+ FILE* tmp = tmpfile();
+ if (tmp == 0) {
+ fprintf(stderr, "EventCanvas::getTextDrag() fopen failed: %s\n",
+ strerror(errno));
+ return 0;
+ }
+ Xml xml(tmp);
+
+ int level = 0;
+ xml.tag(level++, "eventlist");
+ for (ciEvent e = el.begin(); e != el.end(); ++e)
+ e->second.write(level, xml, -startTick);
+ xml.etag(--level, "eventlist");
+
+ //---------------------------------------------------
+ // read tmp file into drag Object
+ //---------------------------------------------------
+
+ fflush(tmp);
+ struct stat f_stat;
+ if (fstat(fileno(tmp), &f_stat) == -1) {
+ fprintf(stderr, "PianoCanvas::copy() fstat failes:<%s>\n",
+ strerror(errno));
+ fclose(tmp);
+ return 0;
+ }
+ int n = f_stat.st_size;
+ char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE,
+ MAP_PRIVATE, fileno(tmp), 0);
+ fbuf[n] = 0;
+
+ QByteArray data(fbuf);
+ QMimeData* md = new QMimeData();
+ //QDrag* drag = new QDrag(parent);
+
+ md->setData("text/x-muse-eventlist", data);
+ //drag->setMimeData(md);
+
+ munmap(fbuf, n);
+ fclose(tmp);
+
+ //return drag;
+ return md;
+ }
+
+//---------------------------------------------------------
+// pasteAt
+//---------------------------------------------------------
+
+void EventCanvas::pasteAt(const QString& pt, int pos)
+ {
+ const char* p = pt.latin1();
+ Xml xml(p);
+ for (;;) {
+ Xml::Token token = xml.parse();
+ const QString& tag = xml.s1();
+ switch (token) {
+ case Xml::Error:
+ case Xml::End:
+ return;
+ case Xml::TagStart:
+ if (tag == "eventlist") {
+ song->startUndo();
+ EventList* el = new EventList();
+ el->read(xml, "eventlist", true);
+ int modified = SC_EVENT_INSERTED;
+ for (iEvent i = el->begin(); i != el->end(); ++i) {
+ Event e = i->second;
+ int tick = e.tick() + pos - curPart->tick();
+ if (tick<0) {
+ printf("ERROR: trying to add event before current part!\n");
+ song->endUndo(SC_EVENT_INSERTED);
+ delete el;
+ return;
+ }
+
+ e.setTick(tick);
+ int diff = e.endTick()-curPart->lenTick();
+ if (diff > 0) {// too short part? extend it
+ Part* newPart = curPart->clone();
+ newPart->setLenTick(newPart->lenTick()+diff);
+ // Indicate no undo, and do port controller values but not clone parts.
+ audio->msgChangePart(curPart, newPart, false, true, false);
+ modified=modified|SC_PART_MODIFIED;
+ curPart = newPart; // reassign
+ }
+ // Indicate no undo, and do not do port controller values and clone parts.
+ audio->msgAddEvent(e, curPart, false, false, false);
+ }
+ song->endUndo(modified);
+ delete el;
+ return;
+ }
+ else
+ xml.unknown("pasteAt");
+ break;
+ case Xml::Attribut:
+ case Xml::TagEnd:
+ default:
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// dropEvent
+//---------------------------------------------------------
+
+void EventCanvas::viewDropEvent(QDropEvent* event)
+ {
+ QString text;
+ if (event->source() == this) {
+ printf("local DROP\n"); // REMOVE Tim
+ //event->acceptProposedAction();
+ //event->ignore(); // TODO CHECK Tim.
+ return;
+ }
+ if (event->mimeData()->hasFormat("text/x-muse-eventlist")) {
+ text = QString(event->mimeData()->data("text/x-muse-eventlist"));
+
+ int x = editor->rasterVal(event->pos().x());
+ if (x < 0)
+ x = 0;
+ pasteAt(text, x);
+ //event->accept(); // TODO
+ }
+ else {
+ printf("cannot decode drop\n");
+ //event->acceptProposedAction();
+ //event->ignore(); // TODO CHECK Tim.
+ }
+ }
+
diff --git a/muse2/muse/midiedit/ecanvas.h b/muse2/muse/midiedit/ecanvas.h
index 224bd317..461a717a 100644
--- a/muse2/muse/midiedit/ecanvas.h
+++ b/muse2/muse/midiedit/ecanvas.h
@@ -17,6 +17,10 @@ class MidiPart;
class MidiTrack;
class MidiEditor;
class Part;
+class QMimeData;
+class QDrag;
+class QString;
+class QDropEvent;
struct PartToChange
{
@@ -78,6 +82,10 @@ class EventCanvas : public Canvas {
void range(int* s, int* e) const { *s = start_tick; *e = end_tick; }
void playEvents(bool flag) { _playEvents = flag; }
void selectAtTick(unsigned int tick);
+ //QDrag* getTextDrag(QWidget* parent);
+ QMimeData* getTextDrag();
+ void pasteAt(const QString& pt, int pos);
+ void viewDropEvent(QDropEvent* event);
virtual void modifySelected(NoteInfo::ValType, int) {}
virtual void keyPress(QKeyEvent*);
};
diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp
index f4b88e64..2dc1cbde 100644
--- a/muse2/muse/midiedit/pianoroll.cpp
+++ b/muse2/muse/midiedit/pianoroll.cpp
@@ -1135,23 +1135,7 @@ void PianoRoll::setEventColorMode(int mode)
void PianoRoll::clipboardChanged()
{
- const QMimeData* ms = QApplication::clipboard()->mimeData(QClipboard::Clipboard);
- bool flag = false;
- if (ms) {
- /*
- for (int i = 0;; ++i) {
- if (ms->format(i) == 0)
- break;
-// printf("clipboard changed %s\n", ms->format(i));
- flag = strcmp(ms->format(i), "text/eventlist;charset=UTF-8") == 0;
- if (flag)
- break;
- }
- */
-
- flag = ms->hasFormat("text/eventlist;charset=UTF-8");
- }
- editPasteAction->setEnabled(flag);
+ editPasteAction->setEnabled(QApplication::clipboard()->mimeData()->hasFormat(QString("text/x-muse-eventlist")));
}
//---------------------------------------------------------
diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp
index b9116628..38544f97 100644
--- a/muse2/muse/midiedit/prcanvas.cpp
+++ b/muse2/muse/midiedit/prcanvas.cpp
@@ -5,14 +5,11 @@
// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de)
//=========================================================
-#include <qapplication.h>
-#include <qclipboard.h>
-#include <qpainter.h>
-#include <q3dragobject.h>
-#include <qmessagebox.h>
-//Added by qt3to4:
+#include <QApplication>
+#include <QClipboard>
+#include <QPainter>
+#include <QDrag>
#include <QDragLeaveEvent>
-#include <Q3CString>
#include <QDragEnterEvent>
#include <QDragMoveEvent>
#include <QDropEvent>
@@ -22,12 +19,11 @@
#include <stdio.h>
#include <math.h>
#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <dirent.h>
+//#include <sys/stat.h>
+//#include <sys/types.h>
+//#include <sys/mman.h>
+//#include <fcntl.h>
+//#include <dirent.h>
#include "xml.h"
#include "prcanvas.h"
@@ -145,7 +141,7 @@ void PianoCanvas::drawItem(QPainter& p, const CItem* item,
QRect r = item->bbox();
if(!virt())
r.moveCenter(map(item->pos()));
- r = r.intersect(rect);
+ r = r.intersected(rect);
if(!r.isValid())
return;
p.setPen(Qt::black);
@@ -226,7 +222,7 @@ void PianoCanvas::drawMoving(QPainter& p, const CItem* item, const QRect& rect)
//if(!item->isMoving())
// return;
QRect mr = QRect(item->mp().x(), item->mp().y() - item->height()/2, item->width(), item->height());
- mr = mr.intersect(rect);
+ mr = mr.intersected(rect);
if(!mr.isValid())
return;
p.setPen(Qt::black);
@@ -804,7 +800,8 @@ void drawTickRaster(QPainter& p, int x, int y, int w, int h, int raster)
p.drawLine(x, y, x, y2);
int z, n;
sigmap.timesig(x, z, n);
- int q = p.xForm(QPoint(raster, 0)).x() - p.xForm(QPoint(0, 0)).x();
+ ///int q = p.xForm(QPoint(raster, 0)).x() - p.xForm(QPoint(0, 0)).x();
+ int q = p.combinedTransform().map(QPoint(raster, 0)).x() - p.combinedTransform().map(QPoint(0, 0)).x();
int qq = raster;
if (q < 8) // grid too dense
qq *= 2;
@@ -1265,18 +1262,18 @@ void PianoCanvas::midiNote(int pitch, int velo)
if (_midiin && _steprec && curPart
&& !audio->isPlaying() && velo && pos[0] >= start_tick
&& pos[0] < end_tick
- && !(globalKeyState & Qt::AltButton)) {
+ && !(globalKeyState & Qt::AltModifier)) {
unsigned int len = editor->quant();//prevent compiler warning: comparison singed/unsigned
unsigned tick = pos[0]; //CDW
unsigned starttick = tick;
- if (globalKeyState & Qt::ShiftButton)
+ if (globalKeyState & Qt::ShiftModifier)
tick -= editor->rasterStep(tick);
//
// extend len of last note?
//
EventList* events = curPart->events();
- if (globalKeyState & Qt::ControlButton) {
+ if (globalKeyState & Qt::ControlModifier) {
for (iEvent i = events->begin(); i != events->end(); ++i) {
Event ev = i->second;
if (!ev.isNote())
@@ -1307,7 +1304,7 @@ void PianoCanvas::midiNote(int pitch, int velo)
// Indicate do undo, and do not do port controller values and clone parts.
//audio->msgDeleteEvent(ev, curPart);
audio->msgDeleteEvent(ev, curPart, true, false, false);
- if (globalKeyState & Qt::ShiftButton)
+ if (globalKeyState & Qt::ShiftModifier)
tick += editor->rasterStep(tick);
return;
}
@@ -1328,6 +1325,7 @@ void PianoCanvas::midiNote(int pitch, int velo)
}
}
+/*
//---------------------------------------------------------
// getTextDrag
//---------------------------------------------------------
@@ -1390,6 +1388,7 @@ Q3TextDrag* PianoCanvas::getTextDrag(QWidget* parent)
fclose(tmp);
return drag;
}
+*/
//---------------------------------------------------------
// copy
@@ -1398,13 +1397,16 @@ Q3TextDrag* PianoCanvas::getTextDrag(QWidget* parent)
void PianoCanvas::copy()
{
- Q3TextDrag* drag = getTextDrag(0);
+ //QDrag* drag = getTextDrag();
+ QMimeData* drag = getTextDrag();
+
if (drag)
- QApplication::clipboard()->setData(drag, QClipboard::Clipboard);
+ QApplication::clipboard()->setMimeData(drag, QClipboard::Clipboard);
}
+/*
//---------------------------------------------------------
-// paste
+// pasteAt
//---------------------------------------------------------
void PianoCanvas::pasteAt(const QString& pt, int pos)
@@ -1440,13 +1442,11 @@ void PianoCanvas::pasteAt(const QString& pt, int pos)
Part* newPart = curPart->clone();
newPart->setLenTick(newPart->lenTick()+diff);
// Indicate no undo, and do port controller values but not clone parts.
- //audio->msgChangePart(curPart, newPart,false);
audio->msgChangePart(curPart, newPart, false, true, false);
modified=modified|SC_PART_MODIFIED;
curPart = newPart; // reassign
}
// Indicate no undo, and do not do port controller values and clone parts.
- //audio->msgAddEvent(e, curPart, false);
audio->msgAddEvent(e, curPart, false, false, false);
}
song->endUndo(modified);
@@ -1463,6 +1463,8 @@ void PianoCanvas::pasteAt(const QString& pt, int pos)
}
}
}
+*/
+
//---------------------------------------------------------
// paste
// paste events
@@ -1470,6 +1472,7 @@ void PianoCanvas::pasteAt(const QString& pt, int pos)
void PianoCanvas::paste()
{
+/*
//Q3CString subtype("eventlist"); ddskrjo
QString subtype("eventlist");
QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard);
@@ -1479,6 +1482,13 @@ void PianoCanvas::paste()
return;
}
pasteAt(pt, song->cpos());
+*/
+ QString stype("x-muse-eventlist");
+
+ //QString s = QApplication::clipboard()->text(stype, QClipboard::Selection);
+ QString s = QApplication::clipboard()->text(stype, QClipboard::Clipboard); // TODO CHECK Tim.
+
+ pasteAt(s, song->cpos());
}
//---------------------------------------------------------
@@ -1487,14 +1497,24 @@ void PianoCanvas::paste()
void PianoCanvas::startDrag(CItem* /* item*/, bool copymode)
{
- Q3TextDrag* drag = getTextDrag(this);
- if (drag) {
-// QApplication::clipboard()->setData(drag, QClipboard::Clipboard);
-
+ QMimeData* md = getTextDrag();
+ //QDrag* drag = getTextDrag();
+
+ if (md) {
+// QApplication::clipboard()->setData(drag, QClipboard::Clipboard); // This line NOT enabled in muse-1
+ //QApplication::clipboard()->setMimeData(md); // TODO CHECK Tim.
+ //QApplication::clipboard()->setMimeData(drag->mimeData()); //
+
+ // "Note that setMimeData() assigns ownership of the QMimeData object to the QDrag object.
+ // The QDrag must be constructed on the heap with a parent QWidget to ensure that Qt can
+ // clean up after the drag and drop operation has been completed. "
+ QDrag* drag = new QDrag(this);
+ drag->setMimeData(md);
+
if (copymode)
- drag->dragCopy();
+ drag->exec(Qt::CopyAction);
else
- drag->dragMove();
+ drag->exec(Qt::MoveAction);
}
}
@@ -1504,7 +1524,8 @@ void PianoCanvas::startDrag(CItem* /* item*/, bool copymode)
void PianoCanvas::dragEnterEvent(QDragEnterEvent* event)
{
- event->accept(Q3TextDrag::canDecode(event));
+ ///event->accept(Q3TextDrag::canDecode(event));
+ event->acceptProposedAction(); // TODO CHECK Tim.
}
//---------------------------------------------------------
@@ -1513,7 +1534,8 @@ void PianoCanvas::dragEnterEvent(QDragEnterEvent* event)
void PianoCanvas::dragMoveEvent(QDragMoveEvent*)
{
-// printf("drag move %x\n", this);
+ //printf("drag move %x\n", this);
+ //event->acceptProposedAction();
}
//---------------------------------------------------------
@@ -1522,9 +1544,11 @@ void PianoCanvas::dragMoveEvent(QDragMoveEvent*)
void PianoCanvas::dragLeaveEvent(QDragLeaveEvent*)
{
-// printf("drag leave\n");
+ //printf("drag leave\n");
+ //event->acceptProposedAction();
}
+/*
//---------------------------------------------------------
// dropEvent
//---------------------------------------------------------
@@ -1533,19 +1557,31 @@ void PianoCanvas::viewDropEvent(QDropEvent* event)
{
QString text;
if (event->source() == this) {
- printf("local DROP\n");
+ printf("local DROP\n"); // REMOVE Tim
+ //event->acceptProposedAction();
+ //event->ignore(); // TODO CHECK Tim.
return;
}
- if (Q3TextDrag::decode(event, text)) {
+ ///if (Q3TextDrag::decode(event, text)) {
+ //if (event->mimeData()->hasText()) {
+ if (event->mimeData()->hasFormat("text/x-muse-eventlist")) {
+
+ //text = event->mimeData()->text();
+ text = QString(event->mimeData()->data("text/x-muse-eventlist"));
+
int x = editor->rasterVal(event->pos().x());
if (x < 0)
x = 0;
pasteAt(text, x);
+ //event->accept(); // TODO
}
else {
printf("cannot decode drop\n");
+ //event->acceptProposedAction();
+ //event->ignore(); // TODO CHECK Tim.
}
}
+*/
//---------------------------------------------------------
// itemPressed
@@ -1614,7 +1650,7 @@ void PianoCanvas::itemMoved(const CItem* item, const QPoint& pos)
void PianoCanvas::curPartChanged()
{
- editor->setCaption(getCaption());
+ editor->setWindowTitle(getCaption());
}
//---------------------------------------------------------
diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h
index 2f50be2e..3a16ef10 100644
--- a/muse2/muse/midiedit/prcanvas.h
+++ b/muse2/muse/midiedit/prcanvas.h
@@ -10,7 +10,6 @@
#include "ecanvas.h"
#include "pianoroll.h"
-//Added by qt3to4:
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMouseEvent>
@@ -31,7 +30,6 @@ class NEvent : public CItem {
class ScrollScale;
class PianoRoll;
-class Q3TextDrag;
class QRect;
//---------------------------------------------------------
@@ -59,7 +57,6 @@ class PianoCanvas : public EventCanvas {
virtual void dragEnterEvent(QDragEnterEvent* event);
virtual void dragMoveEvent(QDragMoveEvent*);
virtual void dragLeaveEvent(QDragLeaveEvent*);
- virtual void viewDropEvent(QDropEvent* event);
virtual void addItem(Part*, Event&);
int y2pitch(int) const;
@@ -68,8 +65,6 @@ class PianoCanvas : public EventCanvas {
void quantize(int, int, bool);
void copy();
void paste();
- void pasteAt(const QString& pt, int pos);
- Q3TextDrag* getTextDrag(QWidget*);
virtual void itemPressed(const CItem*);
virtual void itemReleased(const CItem*, const QPoint&);
virtual void itemMoved(const CItem*, const QPoint&);