diff options
author | Tim E. Real <termtech@rogers.com> | 2010-12-04 01:43:20 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2010-12-04 01:43:20 +0000 |
commit | 6154806a2ceb84ef5b14d763afa0c48da085f8ec (patch) | |
tree | 297a7787ffc71b6760dba80593c044854e9e69b0 /muse2/muse/midiedit | |
parent | cac5fa2640723963b5a4ec7649cdc5dc8fd966ec (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.cpp | 90 | ||||
-rw-r--r-- | muse2/muse/midiedit/dcanvas.h | 5 | ||||
-rw-r--r-- | muse2/muse/midiedit/drumedit.cpp | 12 | ||||
-rw-r--r-- | muse2/muse/midiedit/ecanvas.cpp | 185 | ||||
-rw-r--r-- | muse2/muse/midiedit/ecanvas.h | 8 | ||||
-rw-r--r-- | muse2/muse/midiedit/pianoroll.cpp | 18 | ||||
-rw-r--r-- | muse2/muse/midiedit/prcanvas.cpp | 110 | ||||
-rw-r--r-- | muse2/muse/midiedit/prcanvas.h | 5 |
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&); |