void AudioPortConfig::routingChanged() { //--------------------------------------------------- // populate lists //--------------------------------------------------- routeList->clear(); newSrcList->clear(); newDstList->clear(); tracksList->clear(); btnConnectOut->setEnabled(false); connectButton->setEnabled(false); removeButton->setEnabled(false); TrackList* tl = song->tracks(); for (ciTrack i = tl->begin(); i != tl->end(); ++i) { if ((*i)->isMidiTrack()) continue; AudioTrack* track = (AudioTrack*) (*i); if (track->type() == Track::WAVE_OUTPUT_HELPER || track->type() == Track::WAVE_INPUT_HELPER) { for (int channel = 0; channel < track->channels(); ++channel) { Route r(track, channel); tracksList->addItem(r.name()); } } else tracksList->addItem(Route(track, -1).name()); } if(selectedIndex < tracksList->count()) tracksList->setCurrentRow(selectedIndex, QItemSelectionModel::ClearAndSelect); //if(_selected) // setSelected(_selected->name()); }
void AudioPortConfig::trackSelectionChanged() { routeList->clear(); newSrcList->clear(); newDstList->clear(); QListWidgetItem* titem = tracksList->currentItem(); AudioTrack* atrack = (AudioTrack*)song->findTrack(titem->text()); if(atrack) { _selected = atrack; selectedIndex = tracksList->row(titem); //TrackList* tl = song->tracks(); //for(iTrack t = tl->begin(); t != tl->end(); ++t) //{ // if((*t)->isMidiTrack()) // continue; // AudioTrack* track = (AudioTrack*) (*t); // if(track->name() == atrack->name()) // continue; //You cant connect a track to itself //int channels = track->channels(); switch (atrack->type()) { case Track::WAVE_OUTPUT_HELPER:/*{{{*/ for(iTrack t = song->tracks()->begin(); t != song->tracks()->end(); ++t) { if((*t)->isMidiTrack()) continue; AudioTrack* track = (AudioTrack*) (*t); if(track->name() == atrack->name() || track->type() == Track::WAVE_OUTPUT_HELPER) continue; //You cant connect a track to itself //for (int channel = 0; channel < track->channels(); ++channel) //{ Route r(track, -1); newSrcList->addItem(r.name()); //} } insertInputs(); //newDstList->addItem(Route(track, -1).name()); break; case Track::WAVE_INPUT_HELPER: for(iTrack t = song->tracks()->begin(); t != song->tracks()->end(); ++t) { if((*t)->isMidiTrack()) continue; AudioTrack* track = (AudioTrack*) (*t); if(track->name() == atrack->name()) continue; //You cant connect a track to itself switch(track->type()) { case Track::WAVE_OUTPUT_HELPER: case Track::WAVE: newDstList->addItem(Route(track, -1).name()); break; default: break; } } insertOutputs(); break; case Track::WAVE: for(iTrack t = song->tracks()->begin(); t != song->tracks()->end(); ++t) { if((*t)->isMidiTrack()) continue; AudioTrack* track = (AudioTrack*) (*t); if(track->name() == atrack->name()) continue; //You cant connect a track to itself if(track->type() == Track::WAVE_INPUT_HELPER) { newSrcList->addItem(Route(track, -1).name()); } else if(track->type() == Track::WAVE_OUTPUT_HELPER) { newDstList->addItem(Route(track, -1).name()); } } break; default: break;/*}}}*/ } //} QTreeWidgetItem* widgetItem; const RouteList* rl = atrack->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { QString src(""); if (atrack->type() == Track::WAVE_OUTPUT_HELPER) { widgetItem = new QTreeWidgetItem(routeList, QStringList() << src << QString("") << atrack->name() << r->name() << QString::number(r->channel), Track::WAVE_OUTPUT_HELPER); } else { widgetItem = new QTreeWidgetItem(routeList, QStringList() << src << QString("") << atrack->name() << r->name() << QString::number(0), Track::WAVE_OUTPUT_HELPER); } widgetItem->setTextAlignment(1, Qt::AlignHCenter); widgetItem->setTextAlignment(4, Qt::AlignHCenter); } const RouteList* rli = atrack->inRoutes(); for (ciRoute ri = rli->begin(); ri != rli->end(); ++ri) { QString src(""); if (atrack->type() == Track::WAVE_INPUT_HELPER) { widgetItem = new QTreeWidgetItem(routeList, QStringList() << ri->name() << QString::number(ri->channel) << atrack->name() << src << QString(""), Track::WAVE_INPUT_HELPER); } else { widgetItem = new QTreeWidgetItem(routeList, QStringList() << ri->name() << QString::number(0) << atrack->name() << src << QString(""), Track::WAVE_INPUT_HELPER); } widgetItem->setTextAlignment(1, Qt::AlignHCenter); widgetItem->setTextAlignment(4, Qt::AlignHCenter); } routeSelectionChanged(); // init remove button srcSelectionChanged(); // init select button } }