diff options
| -rw-r--r-- | muse/muse/mixer/mixer.cpp | 6 | ||||
| -rw-r--r-- | muse/muse/mixer/mstrip.cpp | 42 | 
2 files changed, 20 insertions, 28 deletions
| diff --git a/muse/muse/mixer/mixer.cpp b/muse/muse/mixer/mixer.cpp index 3a84ca12..d22aa6da 100644 --- a/muse/muse/mixer/mixer.cpp +++ b/muse/muse/mixer/mixer.cpp @@ -298,6 +298,12 @@ void Mixer::songChanged(int flags)                    action |= STRIP_REMOVED;              if (flags & SC_TRACK_INSERTED)                    action |= STRIP_INSERTED; +            if (flags &SC_ROUTE) { +                  // update if midi channel gets conncted/disconnected +                  // delay update +                  mustUpdateMixer = true; +                  return; +                  }              }        if (action != NO_UPDATE)              updateMixer(action); diff --git a/muse/muse/mixer/mstrip.cpp b/muse/muse/mixer/mstrip.cpp index 7ed22d1f..9173509f 100644 --- a/muse/muse/mixer/mstrip.cpp +++ b/muse/muse/mixer/mstrip.cpp @@ -614,58 +614,44 @@ void MidiStrip::iRoutePressed()  void MidiStrip::oRoutePressed()        { -      QMenu* pup = new QMenu(oR); -      pup->addSeparator()->setText(tr("OutputPorts")); +      QMenu pup(oR); +      pup.setSeparatorsCollapsible(false); +      pup.addSeparator()->setText(tr("OutputPorts"));        RouteList* orl = track->outRoutes();        MidiOutPortList* mpl = song->midiOutPorts();        int pn = 0;        for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i, ++pn) {              MidiOutPort* op = *i; -            QMenu* m = pup->addMenu(op->name()); +            QMenu* m = pup.addMenu(op->name());              m->addSeparator()->setText(tr("Channel"));              for (int channel = 0; channel < MIDI_CHANNELS; ++channel) {                    QString s;                    s.setNum(channel+1); -                  QMap<QString, QVariant> data; -                  QAction* action = m->addAction(s); //int id = m->insertItem(s, pn * 16 + channel); -                  data["was_checked"] = false; -                  data["trackid"] = pn * 16 + channel; -                  action->setData(data); - +                  QAction* action = m->addAction(s); +                  action->setCheckable(true);                    MidiChannel* mc = op->channel(channel); -                  Route r(mc, -1, Route::TRACK); +                  Route dst(mc, -1, Route::TRACK); +                  action->setData(QVariant::fromValue(dst));                    for (iRoute ir = orl->begin(); ir != orl->end(); ++ir) { -                        if (r == *ir) { -                              action->setCheckable(true); +                        if (dst == *ir) {                                action->setChecked(true); -                              data["was_checked"] = true; -                              action->setData(data);                                break;                                }                          }                    }              } -      QAction* n = pup->exec(QCursor::pos()); +      QAction* n = pup.exec(QCursor::pos());        if (n) { -            QMap<QString, QVariant> data = n->data().toMap(); -            int trackid = data["trackid"].toInt(); -            int was_checked = data["was_checked"].toInt(); -            int portno  = trackid >> 4; -            int channel = trackid & 0xf; -            MidiOutPort* mp = mpl->index(portno); -            MidiChannel* mc = mp->channel(channel);              Route srcRoute(track, -1, Route::TRACK); -            Route dstRoute(mc, -1, Route::TRACK); +            Route dstRoute = n->data().value<Route>(); -            if (was_checked == 1) -                  audio->msgRemoveRoute(srcRoute, dstRoute); -            else +            if (n->isChecked())                    audio->msgAddRoute(srcRoute, dstRoute); - +            else +                  audio->msgRemoveRoute(srcRoute, dstRoute);              song->update(SC_ROUTE);              } -      delete pup;        oR->setDown(false);     // pup->exec() catches mouse release event        } | 
