From b266c2b2ba06a208fde6596a9eaef94e5e8eb19d Mon Sep 17 00:00:00 2001 From: Werner Schweer Date: Mon, 4 Sep 2006 12:52:43 +0000 Subject: midi cmd update --- muse/muse/midiedit/CMakeLists.txt | 10 ++- muse/muse/midiedit/gatetime.cpp | 76 ++++++++++++---- muse/muse/midiedit/gatetime.h | 23 +++-- muse/muse/midiedit/gatetime.ui | 133 +--------------------------- muse/muse/midiedit/midicmd.cpp | 181 ++++++++------------------------------ muse/muse/midiedit/midicmd.h | 15 +++- muse/muse/midiedit/prcanvas.cpp | 91 ++----------------- muse/muse/midiedit/prcanvas.h | 4 + muse/muse/midiedit/velocity.cpp | 79 +++++++++++++---- muse/muse/midiedit/velocity.h | 21 +++-- muse/muse/midiedit/velocity.ui | 129 +-------------------------- 11 files changed, 229 insertions(+), 533 deletions(-) diff --git a/muse/muse/midiedit/CMakeLists.txt b/muse/muse/midiedit/CMakeLists.txt index c46a3dd0..384eed3f 100644 --- a/muse/muse/midiedit/CMakeLists.txt +++ b/muse/muse/midiedit/CMakeLists.txt @@ -19,6 +19,7 @@ #============================================================================= QT4_WRAP_CPP ( midiedit_mocs + midicmd.h gatetime.h velocity.h quantconfig.h @@ -33,12 +34,18 @@ QT4_WRAP_CPP ( midiedit_mocs ) QT4_WRAP_UI ( midiedit_ui_headers + midicmd.ui gatetime.ui velocity.ui quantconfig.ui ) add_library ( midiedit STATIC + midicmd.h + gatetime.h + ${midiedit_ui_headers} + ${midiedit_mocs} + midicmd.cpp gatetime.cpp velocity.cpp quantconfig.cpp @@ -52,13 +59,10 @@ add_library ( midiedit STATIC drumedit.cpp drummap.cpp ecanvas.cpp - midicmd.cpp midieditor.cpp pianoroll.cpp prcanvas.cpp miditracker.cpp - ${midiedit_mocs} - ${midiedit_ui_headers} ) set_target_properties( midiedit diff --git a/muse/muse/midiedit/gatetime.cpp b/muse/muse/midiedit/gatetime.cpp index e75710c8..862d4aaf 100644 --- a/muse/muse/midiedit/gatetime.cpp +++ b/muse/muse/midiedit/gatetime.cpp @@ -29,14 +29,15 @@ GateTime::GateTime(QWidget*) : MidiCmdDialog() { - setupUi(this); - rangeGroup = new QButtonGroup(this); - rangeGroup->setExclusive(true); - rangeGroup->addButton(allEventsButton, RANGE_ALL); - rangeGroup->addButton(selectedEventsButton, RANGE_SELECTED); - rangeGroup->addButton(loopedEventsButton, RANGE_LOOPED); - rangeGroup->addButton(selectedLoopedButton, RANGE_SELECTED | RANGE_LOOPED); - allEventsButton->setChecked(true); + setWindowTitle(tr("MusE: Modify Gate Time")); + QWidget* gateTime = new QWidget; + gt.setupUi(gateTime); + layout->addWidget(gateTime); + layout->addStretch(10); + _rateVal = 0; + _offsetVal = 0; + gt.rate->setValue(_rateVal); + gt.offset->setValue(_offsetVal); } //--------------------------------------------------------- @@ -45,21 +46,60 @@ GateTime::GateTime(QWidget*) void GateTime::accept() { - _range = rangeGroup->checkedId(); - _rateVal = rate->value(); - _offsetVal = offset->value(); - QDialog::accept(); + _rateVal = gt.rate->value(); + _offsetVal = gt.offset->value(); + MidiCmdDialog::accept(); } //--------------------------------------------------------- -// setRange +// MidifyGateTime //--------------------------------------------------------- -void GateTime::setRange(int id) +ModifyGateTimeCmd::ModifyGateTimeCmd(MidiEditor* e) + : MidiCmd(e) { - if (rangeGroup->button(id)) - rangeGroup->button(id)->setChecked(true); - else - printf("setRange: not button %d!\n", id); + dialog = 0; + } + +//--------------------------------------------------------- +// guiDialog +//--------------------------------------------------------- + +MidiCmdDialog* ModifyGateTimeCmd::guiDialog() + { + if (dialog == 0) + dialog = new GateTime(0); + return dialog; + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void ModifyGateTimeCmd::process(CItemList* items) + { + int rate = dialog->rateVal(); + int offset = dialog->offsetVal(); + + for (iCItem k = items->begin(); k != items->end(); ++k) { + CItem* item = k->second; + Event event = item->event; + if (event.type() != Note) + continue; + + if (itemInRange(item)) { + unsigned len = event.lenTick(); + len = rate ? (len * 100) / rate : 1; + len += offset; + if (len <= 1) + len = 1; + + if (event.lenTick() != len) { + Event newEvent = event.clone(); + newEvent.setLenTick(len); + changeEvent(event, newEvent, item->part); + } + } + } } diff --git a/muse/muse/midiedit/gatetime.h b/muse/muse/midiedit/gatetime.h index f438fc1d..699b7c61 100644 --- a/muse/muse/midiedit/gatetime.h +++ b/muse/muse/midiedit/gatetime.h @@ -28,11 +28,10 @@ // GateTime //--------------------------------------------------------- -class GateTime : public MidiCmdDialog, public Ui::GateTimeBase { +class GateTime : public MidiCmdDialog { Q_OBJECT - - QButtonGroup* rangeGroup; - int _range; + + Ui::GateTimeBase gt; int _rateVal; int _offsetVal; @@ -41,11 +40,23 @@ class GateTime : public MidiCmdDialog, public Ui::GateTimeBase { public: GateTime(QWidget* parent = 0); - void setRange(int id); - int range() const { return _range; } int rateVal() const { return _rateVal; } int offsetVal() const { return _offsetVal; } }; +//--------------------------------------------------------- +// ModifyGateTimeCmd +//--------------------------------------------------------- + +class ModifyGateTimeCmd : public MidiCmd + { + GateTime* dialog; + virtual MidiCmdDialog* guiDialog(); + virtual void process(CItemList* items); + + public: + ModifyGateTimeCmd(MidiEditor* e); + }; + #endif diff --git a/muse/muse/midiedit/gatetime.ui b/muse/muse/midiedit/gatetime.ui index 76d45ddc..e1b92e7e 100644 --- a/muse/muse/midiedit/gatetime.ui +++ b/muse/muse/midiedit/gatetime.ui @@ -3,13 +3,13 @@ GateTimeBase - + 0 0 - 387 - 392 + 262 + 149 @@ -22,52 +22,6 @@ 6 - - - - Apply To - - - - 6 - - - 3 - - - - - All Events - - - - - - - Selected Events - - - true - - - - - - - Looped Events - - - - - - - Selected AND Looped - - - - - - @@ -123,88 +77,9 @@ - - - - 0 - - - 6 - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - OK - - - false - - - true - - - - - - - Cancel - - - - - qPixmapFromMimeSource - - - okButton - clicked() - GateTimeBase - accept() - - - 211 - 360 - - - 36 - 356 - - - - - cancelButton - clicked() - GateTimeBase - reject() - - - 316 - 372 - - - 124 - 378 - - - - + diff --git a/muse/muse/midiedit/midicmd.cpp b/muse/muse/midiedit/midicmd.cpp index 231a442f..bb6b1972 100644 --- a/muse/muse/midiedit/midicmd.cpp +++ b/muse/muse/midiedit/midicmd.cpp @@ -24,6 +24,7 @@ #include "velocity.h" #include "audio.h" #include "midieditor.h" +#include "widgets/tb1.h" //========================================================== // class MidiCmd is an attempt to formalize the @@ -37,8 +38,42 @@ //--------------------------------------------------------- MidiCmdDialog::MidiCmdDialog() - : QDialog(0) + : QDialog() { + QWidget* rangeWidget = new QWidget; + mc.setupUi(rangeWidget); + layout = new QVBoxLayout; + setLayout(layout); + layout->addWidget(rangeWidget); + rangeGroup = new QButtonGroup(this); + rangeGroup->setExclusive(true); + rangeGroup->addButton(mc.allEventsButton, RANGE_ALL); + rangeGroup->addButton(mc.selectedEventsButton, RANGE_SELECTED); + rangeGroup->addButton(mc.loopedEventsButton, RANGE_LOOPED); + rangeGroup->addButton(mc.selectedLoopedButton, RANGE_SELECTED | RANGE_LOOPED); + mc.allEventsButton->setChecked(true); + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void MidiCmdDialog::setRange(int id) + { + if (rangeGroup->button(id)) + rangeGroup->button(id)->setChecked(true); + else + printf("setRange: not button %d!\n", id); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MidiCmdDialog::accept() + { + _range = rangeGroup->checkedId(); + QDialog::accept(); } //--------------------------------------------------------- @@ -57,16 +92,13 @@ MidiCmd::MidiCmd(MidiEditor* e) void MidiCmd::processEvents(CItemList* items) { MidiCmdDialog* dialog = guiDialog(); - editor->applyTo(); + range = editor->applyTo(); dialog->setRange(range); bool rv = dialog->exec(); - if (!rv) { - delete dialog; + if (!rv) return; - } range = dialog->range(); // all, selected, looped, sel+loop editor->setApplyTo(range); - delete dialog; modified = 0; song->startUndo(); @@ -101,140 +133,3 @@ void MidiCmd::changeEvent(Event oldEvent, Event newEvent, Part* part) modified = SC_EVENT_MODIFIED; } -//================================================================== -// process midi event lists -//================================================================== - -//--------------------------------------------------------- -// ModifyGateTimeCmd -//--------------------------------------------------------- - -class ModifyGateTimeCmd : public MidiCmd - { - GateTime* dialog; - virtual MidiCmdDialog* guiDialog(); - virtual void process(CItemList* items); - - public: - ModifyGateTimeCmd(MidiEditor* e); - }; - -//--------------------------------------------------------- -// MidifyGateTime -//--------------------------------------------------------- - -ModifyGateTimeCmd::ModifyGateTimeCmd(MidiEditor* e) - : MidiCmd(e) - { - dialog = 0; - } - -//--------------------------------------------------------- -// guiDialog -//--------------------------------------------------------- - -MidiCmdDialog* ModifyGateTimeCmd::guiDialog() - { - if (dialog == 0) - dialog = new GateTime(0); - return dialog; - } - -//--------------------------------------------------------- -// process -//--------------------------------------------------------- - -void ModifyGateTimeCmd::process(CItemList* items) - { - int rate = dialog->rateVal(); - int offset = dialog->offsetVal(); - - for (iCItem k = items->begin(); k != items->end(); ++k) { - CItem* item = k->second; - Event event = item->event; - if (event.type() != Note) - continue; - - if (itemInRange(item)) { - unsigned len = event.lenTick(); - len = rate ? (len * 100) / rate : 1; - len += offset; - if (len <= 1) - len = 1; - - if (event.lenTick() != len) { - Event newEvent = event.clone(); - newEvent.setLenTick(len); - changeEvent(event, newEvent, item->part); - } - } - } - } - -//--------------------------------------------------------- -// ModifyVelocityCmd -//--------------------------------------------------------- - -class ModifyVelocityCmd : public MidiCmd - { - Velocity* dialog; - virtual MidiCmdDialog* guiDialog(); - virtual void process(CItemList* items); - - public: - ModifyVelocityCmd(MidiEditor* e); - }; - -//--------------------------------------------------------- -// ModifyVelocityCmd -//--------------------------------------------------------- - -ModifyVelocityCmd::ModifyVelocityCmd(MidiEditor* e) - : MidiCmd(e) - { - dialog = 0; - } - -//--------------------------------------------------------- -// guiDialog -//--------------------------------------------------------- - -MidiCmdDialog* ModifyVelocityCmd::guiDialog() - { - if (dialog == 0) - dialog = new Velocity(0); - return dialog; - } - -//--------------------------------------------------------- -// process -//--------------------------------------------------------- - -void ModifyVelocityCmd::process(CItemList* items) - { - int rate = dialog->rateVal(); - int offset = dialog->offsetVal(); - - for (iCItem k = items->begin(); k != items->end(); ++k) { - CItem* item = k->second; - Event event = item->event; - if (event.type() != Note) - continue; - if (itemInRange(item)) { - int velo = event.velo(); - velo = (velo * rate) / 100; - velo += offset; - - if (velo <= 0) - velo = 1; - if (velo > 127) - velo = 127; - if (event.velo() != velo) { - Event newEvent = event.clone(); - newEvent.setVelo(velo); - audio->msgChangeEvent(event, newEvent, item->part, false); - } - } - } - } - diff --git a/muse/muse/midiedit/midicmd.h b/muse/muse/midiedit/midicmd.h index 0e4a9b43..f78f9cb9 100644 --- a/muse/muse/midiedit/midicmd.h +++ b/muse/muse/midiedit/midicmd.h @@ -22,21 +22,32 @@ #define __MIDICMD_H__ #include "citem.h" +#include "ui_midicmd.h" class MidiEditor; class MidiCmdDialog; //--------------------------------------------------------- // MidiCmdDialog +// GUI base class for midiCmd //--------------------------------------------------------- class MidiCmdDialog : public QDialog { + Q_OBJECT + + QButtonGroup* rangeGroup; + int _range; + Ui::MidiCmd mc; + + protected: + void accept(); + QVBoxLayout* layout; public: MidiCmdDialog(); - int range() const { return 0; } - void setRange(int /*val*/) { } + int range() const { return _range; } + void setRange(int); }; //--------------------------------------------------------- diff --git a/muse/muse/midiedit/prcanvas.cpp b/muse/muse/midiedit/prcanvas.cpp index df674e0e..9356abad 100644 --- a/muse/muse/midiedit/prcanvas.cpp +++ b/muse/muse/midiedit/prcanvas.cpp @@ -27,6 +27,9 @@ #include "audio.h" #include "part.h" +#include "velocity.h" +#include "gatetime.h" + //--------------------------------------------------------- // PianoCanvas //--------------------------------------------------------- @@ -39,6 +42,10 @@ PianoCanvas::PianoCanvas(MidiEditor* pr) colorMode = 0; canvasTools = PointerTool | PencilTool | RubberTool | DrawTool; + // register midi commands + cmdModifyGateTime = new ModifyGateTimeCmd(pr); + cmdModifyVelocity = new ModifyVelocityCmd(pr); + songChanged(SC_TRACK_INSERTED); } @@ -442,91 +449,11 @@ void PianoCanvas::cmd(int cmd, int quantStrength, int quantLimit, bool quantLen) } break; case CMD_MODIFY_GATE_TIME: - { - GateTime w(this); - w.setRange(editor->applyTo()); - if (!w.exec()) - break; - int range = w.range(); // all, selected, looped, sel+loop - int rate = w.rateVal(); - int offset = w.offsetVal(); - editor->setApplyTo(range); - - song->startUndo(); - for (iCItem k = items.begin(); k != items.end(); ++k) { - CItem* item = k->second; - Event event = item->event; - if (event.type() != Note) - continue; - unsigned tick = event.tick(); - bool selected = k->second->isSelected(); - bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); - - if ((range == 0) - || (range == 1 && selected) - || (range == 2 && inLoop) - || (range == 3 && selected && inLoop)) { - unsigned len = event.lenTick(); - - len = rate ? (len * 100) / rate : 1; - len += offset; - if (len <= 1) - len = 1; - - if (event.lenTick() != len) { - Event newEvent = event.clone(); - newEvent.setLenTick(len); - audio->msgChangeEvent(event, newEvent, item->part, false); - } - } - } - song->endUndo(SC_EVENT_MODIFIED); - } + cmdModifyGateTime->processEvents(&items); break; case CMD_MODIFY_VELOCITY: - { - Velocity w(this); - w.setRange(editor->applyTo()); - if (!w.exec()) - break; - int range = w.range(); // all, selected, looped, sel+loop - int rate = w.rateVal(); - int offset = w.offsetVal(); - - song->startUndo(); - for (iCItem k = items.begin(); k != items.end(); ++k) { - CItem* item = k->second; - Event event = item->event; - if (event.type() != Note) - continue; - unsigned tick = event.tick(); - bool selected = k->second->isSelected(); - bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); - - if ((range == 0) - || (range == 1 && selected) - || (range == 2 && inLoop) - || (range == 3 && selected && inLoop)) { - int velo = event.velo(); - - //velo = rate ? (velo * 100) / rate : 64; - velo = (velo * rate) / 100; - velo += offset; - - if (velo <= 0) - velo = 1; - if (velo > 127) - velo = 127; - if (event.velo() != velo) { - Event newEvent = event.clone(); - newEvent.setVelo(velo); - audio->msgChangeEvent(event, newEvent, item->part, false); - } - } - } - song->endUndo(SC_EVENT_MODIFIED); - } + cmdModifyVelocity->processEvents(&items); break; case CMD_CRESCENDO: diff --git a/muse/muse/midiedit/prcanvas.h b/muse/muse/midiedit/prcanvas.h index 63cb689c..95e4cecc 100644 --- a/muse/muse/midiedit/prcanvas.h +++ b/muse/muse/midiedit/prcanvas.h @@ -24,6 +24,7 @@ #include "ecanvas.h" class CItem; +class MidiCmd; //--------------------------------------------------------- // PianoCanvas @@ -35,6 +36,9 @@ class PianoCanvas : public EventCanvas { int colorMode; int playedPitch; + MidiCmd* cmdModifyGateTime; + MidiCmd* cmdModifyVelocity; + virtual void paint(QPainter&, QRect); virtual CItem* searchItem(const QPoint& p) const; virtual void addItem(Part* part, const Event& event); diff --git a/muse/muse/midiedit/velocity.cpp b/muse/muse/midiedit/velocity.cpp index a011317d..f0abd845 100644 --- a/muse/muse/midiedit/velocity.cpp +++ b/muse/muse/midiedit/velocity.cpp @@ -21,6 +21,7 @@ #include "velocity.h" #include "song.h" #include "tb1.h" +#include "audio.h" //--------------------------------------------------------- // Velocity @@ -29,14 +30,15 @@ Velocity::Velocity(QWidget*) : MidiCmdDialog() { - setupUi(this); - rangeGroup = new QButtonGroup(this); - rangeGroup->setExclusive(true); - rangeGroup->addButton(allEventsButton, RANGE_ALL); - rangeGroup->addButton(selectedEventsButton, RANGE_SELECTED); - rangeGroup->addButton(loopedEventsButton, RANGE_LOOPED); - rangeGroup->addButton(selectedLoopedButton, RANGE_SELECTED | RANGE_LOOPED); - allEventsButton->setChecked(true); + setWindowTitle(tr("MusE: Modify Velocity")); + QWidget* velocityWidget = new QWidget; + velo.setupUi(velocityWidget); + layout->addWidget(velocityWidget); + layout->addStretch(10); + _rateVal = 0; + _offsetVal = 0; + velo.rate->setValue(_rateVal); + velo.offset->setValue(_offsetVal); } //--------------------------------------------------------- @@ -45,21 +47,62 @@ Velocity::Velocity(QWidget*) void Velocity::accept() { - _range = rangeGroup->checkedId(); - _rateVal = rate->value(); - _offsetVal = offset->value(); - QDialog::accept(); + _rateVal = velo.rate->value(); + _offsetVal = velo.offset->value(); + MidiCmdDialog::accept(); } //--------------------------------------------------------- -// setRange +// ModifyVelocityCmd //--------------------------------------------------------- -void Velocity::setRange(int id) +ModifyVelocityCmd::ModifyVelocityCmd(MidiEditor* e) + : MidiCmd(e) { - if (rangeGroup->button(id)) - rangeGroup->button(id)->setChecked(true); - else - printf("setRange: not button %d!\n", id); + dialog = 0; } +//--------------------------------------------------------- +// guiDialog +//--------------------------------------------------------- + +MidiCmdDialog* ModifyVelocityCmd::guiDialog() + { + if (dialog == 0) + dialog = new Velocity(0); + return dialog; + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void ModifyVelocityCmd::process(CItemList* items) + { + int rate = dialog->rateVal(); + int offset = dialog->offsetVal(); + + for (iCItem k = items->begin(); k != items->end(); ++k) { + CItem* item = k->second; + Event event = item->event; + if (event.type() != Note) + continue; + if (itemInRange(item)) { + int velo = event.velo(); + velo = (velo * rate) / 100; + velo += offset; + + if (velo <= 0) + velo = 1; + if (velo > 127) + velo = 127; + if (event.velo() != velo) { + Event newEvent = event.clone(); + newEvent.setVelo(velo); + audio->msgChangeEvent(event, newEvent, item->part, false); + } + } + } + } + + diff --git a/muse/muse/midiedit/velocity.h b/muse/muse/midiedit/velocity.h index 8cbf1e26..2ac4e700 100644 --- a/muse/muse/midiedit/velocity.h +++ b/muse/muse/midiedit/velocity.h @@ -28,11 +28,10 @@ // Velocity //--------------------------------------------------------- -class Velocity : public MidiCmdDialog, public Ui::VelocityBase { +class Velocity : public MidiCmdDialog { Q_OBJECT - QButtonGroup* rangeGroup; - int _range; + Ui::VelocityBase velo; int _rateVal; int _offsetVal; @@ -41,11 +40,23 @@ class Velocity : public MidiCmdDialog, public Ui::VelocityBase { public: Velocity(QWidget* parent = 0); - void setRange(int id); - int range() const { return _range; } int rateVal() const { return _rateVal; } int offsetVal() const { return _offsetVal; } }; +//--------------------------------------------------------- +// ModifyVelocityCmd +//--------------------------------------------------------- + +class ModifyVelocityCmd : public MidiCmd + { + Velocity* dialog; + virtual MidiCmdDialog* guiDialog(); + virtual void process(CItemList* items); + + public: + ModifyVelocityCmd(MidiEditor* e); + }; + #endif diff --git a/muse/muse/midiedit/velocity.ui b/muse/muse/midiedit/velocity.ui index e0122520..342611c0 100644 --- a/muse/muse/midiedit/velocity.ui +++ b/muse/muse/midiedit/velocity.ui @@ -3,7 +3,7 @@ VelocityBase - + 0 @@ -22,52 +22,6 @@ 6 - - - - Apply To - - - - 6 - - - 3 - - - - - All Events - - - - - - - Selected Events - - - true - - - - - - - Looped Events - - - - - - - Selected AND Looped - - - - - - @@ -123,89 +77,10 @@ - - - - 0 - - - 6 - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - OK - - - false - - - true - - - - - - - Cancel - - - - - qPixmapFromMimeSource - - - okButton - clicked() - VelocityBase - accept() - - - 204 - 362 - - - 59 - 357 - - - - - cancelButton - clicked() - VelocityBase - reject() - - - 322 - 377 - - - 127 - 377 - - - - + -- cgit v1.2.3