diff options
author | Tim E. Real <termtech@rogers.com> | 2012-11-12 04:49:31 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2012-11-12 04:49:31 +0000 |
commit | be1005a6031861b91e1a2df33f62e1c5a0a2aeb6 (patch) | |
tree | 89152909549c7dd624f4748f394c3adbcbf65b86 /muse2/muse/liste | |
parent | 31f618e5461553bd7836677f944acfa233e5ae3c (diff) |
Finished Aftertouch controllers
Feature: Piano KB / drum list show coloured dots when per-pitch controllers exist / have data.
Diffstat (limited to 'muse2/muse/liste')
-rw-r--r-- | muse2/muse/liste/editctrlbase.ui | 2 | ||||
-rw-r--r-- | muse2/muse/liste/editevent.cpp | 551 | ||||
-rw-r--r-- | muse2/muse/liste/editevent.h | 50 | ||||
-rw-r--r-- | muse2/muse/liste/listedit.cpp | 94 | ||||
-rw-r--r-- | muse2/muse/liste/listedit.h | 4 |
5 files changed, 237 insertions, 464 deletions
diff --git a/muse2/muse/liste/editctrlbase.ui b/muse2/muse/liste/editctrlbase.ui index 036b4525..c63e1c22 100644 --- a/muse2/muse/liste/editctrlbase.ui +++ b/muse2/muse/liste/editctrlbase.ui @@ -545,7 +545,7 @@ </widget> </item> <item row="2" column="0"> - <widget class="QLabel" name="textLabel2_3"> + <widget class="QLabel" name="noteLabel"> <property name="text"> <string>Note</string> </property> diff --git a/muse2/muse/liste/editevent.cpp b/muse2/muse/liste/editevent.cpp index fac6866d..e75a7359 100644 --- a/muse2/muse/liste/editevent.cpp +++ b/muse2/muse/liste/editevent.cpp @@ -148,28 +148,6 @@ MusECore::Event EditMetaDialog::getEvent(int tick, const MusECore::Event& event, return nevent; } -MusECore::Event EditCAfterDialog::getEvent(int tick, const MusECore::Event& event, QWidget* parent) - { - EditEventDialog* dlg = new EditCAfterDialog(tick, event, parent); - MusECore::Event nevent; - if (dlg->exec() == QDialog::Accepted) { - nevent = dlg->event(); - } - delete dlg; - return nevent; - } - -MusECore::Event EditPAfterDialog::getEvent(int tick, const MusECore::Event& event, QWidget* parent) - { - EditEventDialog* dlg = new EditPAfterDialog(tick, event, parent); - MusECore::Event nevent; - if (dlg->exec() == QDialog::Accepted) { - nevent = dlg->event(); - } - delete dlg; - return nevent; - } - //--------------------------------------------------------- // EditEventDialog //--------------------------------------------------------- @@ -434,128 +412,6 @@ void EditMetaDialog::accept() } //--------------------------------------------------------- -// EditCAfterDialog -//--------------------------------------------------------- - -EditCAfterDialog::EditCAfterDialog(int tick, const MusECore::Event& event, - QWidget* parent) - : EditEventDialog(parent) - { - setWindowTitle(tr("MusE: Enter Channel Aftertouch")); - - QLabel* l1 = new QLabel(tr("Time Position")); - epos = new Awl::PosEdit; - - QLabel* l2 = new QLabel(tr("Pressure")); - il2 = new MusEGui::IntLabel(-1, 0, 127, this, -1); - il2->setFrame(true); - il2->setDark(); - - QSlider* slider = new QSlider(Qt::Horizontal); - slider->setMinimum(0); - slider->setMaximum(127); - slider->setPageStep(1); - slider->setValue(0); - - connect(slider, SIGNAL(valueChanged(int)), il2, SLOT(setValue(int))); - connect(il2, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); - - if (!event.empty()) { - epos->setValue(tick); - il2->setValue(event.dataA()); - slider->setValue(event.dataA()); - } - else { - epos->setValue(tick); - il2->setValue(64); - slider->setValue(64); - } - - layout1->addWidget(l1, 0, 0); - layout1->addWidget(epos, 0, 1, Qt::AlignLeft); - layout1->addWidget(l2, 1, 0); - layout1->addWidget(il2, 1, 1, Qt::AlignLeft); - //layout1->addMultiCellWidget(slider, 2, 2, 0, 1); - layout1->addWidget(slider, 2, 0, 1, 2); - } - -//--------------------------------------------------------- -// EditCAfterDialog::event -//--------------------------------------------------------- - -MusECore::Event EditCAfterDialog::event() - { - MusECore::Event event(MusECore::CAfter); - event.setTick(epos->pos().tick()); - event.setA(il2->value()); - return event; - } - -//--------------------------------------------------------- -// EditPAfterDialog -//--------------------------------------------------------- - -EditPAfterDialog::EditPAfterDialog(int tick, const MusECore::Event& event, - QWidget* parent) - : EditEventDialog(parent) - { - setWindowTitle(tr("MusE: Enter Poly Aftertouch")); - - QLabel* l1 = new QLabel(tr("Time Position")); - epos = new Awl::PosEdit; - - QLabel* l2 = new QLabel(tr("Pitch")); - pl = new MusEGui::PitchEdit; - QLabel* l3 = new QLabel(tr("Pressure")); - il2 = new MusEGui::IntLabel(-1, 0, 127, this, -1); - il2->setFrame(true); - il2->setDark(); - - QSlider* slider = new QSlider(Qt::Horizontal); - slider->setMinimum(0); - slider->setMaximum(127); - slider->setPageStep(1); - slider->setValue(0); - - connect(slider, SIGNAL(valueChanged(int)), il2, SLOT(setValue(int))); - connect(il2, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); - - if (!event.empty()) { - epos->setValue(tick); - pl->setValue(event.pitch()); - il2->setValue(event.dataB()); - slider->setValue(event.dataB()); - } - else { - epos->setValue(tick); - pl->setValue(64); - il2->setValue(64); - slider->setValue(64); - } - - layout1->addWidget(l1, 0, 0); - layout1->addWidget(epos, 0, 1, Qt::AlignLeft); - layout1->addWidget(l2, 1, 0); - layout1->addWidget(pl, 1, 1, Qt::AlignLeft); - layout1->addWidget(l3, 2, 0); - layout1->addWidget(il2, 2, 1, Qt::AlignLeft); - //layout1->addMultiCellWidget(slider, 3, 3, 0, 1); - layout1->addWidget(slider, 3, 0, 1, 2); - } - -//--------------------------------------------------------- -// EditPAfterDialog::event -//--------------------------------------------------------- - -MusECore::Event EditPAfterDialog::event() - { - MusECore::Event event(MusECore::PAfter); - event.setTick(epos->pos().tick()); - event.setA(pl->value()); - event.setB(il2->value()); - return event; - } -//--------------------------------------------------------- // getEvent //--------------------------------------------------------- @@ -579,11 +435,64 @@ MusECore::Event EditCtrlDialog::event() { MusECore::Event event(MusECore::Controller); event.setTick(timePos->pos().tick()); - event.setA(num); - if (num == MusECore::CTRL_PROGRAM) - event.setB(val); + + int cnum = 0; + QListWidgetItem* item = ctrlList->currentItem(); + if(item != 0) + cnum = item->data(Qt::UserRole).toInt(); + + MusECore::MidiTrack* track = part->track(); + bool isDrum = track->type() == MusECore::Track::DRUM; + MusECore::MidiPort* port = &MusEGlobal::midiPorts[track->outPort()]; + int channel = track->outChannel(); + + int evnum = cnum; + int num = cnum; + if((cnum & 0xff) == 0xff) + { + evnum = (cnum & ~0xff) | (noteSpinBox->value() & 0x7f); + num = evnum; + if(isDrum) + { + MusECore::DrumMap* dm = &MusEGlobal::drumMap[noteSpinBox->value() & 0x7f]; + num = (cnum & ~0xff) | dm->anote; + port = &MusEGlobal::midiPorts[dm->port]; + channel = dm->channel; + } + } + + MusECore::MidiController* c = port->midiController(cnum); + MusECore::MidiCtrlValListList* cll = port->controller(); + + if(cll->find(channel, num) == cll->end()) + { + MusECore::MidiCtrlValList* vl = new MusECore::MidiCtrlValList(num); + cll->add(channel, vl); + } + + event.setA(evnum); + if(cnum == MusECore::CTRL_PROGRAM) + { + int hb = hbank->value(); + int lb = lbank->value(); + int prog = program->value(); + if (hb > 0 && hb < 129) + hb -= 1; + else + hb = 0xff; + if (lb > 0 && lb < 129) + lb -= 1; + else + lb = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; + else + prog = 0xff; + int val = (hb << 16) + (lb << 8) + prog; + event.setB(val); + } else - event.setB(valSlider->value() + MusEGlobal::midiPorts[part->track()->outPort()].midiController(num)->bias()); + event.setB(valSlider->value() + c->bias()); return event; } @@ -597,6 +506,15 @@ MusECore::Event EditCtrlDialog::event() // QPushButton* buttonNewController; //--------------------------------------------------------- +struct CI { + int num; + QString s; + bool used; + bool off; + bool instrument; + CI(int n, const QString& ss, bool u, bool o, bool i) : num(n), s(ss), used(u), off(o), instrument(i) {} + }; + EditCtrlDialog::EditCtrlDialog(int tick, const MusECore::Event& event, const MusECore::MidiPart* p, QWidget* parent) : QDialog(parent), part(p) @@ -605,90 +523,100 @@ EditCtrlDialog::EditCtrlDialog(int tick, const MusECore::Event& event, widgetStack->setAutoFillBackground(true); MusECore::MidiTrack* track = part->track(); - int portn = track->outPort(); - MusECore::MidiPort* port = &MusEGlobal::midiPorts[portn]; + MusECore::MidiPort* port = &MusEGlobal::midiPorts[track->outPort()]; bool isDrum = track->type() == MusECore::Track::DRUM; bool isNewDrum = track->type() == MusECore::Track::NEW_DRUM; bool isMidi = track->type() == MusECore::Track::MIDI; MusECore::MidiCtrlValListList* cll = port->controller(); - - val = 0; - num = 0; - int note = -1; + int channel = track->outChannel(); + MusECore::MidiInstrument* instr = port->instrument(); + MusECore::MidiControllerList* mcl = instr->controller(); + int val = 0; + int ev_num = 0; + int num = 0; + int ev_cnum = 0; + int ev_note = -1; if (!event.empty()) { - num = event.dataA(); + ev_num = event.dataA(); + num = ev_num; + ev_cnum = ev_num; val = event.dataB(); - if(port->drumController(num)) + if(port->drumController(ev_num)) { + ev_cnum |= 0xff; if(isDrum) - num = (num & ~0xff) | MusEGlobal::drumMap[num & 0xff].anote; - note = num & 0xff; + num = (ev_num & ~0xff) | MusEGlobal::drumMap[ev_num & 0xff].anote; + ev_note = ev_num & 0xff; } } - ///pop = new QMenu(this); - //pop->setCheckable(false); //not necessary in Qt4 - + MusECore::MidiController* mc = port->midiController(ev_num); + ctrlList->clear(); ctrlList->setSelectionMode(QAbstractItemView::SingleSelection); - // - // populate list of available controller - // + //--------------------------------------------------- + // build list of midi controllers for current + // MusECore::MidiPort/channel + //--------------------------------------------------- - std::list<QString> sList; - typedef std::list<QString>::iterator isList; + std::list<CI> sList; + typedef std::list<CI>::iterator isList; + std::set<int> already_added_nums; for (MusECore::iMidiCtrlValList it = cll->begin(); it != cll->end(); ++it) { MusECore::MidiCtrlValList* cl = it->second; - int clnum = cl->num(); - - // dont show drum specific controller if not a drum track - //if ((num & 0xff) == 0xff) { // REMOVE Tim. Or keep. - // if (!isDrum) - // continue; - // } -// int rnum = num; -// if(port->drumController(num)) -// { -// rnum |= 0xff; -// if() -// continue; -// } - - -// FIXME: TODO: Finish this stuff off. Use items' data member for control number. - - MusECore::MidiController* c = port->midiController(clnum); - //int cnum = c->num(); - //if(c->isPerNoteController()) - //{ - if(((isDrum || isNewDrum) && !(c->showInTracks() & MusECore::MidiController::ShowInDrum)) || - (isMidi && !(c->showInTracks() & MusECore::MidiController::ShowInMidi))) - continue; - //} - - - { + int ch = it->first >> 24; + if(ch != channel) + continue; + MusECore::MidiController* c = port->midiController(cl->num()); + bool isDrumCtrl = (c->isPerNoteController()); + int show = c->showInTracks(); + int cnum = c->num(); + int clnum = cl->num(); isList i = sList.begin(); for (; i != sList.end(); ++i) { - if (*i == c->name()) + if (i->num == cnum) break; } - if (i == sList.end()) - sList.push_back(c->name()); - } - } - MusECore::MidiController* mc = port->midiController(num); - int idx = 0; - int selectionIndex = 0; - for (isList i = sList.begin(); i != sList.end(); ++i, ++idx) { - ctrlList->addItem(*i); - if (mc->name() == *i) - selectionIndex = idx; + + if (i == sList.end()) { + bool used = (clnum == num); + bool off = cl->hwVal() == MusECore::CTRL_VAL_UNKNOWN; // Does it have a value or is it 'off'? + // Filter if not used and off. But if there's something there, we must show it. + //if(!used && off && + if(!used && //off && + (((isDrumCtrl || isNewDrum) && !(show & MusECore::MidiController::ShowInDrum)) || + (isMidi && !(show & MusECore::MidiController::ShowInMidi)))) + continue; + bool isinstr = mcl->find(cnum) != mcl->end(); + // Need to distinguish between global default controllers and + // instrument defined controllers. Instrument takes priority over global + // ie they 'overtake' definition of a global controller such that the + // global def is no longer available. + //sList.push_back(CI(num, + sList.push_back(CI(cnum, + isinstr ? MusECore::midiCtrlNumString(cnum, true) + c->name() : MusECore::midiCtrlName(cnum, true), + used, off, isinstr)); + already_added_nums.insert(num); + } } - ctrlList->item(selectionIndex)->setSelected(true); + // Add instrument-defined controllers: + QListWidgetItem* sel_item = 0; + for (isList i = sList.begin(); i != sList.end(); ++i) + { + // Filter if not used and off. But if there's something there, we must show it. + if(!i->instrument && !i->used && i->off) + continue; + QListWidgetItem* item = new QListWidgetItem(i->s, ctrlList); + item->setData(Qt::UserRole, i->num); + if(i->num == ev_cnum) + sel_item = item; + } + if(sel_item) + ctrlList->setCurrentItem(sel_item); + valSlider->setRange(mc->minVal(), mc->maxVal()); valSpinBox->setRange(mc->minVal(), mc->maxVal()); @@ -696,10 +624,10 @@ EditCtrlDialog::EditCtrlDialog(int tick, const MusECore::Event& event, if(!event.empty()) { - if(num == MusECore::CTRL_PROGRAM) + if(ev_num == MusECore::CTRL_PROGRAM) { widgetStack->setCurrentIndex(1); - updatePatch(); + updatePatch(val); } else { @@ -710,13 +638,17 @@ EditCtrlDialog::EditCtrlDialog(int tick, const MusECore::Event& event, { noteSpinBox->setVisible(true); noteSpinBox->setEnabled(true); - if(note != -1) - noteSpinBox->setValue(note); + noteLabel->setVisible(true); + noteLabel->setEnabled(true); + if(ev_note != -1) + noteSpinBox->setValue(ev_note); } else { noteSpinBox->setEnabled(false); noteSpinBox->setVisible(false); + noteLabel->setEnabled(false); + noteLabel->setVisible(false); } } } @@ -724,7 +656,10 @@ EditCtrlDialog::EditCtrlDialog(int tick, const MusECore::Event& event, { noteSpinBox->setEnabled(false); noteSpinBox->setVisible(false); - ctrlListClicked(ctrlList->selectedItems()[0]); + noteLabel->setEnabled(false); + noteLabel->setVisible(false); + if(sel_item) + ctrlListClicked(sel_item); } connect(ctrlList, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(ctrlListClicked(QListWidgetItem*))); connect(buttonNewController, SIGNAL(clicked()), SLOT(newController())); @@ -759,86 +694,61 @@ void EditCtrlDialog::newController() MusECore::MidiCtrlValListList* cll = port->controller(); int channel = track->outChannel(); - //int nn = 0; for (MusECore::iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { - MusECore::MidiController* c = ci->second; - int num = c->num(); + int cnum = c->num(); int show = c->showInTracks(); - if(((isDrum || isNewDrum) && !(show & MusECore::MidiController::ShowInDrum)) || (isMidi && !(show & MusECore::MidiController::ShowInMidi))) continue; - if(c->isPerNoteController()) - { - if (isDrum) - num = (num & ~0xff) | MusEGlobal::drumMap[noteSpinBox->value()].anote; - else if ((isNewDrum || isMidi)) - num = (num & ~0xff) | noteSpinBox->value(); - else // dont show drum specific controller if not a drum track - continue; - } - // If it's not already in the parent menu... - if(cll->find(channel, num) == cll->end()) - { - //ctrlSubPop->addAction(MusECore::midiCtrlNumString(num, true) + ci->second->name())->setData(num); - QAction* act = pup->addAction(MusECore::midiCtrlNumString(num, true) + c->name()); - act->setData(num); + int idx = 0; + for(; idx < ctrlList->count(); ++idx) { + if(ctrlList->item(idx)->data(Qt::UserRole).toInt() == cnum) + break; + } + if(idx >= ctrlList->count()) { + QAction* act = pup->addAction(MusECore::midiCtrlNumString(cnum, true) + c->name()); + act->setData(cnum); } - -// REMOVE Tim. -// if(cll->find(channel, ci->second->num()) == cll->end()) -// { -// QAction* act = pup->addAction(ci->second->name()); -// act->setData(nn); -// ++nn; -// } } -// QAction* rv = pup->exec(buttonNewController->mapToGlobal(QPoint(0,0))); QAction* act = pup->exec(buttonNewController->mapToGlobal(QPoint(0,0))); if (act && act->data().toInt() != -1) { - //QString s = rv->text(); // REMOVE Tim. int rv = act->data().toInt(); - int num = rv; - if(port->drumController(rv)) - num |= 0xff; + int cnum = rv; for (MusECore::iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { MusECore::MidiController* mc = ci->second; - //if (mc->name() == s) { // REMOVE Tim. - if (mc->num() == num) { - //if(cll->find(channel, mc->num()) == cll->end()) // REMOVE Tim. - if(cll->find(channel, rv) == cll->end()) + if (mc->num() == cnum) { + // Create a new controller list if it does not exist. + // FIXME: Sorry no per-pitch controller lists created here + // (meaning you should only create one 'new' one at a time) + // because the user has not had a chance to choose a pitch yet. + // They are handled in accept(), where there are more checks and creations. + if(!mc->isPerNoteController() && cll->find(channel, rv) == cll->end()) { - //MusECore::MidiCtrlValList* vl = new MusECore::MidiCtrlValList(mc->num()); // REMOVE Tim. MusECore::MidiCtrlValList* vl = new MusECore::MidiCtrlValList(rv); cll->add(channel, vl); } int idx = 0; - for (; idx < ctrlList->count() ;++idx) { // p4.0.25 Fix segfault - //QString str = ctrlList->item(idx)->text(); // REMOVE Tim. - int item_data = ctrlList->item(idx)->data(Qt::UserRole).toInt(); - //if (s == str) - if (item_data == num) + for (; idx < ctrlList->count() ;++idx) { + QListWidgetItem* item = ctrlList->item(idx); + int item_data = item->data(Qt::UserRole).toInt(); + if(item_data == cnum) { - ctrlList->item(idx)->setSelected(true); - ctrlListClicked(ctrlList->item(idx)); + ctrlList->setCurrentItem(item); + ctrlListClicked(item); break; } } - if (idx >= ctrlList->count()) { // p4.0.25 Fix segfault - //ctrlList->addItem(s); // REMOVE Tim. + if (idx >= ctrlList->count()) { QListWidgetItem* new_item = new QListWidgetItem(act->text(), ctrlList); - new_item->setData(Qt::UserRole, num); - //ctrlList->addItem(new_item); - ctrlList->item(idx)->setSelected(true); - ctrlListClicked(ctrlList->item(idx)); + new_item->setData(Qt::UserRole, cnum); + ctrlList->setCurrentItem(new_item); + ctrlListClicked(new_item); break; } - - break; } } @@ -851,65 +761,67 @@ void EditCtrlDialog::newController() void EditCtrlDialog::ctrlListClicked(QListWidgetItem* item) { - if (item == 0) - return; - QString s(item->text()); + if(item == 0) + return; + int cnum = item->data(Qt::UserRole).toInt(); + MusECore::MidiTrack* track = part->track(); + int portn = track->outPort(); + MusECore::MidiPort* port = &MusEGlobal::midiPorts[portn]; + MusECore::MidiController* c = port->midiController(cnum); + int val; + if (cnum == MusECore::CTRL_PROGRAM) { + widgetStack->setCurrentIndex(1); + + val = c->initVal(); + if(val == MusECore::CTRL_VAL_UNKNOWN) + val = 0; + updatePatch(val); + } + else { + widgetStack->setCurrentIndex(0); + if(c->isPerNoteController()) + { + noteSpinBox->setEnabled(true); + noteSpinBox->setVisible(true); + noteLabel->setEnabled(true); + noteLabel->setVisible(true); + } + else + { + noteSpinBox->setEnabled(false); + noteSpinBox->setVisible(false); + noteLabel->setEnabled(false); + noteLabel->setVisible(false); + } + valSlider->setRange(c->minVal(), c->maxVal()); + valSpinBox->setRange(c->minVal(), c->maxVal()); + controllerName->setText(c->name()); + val = c->initVal(); - MusECore::MidiTrack* track = part->track(); - int portn = track->outPort(); - MusECore::MidiPort* port = &MusEGlobal::midiPorts[portn]; - MusECore::MidiCtrlValListList* cll = port->controller(); - - MusECore::iMidiCtrlValList i; - for (i = cll->begin(); i != cll->end(); ++i) { - MusECore::MidiCtrlValList* cl = i->second; - num = cl->num(); - MusECore::MidiController* c = port->midiController(num); - if (s == c->name()) { - if (num == MusECore::CTRL_PROGRAM) { - widgetStack->setCurrentIndex(1); - - val = c->initVal(); - if(val == MusECore::CTRL_VAL_UNKNOWN) - val = 0; - updatePatch(); - } - else { - widgetStack->setCurrentIndex(0); - valSlider->setRange(c->minVal(), c->maxVal()); - valSpinBox->setRange(c->minVal(), c->maxVal()); - controllerName->setText(s); - val = c->initVal(); - - if(val == MusECore::CTRL_VAL_UNKNOWN || val == 0) - { - switch(num) - { - case MusECore::CTRL_PANPOT: - val = 64 - c->bias(); - break; - case MusECore::CTRL_VOLUME: - val = 100; - break; - default: - val = 0; - break; - } - } - valSlider->setValue(val); - } - break; - } + if(val == MusECore::CTRL_VAL_UNKNOWN || val == 0) + { + switch(cnum) + { + case MusECore::CTRL_PANPOT: + val = 64 - c->bias(); + break; + case MusECore::CTRL_VOLUME: + val = 100; + break; + default: + val = 0; + break; + } + } + valSlider->setValue(val); } - if (i == cll->end()) - printf("controller %s not found!\n", s.toLatin1().constData()); } //--------------------------------------------------------- // updatePatch //--------------------------------------------------------- -void EditCtrlDialog::updatePatch() +void EditCtrlDialog::updatePatch(int val) { MusECore::MidiTrack* track = part->track(); int port = track->outPort(); @@ -962,8 +874,7 @@ void EditCtrlDialog::instrPopup() QAction* rv = pup->exec(patchName->mapToGlobal(QPoint(10,5))); if (rv) { - val = rv->data().toInt(); - updatePatch(); + updatePatch(rv->data().toInt()); } delete pup; @@ -992,8 +903,8 @@ void EditCtrlDialog::programChanged() else prog = 0xff; - val = (hb << 16) + (lb << 8) + prog; - updatePatch(); + int val = (hb << 16) + (lb << 8) + prog; + updatePatch(val); } } // namespace MusEGui diff --git a/muse2/muse/liste/editevent.h b/muse2/muse/liste/editevent.h index cd02c82e..0674fe30 100644 --- a/muse2/muse/liste/editevent.h +++ b/muse2/muse/liste/editevent.h @@ -112,12 +112,8 @@ class EditSysexDialog : public QDialog, public Ui::EditSysexDialogBase { class EditCtrlDialog : public QDialog, public Ui::EditCtrlBase { Q_OBJECT - int num; // controller number - int val; // controller value (for prog. changes) - const MusECore::MidiPart* part; - - void updatePatch(); + void updatePatch(int val); private slots: void ctrlListClicked(QListWidgetItem*); @@ -128,7 +124,6 @@ class EditCtrlDialog : public QDialog, public Ui::EditCtrlBase { protected: QGridLayout* layout; - public: EditCtrlDialog(int tick, const MusECore::Event&, const MusECore::MidiPart*, QWidget* parent=0); @@ -169,49 +164,6 @@ class EditMetaDialog : public EditEventDialog { virtual MusECore::Event event(); }; -//--------------------------------------------------------- -// EditCAfterDialog -//--------------------------------------------------------- - -class EditCAfterDialog : public EditEventDialog { - Q_OBJECT - - Awl::PosEdit* epos; - MusEGui::IntLabel* il2; - - protected: - QGridLayout* layout; - - public: - EditCAfterDialog(int tick, const MusECore::Event&, - QWidget* parent=0); - static MusECore::Event getEvent(int tick, const MusECore::Event&, - QWidget* parent = 0); - virtual MusECore::Event event(); - }; - -//--------------------------------------------------------- -// EditPAfterDialog -//--------------------------------------------------------- - -class EditPAfterDialog : public EditEventDialog { - Q_OBJECT - - Awl::PosEdit* epos; - MusEGui::PitchEdit* pl; - MusEGui::IntLabel* il2; - - protected: - QGridLayout* layout; - - public: - EditPAfterDialog(int tick, const MusECore::Event&, - QWidget* parent=0); - static MusECore::Event getEvent(int tick, const MusECore::Event&, - QWidget* parent = 0); - virtual MusECore::Event event(); - }; - } // namespace MusEGui #endif diff --git a/muse2/muse/liste/listedit.cpp b/muse2/muse/liste/listedit.cpp index d6bf894a..52958e3c 100644 --- a/muse2/muse/liste/listedit.cpp +++ b/muse2/muse/liste/listedit.cpp @@ -213,35 +213,10 @@ void ListEdit::songChanged(MusECore::SongChangedFlags_t type) } liste->setSortingEnabled(false); if (type == SC_SELECTION) { - - - // DELETETHIS or clean up or whatever? // BUGFIX: I found the keyboard modifier states affect how QTreeWidget::setCurrentItem() operates. // So for example (not) holding shift while lassoo-ing notes in piano roll affected // whether multiple items were selected in this event list editor! // Also blockSignals() definitely required - was messing up selections. p4.0.18 Tim. - /* - bool update = false; - QTreeWidgetItem* ci = 0; - for (int row = 0; row < liste->topLevelItemCount(); ++row) { - QTreeWidgetItem* i = liste->topLevelItem(row); - if (i->isSelected() ^ ((EventListItem*)i)->event.selected()) - { - i->setSelected(((EventListItem*)i)->event.selected()); - if (i->isSelected()) - ci = i; - update = true; - } - } - if (update) - { - if (ci) - { - liste->setCurrentItem(ci); - } - //liste->update(); - } - */ bool ci_done = false; liste->blockSignals(true); // Go backwards to avoid QTreeWidget::setCurrentItem() dependency on KB modifiers! @@ -339,6 +314,8 @@ QString EventListItem::text(int col) const case MusECore::MidiController::NRPN: cs = "NRPN"; break; case MusECore::MidiController::Pitch: cs = "Pitch"; break; case MusECore::MidiController::Program: cs = "Program"; break; + case MusECore::MidiController::PolyAftertouch: cs = "PolyAftertouch"; break; + case MusECore::MidiController::Aftertouch: cs = "Aftertouch"; break; case MusECore::MidiController::RPN14: cs = "RPN14"; break; case MusECore::MidiController::NRPN14: cs = "NRPN14"; break; default: cs = "Ctrl?"; break; @@ -369,12 +346,6 @@ QString EventListItem::text(int col) const } s = QString("SysEx"); break; - case MusECore::PAfter: - s = QString("PoAT"); - break; - case MusECore::CAfter: - s = QString("ChAT"); - break; case MusECore::Meta: commentLabel = midiMetaComment(event); s = QString("Meta"); @@ -389,7 +360,7 @@ QString EventListItem::text(int col) const s.setNum(part->track()->outChannel() + 1); break; case 4: - if (event.isNote() || event.type() == MusECore::PAfter) + if (event.isNote()) s = MusECore::pitch2string(event.dataA()); else if (event.type() == MusECore::Controller) s.setNum(event.dataA() & 0xffff); // mask off type bits @@ -479,15 +450,11 @@ ListEdit::ListEdit(MusECore::PartList* pl) insertSysEx = new QAction(QIcon(*sysexIcon), tr("insert SysEx"), insertItems); insertCtrl = new QAction(QIcon(*ctrlIcon), tr("insert Ctrl"), insertItems); insertMeta = new QAction(QIcon(*metaIcon), tr("insert Meta"), insertItems); - insertCAfter = new QAction(QIcon(*cafterIcon), tr("insert Channel Aftertouch"), insertItems); - insertPAfter = new QAction(QIcon(*pafterIcon), tr("insert Poly Aftertouch"), insertItems); connect(insertNote, SIGNAL(activated()), SLOT(editInsertNote())); connect(insertSysEx, SIGNAL(activated()), SLOT(editInsertSysEx())); connect(insertCtrl, SIGNAL(activated()), SLOT(editInsertCtrl())); connect(insertMeta, SIGNAL(activated()), SLOT(editInsertMeta())); - connect(insertCAfter, SIGNAL(activated()), SLOT(editInsertCAfter())); - connect(insertPAfter, SIGNAL(activated()), SLOT(editInsertPAfter())); //---------Pulldown Menu---------------------------- @@ -717,53 +684,6 @@ void ListEdit::editInsertMeta() } //--------------------------------------------------------- -// editInsertCAfter -//--------------------------------------------------------- - -void ListEdit::editInsertCAfter() - { - if(!curPart) - return; - - MusECore::Event event = EditCAfterDialog::getEvent(curPart->tick(), MusECore::Event(), this); - if (!event.empty()) { - //No events before beginning of part + take Part offset into consideration - unsigned tick = event.tick(); - if (tick < curPart->tick()) - tick = 0; - else - tick-= curPart->tick(); - event.setTick(tick); - // Indicate do undo, and do not handle port controller values. - MusEGlobal::audio->msgAddEvent(event, curPart, true, false, false); - } - } - -//--------------------------------------------------------- -// editInsertPAfter -//--------------------------------------------------------- - -void ListEdit::editInsertPAfter() - { - if(!curPart) - return; - - MusECore::Event ev; - MusECore::Event event = EditPAfterDialog::getEvent(curPart->tick(), ev, this); - if (!event.empty()) { - //No events before beginning of part + take Part offset into consideration - unsigned tick = event.tick(); - if (tick < curPart->tick()) - tick = 0; - else - tick-= curPart->tick(); - event.setTick(tick); - // Indicate do undo, and do not handle port controller values. - MusEGlobal::audio->msgAddEvent(event, curPart, true, false, false); - } - } - -//--------------------------------------------------------- // editEvent //--------------------------------------------------------- @@ -781,12 +701,6 @@ void ListEdit::editEvent(MusECore::Event& event, MusECore::MidiPart* part) case MusECore::Sysex: nevent = EditSysexDialog::getEvent(tick, event, this); break; - case MusECore::PAfter: - nevent = EditPAfterDialog::getEvent(tick, event, this); - break; - case MusECore::CAfter: - nevent = EditCAfterDialog::getEvent(tick, event, this); - break; case MusECore::Meta: nevent = EditMetaDialog::getEvent(tick, event, this); break; @@ -1025,8 +939,6 @@ void ListEdit::initShortcuts() insertSysEx->setShortcut(shortcuts[SHRT_LE_INS_SYSEX].key); insertCtrl->setShortcut(shortcuts[SHRT_LE_INS_CTRL].key); insertMeta->setShortcut(shortcuts[SHRT_LE_INS_META].key); - insertCAfter->setShortcut(shortcuts[SHRT_LE_INS_CHAN_AFTERTOUCH].key); - insertPAfter->setShortcut(shortcuts[SHRT_LE_INS_POLY_AFTERTOUCH].key); } //--------------------------------------------------------- diff --git a/muse2/muse/liste/listedit.h b/muse2/muse/liste/listedit.h index 472ba7b8..5ab4faf7 100644 --- a/muse2/muse/liste/listedit.h +++ b/muse2/muse/liste/listedit.h @@ -68,15 +68,13 @@ class ListEdit : public MidiEditor { virtual void closeEvent(QCloseEvent*); virtual void keyPressEvent(QKeyEvent*); void initShortcuts(); - QAction *insertNote, *insertSysEx, *insertCtrl, *insertMeta, *insertCAfter, *insertPAfter; + QAction *insertNote, *insertSysEx, *insertCtrl, *insertMeta; private slots: void editInsertNote(); void editInsertSysEx(); void editInsertCtrl(); void editInsertMeta(); - void editInsertCAfter(); - void editInsertPAfter(); void editEvent(MusECore::Event&, MusECore::MidiPart*); void selectionChanged(); void doubleClicked(QTreeWidgetItem*); |