From: werner s. <wsc...@us...> - 2006-01-26 16:11:35
|
Update of /cvsroot/lmuse/muse/muse/midiedit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32217/muse/midiedit Modified Files: dcanvas.cpp dcanvas.h drumedit.cpp drumedit.h ecanvas.cpp ecanvas.h midieditor.cpp midieditor.h pianoroll.cpp pianoroll.h prcanvas.cpp prcanvas.h Log Message: updates Index: drumedit.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/drumedit.cpp,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** drumedit.cpp 25 Jan 2006 16:24:32 -0000 1.70 --- drumedit.cpp 26 Jan 2006 16:11:22 -0000 1.71 *************** *** 45,48 **** --- 45,49 ---- _applyTo = initApplyTo; + deltaMode = false; drumMap = &noDrumMap; *************** *** 50,65 **** QMenuBar* mb = menuBar(); - menuEdit = mb->addMenu(tr("&Edit")); - menuEdit->addAction(undoAction); - menuEdit->addAction(redoAction); - - menuEdit->addSeparator(); - - cutAction = menuEdit->addAction(tr("Cut")); - cutAction->setData(DrumCanvas::CMD_CUT); - copyAction = menuEdit->addAction(tr("Copy")); - copyAction->setData(DrumCanvas::CMD_COPY); - pasteAction = menuEdit->addAction(tr("Paste")); - pasteAction->setData(DrumCanvas::CMD_PASTE); menuEdit->addSeparator(); --- 51,54 ---- *************** *** 96,100 **** cmdActions[DrumCanvas::CMD_SELECT_OLOOP]->setData(DrumCanvas::CMD_SELECT_OLOOP); - connect(menuEdit, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); connect(menuSelect, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); connect(menuFunctions, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); --- 85,88 ---- *************** *** 141,145 **** connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), SLOT(setLocatorPos(int,const AL::Pos&,bool))); ! connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), song, SLOT(setPos(int,const AL::Pos&))); connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); --- 129,133 ---- connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), SLOT(setLocatorPos(int,const AL::Pos&,bool))); ! connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), SLOT(setPos(int,const AL::Pos&))); connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); *************** *** 165,174 **** connect(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), SLOT(noteinfoChanged(NoteInfo::ValType, int))); - QClipboard* cb = QApplication::clipboard(); - connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); clipboardChanged(); // enable/disable "Paste" selectionChanged(); // enable/disable "Copy" & "Paste" - initShortcuts(); canvas()->selectFirst(); --- 153,159 ---- *************** *** 214,230 **** //--------------------------------------------------------- ! void DrumEdit::setSelection(int, Event& e, Part* p) { selEvent = e; selPart = p; - if (p == 0) - return; ! unsigned tick = e.tick() + p->tick(); ! // MidiTrack* track = (MidiTrack*)selPart->track(); ! // MidiChannel* mc = track->channel(); ! selTick = tick; ! info->setEnabled(!e.empty()); ! if (!e.empty()) { info->setValues(tick, selEvent.lenTick(), --- 199,225 ---- //--------------------------------------------------------- ! void DrumEdit::setSelection(int tick, Event& e, Part* p) { + int selections = canvas()->selectionSize(); selEvent = e; selPart = p; ! if (selections > 1) { ! info->setEnabled(true); ! info->setDeltaMode(true); ! if (!deltaMode) { ! deltaMode = true; ! info->setValues(0, 0, 0, 0, 0); ! tickOffset = 0; ! lenOffset = 0; ! pitchOffset = 0; ! veloOnOffset = 0; ! veloOffOffset = 0; ! } ! } ! else if (selections == 1) { ! deltaMode = false; ! info->setEnabled(true); ! info->setDeltaMode(false); info->setValues(tick, selEvent.lenTick(), *************** *** 233,236 **** --- 228,235 ---- selEvent.veloOff()); } + else { + deltaMode = false; + info->setEnabled(false); + } selectionChanged(); } *************** *** 251,254 **** --- 250,254 ---- void DrumEdit::noteinfoChanged(NoteInfo::ValType type, int val) { + #if 0 if (selEvent.empty()) { printf("noteinfoChanged while note is zero %d\n", type); *************** *** 274,277 **** --- 274,334 ---- } audio->msgChangeEvent(selEvent, event, selPart); + #endif + int selections = canvas()->selectionSize(); + + if (selections == 0) { + printf("noteinfoChanged while nothing selected\n"); + } + else if (selections == 1) { + Event event = selEvent.clone(); + switch(type) { + case NoteInfo::VAL_TIME: + event.setTick(val - selPart->tick()); + break; + case NoteInfo::VAL_LEN: + event.setLenTick(val); + break; + case NoteInfo::VAL_VELON: + event.setVelo(val); + break; + case NoteInfo::VAL_VELOFF: + event.setVeloOff(val); + break; + case NoteInfo::VAL_PITCH: + event.setPitch(val); + break; + } + audio->msgChangeEvent(selEvent, event, selPart); + } + else { + // multiple events are selected; treat noteinfo values + // as offsets to event values + + int delta = 0; + switch (type) { + case NoteInfo::VAL_TIME: + delta = val - tickOffset; + tickOffset = val; + break; + case NoteInfo::VAL_LEN: + delta = val - lenOffset; + lenOffset = val; + break; + case NoteInfo::VAL_VELON: + delta = val - veloOnOffset; + veloOnOffset = val; + break; + case NoteInfo::VAL_VELOFF: + delta = val - veloOffOffset; + veloOffOffset = val; + break; + case NoteInfo::VAL_PITCH: + delta = val - pitchOffset; + pitchOffset = val; + break; + } + if (delta) + canvas()->modifySelected(type, delta); + } } *************** *** 287,314 **** //--------------------------------------------------------- - // clipboardChanged - //--------------------------------------------------------- - - void DrumEdit::clipboardChanged() - { - QString stype("eventlist"); - QString s = QApplication::clipboard()->text(stype); - pasteAction->setEnabled(!s.isEmpty()); - } - - //--------------------------------------------------------- - // selectionChanged - //--------------------------------------------------------- - - void DrumEdit::selectionChanged() - { - bool flag = canvas()->selectionSize() > 0; - cutAction->setEnabled(flag); - copyAction->setEnabled(flag); - pasteAction->setEnabled(flag); - cmdActions[DrumCanvas::CMD_DEL]->setEnabled(flag); - } - - //--------------------------------------------------------- // configChanged //--------------------------------------------------------- --- 344,347 ---- Index: pianoroll.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/pianoroll.h,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** pianoroll.h 25 Jan 2006 16:24:33 -0000 1.32 --- pianoroll.h 26 Jan 2006 16:11:22 -0000 1.33 *************** *** 42,50 **** Event selEvent; - int selTick; enum { CMD_EVENT_COLOR, CMD_CONFIG_QUANT, CMD_LAST }; QAction* menu_ids[CMD_LAST]; ! QMenu *menuEdit, *menuFunctions, *menuSelect, *menuConfig; int tickOffset; --- 42,50 ---- Event selEvent; enum { CMD_EVENT_COLOR, CMD_CONFIG_QUANT, CMD_LAST }; + QAction* menu_ids[CMD_LAST]; ! QMenu *menuFunctions, *menuSelect, *menuConfig; int tickOffset; *************** *** 74,81 **** void configQuant(); ! void cmd(QAction*); void setEventColorMode(QAction*); - void clipboardChanged(); // enable/disable "Paste" - void selectionChanged(); // enable/disable "Copy" & "Paste" void configChanged(); void cmdLeft(); --- 74,79 ---- void configQuant(); ! virtual void cmd(QAction*); void setEventColorMode(QAction*); void configChanged(); void cmdLeft(); Index: dcanvas.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/dcanvas.cpp,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** dcanvas.cpp 25 Jan 2006 16:24:32 -0000 1.55 --- dcanvas.cpp 26 Jan 2006 16:11:22 -0000 1.56 *************** *** 259,277 **** case -1: return; - case CMD_CUT: - copy(); - song->startUndo(); - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!i->second->isSelected()) - continue; - CItem* e = i->second; - Event event = e->event; - audio->msgDeleteEvent(event, e->part, false); - } - song->endUndo(SC_EVENT_REMOVED); - break; - case CMD_COPY: - copy(); - break; case CMD_PASTE: paste(); --- 259,262 ---- *************** *** 408,495 **** //--------------------------------------------------------- - // getTextDrag - //--------------------------------------------------------- - - QMimeData* DrumCanvas::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; - CItem* ne = i->second; - Event e = ne->event; - if (startTick == MAXINT) - startTick = e.tick(); - el.add(e); - } - - QBuffer buffer; - Xml xml(&buffer); - - for (ciEvent e = el.begin(); e != el.end(); ++e) - e->second.write(xml, -startTick); - - QByteArray data = buffer.buffer(); - QMimeData* drag = new QMimeData; - drag->setData("text/eventlist", data); - return drag; - } - - //--------------------------------------------------------- - // copy - // cut copy paste - //--------------------------------------------------------- - - void DrumCanvas::copy() - { - QMimeData* drag = getTextDrag(); - if (drag) - QApplication::clipboard()->setMimeData(drag, QClipboard::Clipboard); - } - - //--------------------------------------------------------- - // paste - //--------------------------------------------------------- - - int DrumCanvas::pasteAt(const QString& /*pt*/, int /*pos*/) - { - #if 0 //TODO2 - const char* p = pt.latin1(); - Xml xml(p); - - song->startUndo(); - for (;;) { - Xml::Token token = xml.parse(); - QString tag = xml.s1(); - switch (token) { - case Xml::Error: - case Xml::End: - song->endUndo(SC_EVENT_INSERTED); - return pos; - case Xml::TagStart: - if (tag == "event") { - Event e(Note); - //TODO2 e.read(xml); - e.setTick(e.tick() + pos); - audio->msgAddEvent(e, curPart, false); - } - else - xml.unknown("EventCanvas::paste"); - break; - case Xml::TagEnd: - default: - break; - } - } - #endif - return 0; - } - - //--------------------------------------------------------- // paste // paste events --- 393,396 ---- *************** *** 498,504 **** void DrumCanvas::paste() { ! QString t("eventlist"); ! QString pt(QApplication::clipboard()->text(t, QClipboard::Clipboard)); ! pasteAt(pt, song->cpos()); } --- 399,405 ---- void DrumCanvas::paste() { ! QString stype("x-muse-eventlist"); ! QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); ! pasteAt(s, song->cpos()); } *************** *** 512,516 **** QMimeData* drag = getTextDrag(); if (drag) { ! QApplication::clipboard()->setMimeData(drag, QClipboard::Clipboard); if (copymode) drag->dragCopy(); --- 413,417 ---- QMimeData* drag = getTextDrag(); if (drag) { ! QApplication::clipboard()->setMimeData(drag, QClipboard::Selection); if (copymode) drag->dragCopy(); Index: pianoroll.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/pianoroll.cpp,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** pianoroll.cpp 25 Jan 2006 16:24:32 -0000 1.70 --- pianoroll.cpp 26 Jan 2006 16:11:22 -0000 1.71 *************** *** 3,7 **** // Linux Music Editor // $Id$ ! // (C) Copyright 1999-2005 Werner Schweer (ws...@se...) //========================================================= --- 3,7 ---- // Linux Music Editor // $Id$ ! // (C) Copyright 1999-2006 Werner Schweer (ws...@se...) //========================================================= *************** *** 61,86 **** //---------Menü---------------------------------- - menuEdit = new QMenu(tr("&Edit")); - mb->addMenu(menuEdit); - - menuEdit->addAction(undoAction); - menuEdit->addAction(redoAction); - - QAction* a; - menuEdit->addSeparator(); - cutAction = menuEdit->addAction(tr("Cut")); - cutAction->setData(PianoCanvas::CMD_CUT); - cutAction->setShortcut(Qt::CTRL+Qt::Key_X); - - copyAction = menuEdit->addAction(tr("Copy")); - copyAction->setData(PianoCanvas::CMD_COPY); - copyAction->setShortcut(Qt::CTRL+Qt::Key_C); - - pasteAction = menuEdit->addAction(tr("Paste")); - pasteAction->setData(PianoCanvas::CMD_PASTE); - pasteAction->setShortcut(Qt::CTRL+Qt::Key_V); - menuEdit->addSeparator(); a = menuEdit->addAction(tr("Delete Events")); a->setData(PianoCanvas::CMD_DEL); --- 61,67 ---- //---------Menü---------------------------------- menuEdit->addSeparator(); + QAction* a; a = menuEdit->addAction(tr("Delete Events")); a->setData(PianoCanvas::CMD_DEL); *************** *** 184,188 **** cmdActions[PianoCanvas::CMD_CREATE_MEASURE]->setEnabled(false); - connect(menuEdit, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); connect(menuSelect, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); connect(menuFunctions, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); --- 165,168 ---- *************** *** 231,235 **** connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), SLOT(setLocatorPos(int,const AL::Pos&,bool))); ! connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), song, SLOT(setPos(int,const AL::Pos&))); connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); --- 211,215 ---- connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), SLOT(setLocatorPos(int,const AL::Pos&,bool))); ! connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), SLOT(setPos(int,const AL::Pos&))); connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); *************** *** 260,266 **** setEventColorMode(_colorMode); - QClipboard* cb = QApplication::clipboard(); - connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); - clipboardChanged(); // enable/disable "Paste" selectionChanged(); // enable/disable "Copy" & "Paste" --- 240,243 ---- *************** *** 326,333 **** { int cmd = a->data().toInt(); ! canvas()->cmd(cmd, ! _quantStrength, ! _quantLimit, ! _quantLen); } --- 303,307 ---- { int cmd = a->data().toInt(); ! canvas()->cmd(cmd, _quantStrength, _quantLimit, _quantLen); } *************** *** 343,347 **** selEvent = e; selPart = p; - selTick = tick; if (selections > 1) { --- 317,320 ---- *************** *** 592,618 **** //--------------------------------------------------------- - // clipboardChanged - //--------------------------------------------------------- - - void PianoRoll::clipboardChanged() - { - QString stype("eventlist"); - QString s = QApplication::clipboard()->text(stype); - pasteAction->setEnabled(!s.isEmpty()); - } - - //--------------------------------------------------------- - // selectionChanged - //--------------------------------------------------------- - - void PianoRoll::selectionChanged() - { - bool flag = canvas()->selectionSize() > 0; - cutAction->setEnabled(flag); - copyAction->setEnabled(flag); - pasteAction->setEnabled(flag); - } - - //--------------------------------------------------------- // initShortcuts //--------------------------------------------------------- --- 565,568 ---- Index: midieditor.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/midieditor.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** midieditor.h 25 Jan 2006 16:24:32 -0000 1.4 --- midieditor.h 26 Jan 2006 16:11:22 -0000 1.5 *************** *** 15,18 **** --- 15,19 ---- namespace AL { class Xml; + class Pos; }; using AL::Xml; *************** *** 47,50 **** --- 48,52 ---- EventCanvas* canvas() { return (EventCanvas*)tcanvas; } + void copy(); protected: *************** *** 56,63 **** --- 58,67 ---- Part* selPart; + QMenu *menuEdit; QAction* speaker; QAction* stepRecAction; QAction* midiInAction; QAction* followSongAction; + QAction* cutAction; QAction* copyAction; *************** *** 73,78 **** --- 77,89 ---- void writeStatus(Xml&) const; + private slots: + void midiCmd(QAction*); + protected slots: + void clipboardChanged(); // enable/disable "Paste" + void selectionChanged(); // enable/disable "Copy" & "Paste" void songChanged(int); + void setPos(int, const AL::Pos&); + virtual void cmd(QAction*) = 0; public slots: *************** *** 104,107 **** --- 115,121 ---- double xmag() const; void setXmag(double val); + enum { + CMD_CUT, CMD_COPY, CMD_PASTE + }; }; Index: midieditor.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/midieditor.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** midieditor.cpp 25 Jan 2006 16:24:32 -0000 1.6 --- midieditor.cpp 26 Jan 2006 16:11:22 -0000 1.7 *************** *** 15,18 **** --- 15,19 ---- #include "ecanvas.h" #include "icons.h" + #include "audio.h" //--------------------------------------------------------- *************** *** 30,33 **** --- 31,56 ---- toolbar = 0; + QMenuBar* mb = menuBar(); + + //---------Menü---------------------------------- + menuEdit = new QMenu(tr("&Edit")); + mb->addMenu(menuEdit); + + menuEdit->addAction(undoAction); + menuEdit->addAction(redoAction); + + menuEdit->addSeparator(); + cutAction = menuEdit->addAction(tr("Cut")); + cutAction->setData(MidiEditor::CMD_CUT); + cutAction->setShortcut(Qt::CTRL+Qt::Key_X); + + copyAction = menuEdit->addAction(tr("Copy")); + copyAction->setData(MidiEditor::CMD_COPY); + copyAction->setShortcut(Qt::CTRL+Qt::Key_C); + + pasteAction = menuEdit->addAction(tr("Paste")); + pasteAction->setData(MidiEditor::CMD_PASTE); + pasteAction->setShortcut(Qt::CTRL+Qt::Key_V); + speaker = new QAction(this); speaker->setCheckable(true); *************** *** 54,57 **** --- 77,139 ---- connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + connect(cb, SIGNAL(selectionChanged()), SLOT(clipboardChanged())); + connect(menuEdit, SIGNAL(triggered(QAction*)), SLOT(midiCmd(QAction*))); + } + + //--------------------------------------------------------- + // cmd + //--------------------------------------------------------- + + void MidiEditor::midiCmd(QAction* a) + { + switch (a->data().toInt()) { + case CMD_CUT: + { + copy(); + song->startUndo(); + CItemList* items = canvas()->getItems(); + for (iCItem i = items->begin(); i != items->end(); ++i) { + if (!i->second->isSelected()) + continue; + CItem* e = i->second; + Event event = e->event; + audio->msgDeleteEvent(event, e->part, false); + } + song->endUndo(SC_EVENT_REMOVED); + } + break; + case CMD_COPY: + copy(); + break; + default: + cmd(a); + break; + } + } + + //--------------------------------------------------------- + // copy + // cut copy paste + //--------------------------------------------------------- + + void MidiEditor::copy() + { + QMimeData* drag = canvas()->getTextDrag(); + if (drag) + QApplication::clipboard()->setMimeData(drag, QClipboard::Selection); + } + + + //--------------------------------------------------------- + // setPos + // snap locator positioning + //--------------------------------------------------------- + + void MidiEditor::setPos(int idx, const AL::Pos& pos) + { + song->setPos(idx, pos.snaped(_raster)); } *************** *** 238,242 **** void MidiEditor::setXmag(double val) { ! canvas()->setMag(val, tcanvas->ymag()); } --- 320,348 ---- void MidiEditor::setXmag(double val) { ! if (canvas()) ! canvas()->setMag(val, tcanvas->ymag()); } + //--------------------------------------------------------- + // clipboardChanged + //--------------------------------------------------------- + + void MidiEditor::clipboardChanged() + { + QString stype("x-muse-eventlist"); + QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); + pasteAction->setEnabled(!s.isEmpty()); + } + + //--------------------------------------------------------- + // selectionChanged + //--------------------------------------------------------- + + void MidiEditor::selectionChanged() + { + bool flag = canvas()->selectionSize() > 0; + cutAction->setEnabled(flag); + copyAction->setEnabled(flag); + } + + Index: ecanvas.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/ecanvas.h,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** ecanvas.h 25 Jan 2006 16:24:32 -0000 1.34 --- ecanvas.h 26 Jan 2006 16:11:22 -0000 1.35 *************** *** 116,119 **** --- 116,121 ---- virtual void paintControllerCanvas(QPainter&, QRect); + void pasteAt(const QString& pt, unsigned pos); + private slots: void removeController(QAction*); *************** *** 139,142 **** --- 141,146 ---- int selectionSize() const; void setCurPart(Part*); + QMimeData* getTextDrag(); + CItemList* getItems() { return &items; } }; Index: ecanvas.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/ecanvas.cpp,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** ecanvas.cpp 24 Jan 2006 21:18:11 -0000 1.53 --- ecanvas.cpp 26 Jan 2006 16:11:22 -0000 1.54 *************** *** 1288,1290 **** --- 1288,1363 ---- } + //--------------------------------------------------------- + // getTextDrag + //--------------------------------------------------------- + + 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; + CItem* ne = i->second; + Event e = ne->event; + if (startTick == MAXINT) + startTick = e.tick(); + el.add(e); + } + printf("%d events\n", el.size()); + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + Xml xml(&buffer); + xml.header(); + + xml.tag("eventlist"); + for (ciEvent e = el.begin(); e != el.end(); ++e) + e->second.write(xml, -startTick); + xml.etag("eventlist"); + + QByteArray data = buffer.buffer(); + QMimeData* drag = new QMimeData; + drag->setData("text/x-muse-eventlist", data); + printf("getTextDrag <%s>\n", data.data()); + buffer.close(); + return drag; + } + + //--------------------------------------------------------- + // pasteAt + //--------------------------------------------------------- + + void EventCanvas::pasteAt(const QString& pt, unsigned pos) + { + QDomDocument doc; + + if (!doc.setContent(pt, false)) { + printf("MusE:pasteAt(): syntax error\n"); + printf(">>%s<<\n", pt.toLatin1().data()); + return; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "eventlist") { + EventList el; + el.read(node.firstChild(), true); + song->startUndo(); + for (iEvent i = el.begin(); i != el.end(); ++i) { + Event e = i->second; + e.setTick(e.tick() + pos - curPart->tick()); + audio->msgAddEvent(e, curPart, false); + } + song->endUndo(SC_EVENT_INSERTED); + } + else + printf("MusE:pasteAt(): tag %s not supported\n", e.tagName().toLatin1().data()); + } + } + Index: prcanvas.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/prcanvas.cpp,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -d -r1.68 -r1.69 *** prcanvas.cpp 25 Jan 2006 16:24:33 -0000 1.68 --- prcanvas.cpp 26 Jan 2006 16:11:22 -0000 1.69 *************** *** 371,389 **** { switch (cmd) { - case CMD_CUT: - copy(); - song->startUndo(); - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!(i->second->isSelected())) - continue; - CItem* item = i->second; - Event ev = item->event; - audio->msgDeleteEvent(ev, item->part, false); - } - song->endUndo(SC_EVENT_REMOVED); - break; - case CMD_COPY: - copy(); - break; case CMD_PASTE: paste(); --- 371,374 ---- *************** *** 675,771 **** //--------------------------------------------------------- - // getTextDrag - //--------------------------------------------------------- - - QMimeData* PianoCanvas::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; - CItem* ne = i->second; - Event e = ne->event; - if (startTick == MAXINT) - startTick = e.tick(); - el.add(e); - } - - QBuffer buffer; - buffer.open(QIODevice::WriteOnly); - Xml xml(&buffer); - xml.tag("eventlist"); - for (ciEvent e = el.begin(); e != el.end(); ++e) - e->second.write(xml, -startTick); - xml.etag("eventlist"); - buffer.close(); - QMimeData* drag = new QMimeData; - QString type("text/x-muse-eventlist"); - drag->setData(type, buffer.data()); - return drag; - } - - //--------------------------------------------------------- - // copy - // cut copy paste - //--------------------------------------------------------- - - void PianoCanvas::copy() - { - QMimeData* drag = getTextDrag(); - if (drag) { - QApplication::clipboard()->setMimeData(drag, QClipboard::Selection); - QString type("x-muse-eventlist"); - printf("<<<%s>>>>>\n", QApplication::clipboard()->text(type, QClipboard::Selection).toLatin1().data()); - } - } - - //--------------------------------------------------------- - // paste - //--------------------------------------------------------- - - void PianoCanvas::pasteAt(const QString& pt, int /*pos*/) - { - #if 0 - 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(); - //TODO2 el->read(xml, "eventlist", true); - for (iEvent i = el->begin(); i != el->end(); ++i) { - Event e = i->second; - e.setTick(e.tick() + pos - curPart->tick()); - audio->msgAddEvent(e, curPart, false); - } - song->endUndo(SC_EVENT_INSERTED); - delete el; - return; - } - else - xml.unknown("pasteAt"); - break; - case Xml::Attribut: - case Xml::TagEnd: - default: - break; - } - } - #endif - } - - //--------------------------------------------------------- // paste // paste events --- 660,663 ---- *************** *** 775,779 **** { QString stype("x-muse-eventlist"); ! QString s = QApplication::clipboard()->text(stype); pasteAt(s, song->cpos()); } --- 667,671 ---- { QString stype("x-muse-eventlist"); ! QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); pasteAt(s, song->cpos()); } *************** *** 1023,1024 **** --- 915,917 ---- } } + Index: drumedit.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/drumedit.h,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** drumedit.h 25 Jan 2006 16:24:32 -0000 1.34 --- drumedit.h 26 Jan 2006 16:11:22 -0000 1.35 *************** *** 36,41 **** DrumMap* drumMap; int selTick; ! QMenu* menuEdit, *menuFunctions, *menuSelect; ! QSplitter* split2; QAction* cmdActions[DrumCanvas::CMD_COMMANDS]; --- 36,47 ---- DrumMap* drumMap; int selTick; ! QMenu *menuFunctions, *menuSelect; ! ! int tickOffset; ! int lenOffset; ! int pitchOffset; ! int veloOnOffset; ! int veloOffOffset; ! bool deltaMode; QAction* cmdActions[DrumCanvas::CMD_COMMANDS]; *************** *** 49,55 **** private slots: void noteinfoChanged(NoteInfo::ValType type, int val); ! void cmd(QAction*); ! void clipboardChanged(); // enable/disable "Paste" ! void selectionChanged(); // enable/disable "Copy" & "Paste" void configChanged(); --- 55,59 ---- private slots: void noteinfoChanged(NoteInfo::ValType type, int val); ! virtual void cmd(QAction*); void configChanged(); Index: dcanvas.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/dcanvas.h,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** dcanvas.h 25 Jan 2006 16:24:32 -0000 1.28 --- dcanvas.h 26 Jan 2006 16:11:22 -0000 1.29 *************** *** 31,37 **** virtual CItem* searchItem(const QPoint& p) const; - QMimeData* getTextDrag(); void copy(); - int pasteAt(const QString& pt, int pos); void paste(); void startDrag(CItem*, bool copymode); --- 31,35 ---- Index: prcanvas.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midiedit/prcanvas.h,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** prcanvas.h 25 Jan 2006 16:24:33 -0000 1.32 --- prcanvas.h 26 Jan 2006 16:11:22 -0000 1.33 *************** *** 40,47 **** void quantize(int, int, bool); - void copy(); void paste(); - void pasteAt(const QString& pt, int pos); - QMimeData* getTextDrag(); virtual void itemPressed(const CItem*); virtual void itemReleased(); --- 40,44 ---- *************** *** 56,60 **** public: enum { ! CMD_CUT, CMD_COPY, CMD_PASTE, CMD_DEL, CMD_OVER_QUANTIZE, CMD_ON_QUANTIZE, CMD_ONOFF_QUANTIZE, CMD_ITERATIVE_QUANTIZE, --- 53,58 ---- public: enum { ! CMD_CUT, CMD_COPY, CMD_PASTE, ! CMD_DEL, CMD_OVER_QUANTIZE, CMD_ON_QUANTIZE, CMD_ONOFF_QUANTIZE, CMD_ITERATIVE_QUANTIZE, |