diff options
-rw-r--r-- | muse2/ChangeLog | 8 | ||||
-rw-r--r-- | muse2/muse/app.cpp | 6 | ||||
-rw-r--r-- | muse2/muse/arranger/trackinfo.cpp | 43 | ||||
-rw-r--r-- | muse2/muse/mixer/astrip.cpp | 1272 | ||||
-rw-r--r-- | muse2/muse/mixer/astrip.h | 3 | ||||
-rw-r--r-- | muse2/muse/mixer/mstrip.cpp | 219 | ||||
-rw-r--r-- | muse2/muse/mixer/mstrip.h | 3 | ||||
-rw-r--r-- | muse2/muse/widgets/popupmenu.cpp | 4 |
8 files changed, 201 insertions, 1357 deletions
diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 47859942..ffb91b58 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,9 +1,9 @@ 06.11.2010 - Yipee! De retour aux les popup menus 'stay-open'. (Tim) - - Fixed PopupMenu class. - Work in progress. Currently midi trackinfo 'iR' button routing is complete. - TODO: Strip routing popups. Also, try to eliminate global routing menu map (gRoutingMenuMap) - and directly store the routes as QVariant action user data. Someone started this already... + - Fixed PopupMenu class. All routing popups done (midi trackinfo, midi strip, audio strip). + TODO: Fix midi 'toggle all'. Use routes as QVariant action user data (someone started this already)... + - Major cleanup of audio and midi strip comments, code. (A fresh start for your tired eyes, you guys...) + - Test OK so far with all track types. 04.11.2010 - Fixed LADSPA plugin dialog. TODO: fix sorting order. (Tim) - Fixed MenuTitleItem class. Fixed some usages of it (Jack popup routes, midi cfg routes). (Tim) diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 6ce85950..f0d622b7 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -2065,7 +2065,7 @@ void MusE::updateRouteMenus(Track* track, QObject* master) PopupMenu* pup = getRoutingPopupMenu(); - if(pup->actions().size() == 0) + if(pup->actions().isEmpty()) return; if(!pup->isVisible()) @@ -2127,7 +2127,7 @@ void MusE::routingPopupMenuActivated(Track* track, int n) { PopupMenu* pup = getRoutingPopupMenu(); - if(pup->actions().size() == 0) + if(pup->actions().isEmpty()) return; //MidiTrack* t = (MidiTrack*)track; @@ -2597,7 +2597,7 @@ PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) } */ - if(pup->actions().size() == 0) + if(pup->actions().isEmpty()) { gRoutingPopupMenuMaster = 0; //pup->clear(); diff --git a/muse2/muse/arranger/trackinfo.cpp b/muse2/muse/arranger/trackinfo.cpp index b23cead8..ef191b97 100644 --- a/muse2/muse/arranger/trackinfo.cpp +++ b/muse2/muse/arranger/trackinfo.cpp @@ -577,19 +577,9 @@ void Arranger::iInputPortChanged(const QString& s) //void Arranger::routingPopupMenuActivated(int n) void Arranger::routingPopupMenuActivated(QAction* act) { - //if(gRoutingPopupMenuMaster != this || !track || !track->isMidiTrack()) if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack()) return; - //if (n > 999) { - //if (n >= MIDI_PORTS * MIDI_CHANNELS) { // p3.3.50 - // for (int i = 0; i < MIDI_CHANNELS; i++) - //muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n-1000)); - // muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n - MIDI_PORTS * MIDI_CHANNELS)); // p3.3.50 - //} - //else { - ///muse->routingPopupMenuActivated(selected, n); - muse->routingPopupMenuActivated(selected, act->data().toInt()); - //} + muse->routingPopupMenuActivated(selected, act->data().toInt()); } #if 0 @@ -599,19 +589,9 @@ void Arranger::routingPopupMenuActivated(QAction* act) void Arranger::routingPopupViewActivated(const QModelIndex& mdi) { - //if(gRoutingPopupMenuMaster != this || !track || !track->isMidiTrack()) if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack()) return; - //if (n > 999) { - //if (n >= MIDI_PORTS * MIDI_CHANNELS) { // p3.3.50 - // for (int i = 0; i < MIDI_CHANNELS; i++) - //muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n-1000)); - // muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n - MIDI_PORTS * MIDI_CHANNELS)); // p3.3.50 - //} - //else { -/// muse->routingPopupMenuActivated(selected, n); - muse->routingPopupMenuActivated(selected, mdi.data().toInt()); - //} + muse->routingPopupMenuActivated(selected, mdi.data().toInt()); } #endif @@ -623,25 +603,17 @@ void Arranger::inRoutesPressed() { if(!selected) return; - - ///song->chooseMidiRoutes(midiTrackInfo->iRButton, (MidiTrack*)selected, false); - if(!selected->isMidiTrack()) return; - //song->chooseMidiRoutes(iR, (MidiTrack*)track, false); PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, false); //PopupView* pup = muse->prepareRoutingPopupView(selected, false); if(!pup) return; - //pup->disconnect(); - //gRoutingPopupMenuMaster = this; gRoutingPopupMenuMaster = midiTrackInfo; - //connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); //connect(pup, SIGNAL(activated(const QModelIndex&)), SLOT(routingPopupViewActivated(const QModelIndex&))); - // Nope, can't clear menu and mm list in there, sub-menus stay open. Never mind for now... connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); //connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupViewAboutToHide())); pup->popup(QCursor::pos()); @@ -658,24 +630,17 @@ void Arranger::outRoutesPressed() { if(!selected) return; - - ///song->chooseMidiRoutes(midiTrackInfo->oRButton, (MidiTrack*)selected, true); - if(!selected->isMidiTrack()) return; - //song->chooseMidiRoutes(iR, (MidiTrack*)track, false); PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, true); if(!pup) return; - //pup->disconnect(); - //gRoutingPopupMenuMaster = this; gRoutingPopupMenuMaster = midiTrackInfo; - connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); - // Nope, can't clear menu and mm list in there, sub-menus stay open. Never mind for now... + connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(QCursor::pos(), 0); + pup->popup(QCursor::pos()); midiTrackInfo->oRButton->setDown(false); return; } diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp index dfcd741c..12aefef0 100644 --- a/muse2/muse/mixer/astrip.cpp +++ b/muse2/muse/mixer/astrip.cpp @@ -24,6 +24,8 @@ #include <qpoint.h> #include <qevent.h> #include <qwidget.h> +#include <QVariant> +#include <QAction> //Added by qt3to4: //#include <Q3HBoxLayout> //#include <Q3GridLayout> @@ -64,6 +66,8 @@ MenuTitleItem::MenuTitleItem(const QString& ss, QWidget* parent) s = ss; // Don't allow to click on it. setEnabled(false); + // Just to be safe, set to -1 instead of default 0. + setData(-1); } QWidget* MenuTitleItem::createWidget(QWidget *parent) @@ -959,40 +963,29 @@ AudioStrip::AudioStrip(QWidget* parent, AudioTrack* at) static int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) { // totalInChannels is only used by syntis. - //int channels = (!isOutput || route_track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)route_track)->totalOutChannels() : ((AudioTrack*)route_track)->totalInChannels(); - //int channels = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels(); int toch = ((AudioTrack*)track)->totalOutChannels(); // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. if(track->channels() == 1) toch = 1; - // totalInChannels is only used by syntis. - ///int chans = (isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); - // Don't add the last stray mono route if the track is stereo. //if(route_track->channels() > 1 && (channel+1 == chans)) // return id; RouteList* rl = isOutput ? track->outRoutes() : track->inRoutes(); - QString s(route_track->name()); - //int trackchans = track->channels(); - //QString ns; + QAction* act; - //if(track->channels() > 1 && (channel+1 < channels)) - //if(track->channels() > 1) - //if(route_track->type() == Track::AUDIO_SOFTSYNTH && channels > 2 && track->channels() > 1) - ///if(track->type() == Track::AUDIO_SOFTSYNTH && chans > 2 && route_track->channels() > 1) - /// s += QString(" < [%1,%2]").arg(channel+1).arg(channel+2); + QString s(route_track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); + act = lb->addAction(s); + act->setData(id); + act->setCheckable(true); int ach = channel; int bch = -1; Route r(route_track, isOutput ? ach : bch, channels); - //Route r(route_track, channel); r.remoteChannel = isOutput ? bch : ach; @@ -1000,17 +993,6 @@ static int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channels == channels) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && - // (channel != -1 && ir->channel == channel) && (channels != -1 && ir->channels == channels)) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel) - //printf("addMenuItem: ir->type:%d ir->track:%s track:%s ir->channel:%d channel:%d ir->channels:%d channels:%d\n", - // ir->type, ir->track->name().latin1(), track->name().latin1(), ir->channel, channel, ir->channels, channels); - //if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == channel && ir->remoteChannel == r.remoteChannel) - //if(*ir == r) - //if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == channel && ir->channels == channels && ir->remoteChannel == r.remoteChannel) - if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->remoteChannel == r.remoteChannel) { int tcompch = r.channel; @@ -1027,11 +1009,9 @@ static int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int if(compchs == -1) compchs = isOutput ? track->channels() : ir->track->channels(); - //if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == r.channel && ir->channels == r.channels && ir->remoteChannel == r.remoteChannel) if(compch == tcompch && compchs == tcompchs) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); + act->setChecked(true); break; } } @@ -1050,24 +1030,7 @@ static int addAuxPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, i Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - } return id; } @@ -1083,24 +1046,7 @@ static int addInPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, in Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - } return id; } @@ -1116,24 +1062,7 @@ static int addOutPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, i Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - } return id; } @@ -1149,24 +1078,7 @@ static int addGroupPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - } return id; } @@ -1182,24 +1094,7 @@ static int addWavePorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - } return id; } @@ -1213,44 +1108,22 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, { RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + QAction* act; + SynthIList* al = song->syntis(); for (iSynthI i = al->begin(); i != al->end(); ++i) { Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, track, lb, r, id, mm, channel, channels); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - - //SynthI* synti = (SynthI*)track; - int toch = ((AudioTrack*)track)->totalOutChannels(); // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. if(track->channels() == 1) toch = 1; - //int chans = synti->totalOutChannels(); - //int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels(); // totalInChannels is only used by syntis. int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); - //int schans = synti->channels(); - //if(schans < chans) - // chans = schans; int tchans = (channels != -1) ? channels: t->channels(); if(tchans == 2) { @@ -1262,13 +1135,8 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, if(chans > 0) { - //QPopupMenu* chpup = new QPopupMenu(parent); - //PopupMenu* chpup = new PopupMenu(parent); - //PopupMenu* chpup = new PopupMenu(lb->parent()); - PopupMenu* chpup = new PopupMenu(); - //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); - lb->connect(chpup, SIGNAL(activated(int)), lb, SIGNAL(activated(int))); - chpup->setCheckable(true); + PopupMenu* chpup = new PopupMenu(lb); + chpup->setTitle(track->name()); for(int ch = 0; ch < chans; ++ch) { char buffer[128]; @@ -1276,7 +1144,9 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); else snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); - chpup->insertItem(QString(buffer), id); + act = chpup->addAction(QString(buffer)); + act->setData(id); + act->setCheckable(true); int ach = (channel == -1) ? ch : channel; int bch = (channel == -1) ? -1 : ch; @@ -1290,15 +1160,6 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - //if(ir->type == 0 && ir->track == track && ir->channels == channels) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel && - // ir->channels == channels && ir->remoteChannel == r.remoteChannel) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch && - // ir->remoteChannel == rt.remoteChannel) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel && - // ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel) - if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) { int tcompch = rt.channel; @@ -1317,7 +1178,7 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, if(compch == tcompch && compchs == tcompchs) { - chpup->setItemChecked(id, true); + act->setChecked(true); break; } } @@ -1325,7 +1186,7 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, ++id; } - lb->insertItem(track->name(), chpup); + lb->addMenu(chpup); } } return id; @@ -1343,43 +1204,23 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu toch = 1; // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. - //int chans = t->totalOutChannels(); // totalInChannels is only used by syntis. - //int chans = isOutput ? t->totalOutChannels() : t->totalInChannels(); - //int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? t->totalOutChannels() : t->totalInChannels(); int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? toch : t->totalInChannels(); - // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. - //if(t->channels() == 1) - // chans = 1; - if(chans > 1) - { - // pup->insertItem(new MenuTitleItem("<Mono>")); ddskrjo - //pup->insertSeparator(); - } + pup->addAction(new MenuTitleItem("<Mono>", pup)); // // If it's more than one channel, create a sub-menu. If it's just one channel, don't bother with a sub-menu... // - //QPopupMenu* chpup = pup; PopupMenu* chpup = pup; for(int ch = 0; ch < chans; ++ch) { // If more than one channel, create the sub-menu. if(chans > 1) - { - //chpup = new QPopupMenu(parent); - //chpup = new PopupMenu(parent); - //chpup = new PopupMenu(pup->parent()); - chpup = new PopupMenu(); - //connect(chpup, SIGNAL(activated(int)), strip, SLOT(oRouteMenuActivated(int))); - //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); - pup->connect(chpup, SIGNAL(activated(int)), pup, SIGNAL(activated(int))); - chpup->setCheckable(true); - } + chpup = new PopupMenu(pup); if(isOutput) { @@ -1387,42 +1228,19 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu { case Track::AUDIO_INPUT: - //id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput); id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); case Track::WAVE: case Track::AUDIO_GROUP: case Track::AUDIO_SOFTSYNTH: - //id = addOutPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput); id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); - //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput); id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); break; case Track::AUDIO_AUX: - //id = addOutPorts(parent, t, chpup, id, mm, ch, 1, isOutput); id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); break; default: break; - - /* - case Track::AUDIO_INPUT: - id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput); - case Track::WAVE: - case Track::AUDIO_GROUP: - case Track::AUDIO_SOFTSYNTH: - id = addOutPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput); - break; - case Track::AUDIO_AUX: - id = addOutPorts(parent, t, chpup, id, mm, ch, isOutput); - break; - default: - break; - */ } } else @@ -1431,58 +1249,24 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu { case Track::AUDIO_OUTPUT: - //id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addAuxPorts(parent, t, chpup, id, mm, ch, 1, isOutput); id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); id = addAuxPorts(t, chpup, id, mm, ch, 1, isOutput); - //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput); id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); break; case Track::WAVE: - //id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput); id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); break; case Track::AUDIO_SOFTSYNTH: case Track::AUDIO_GROUP: - //id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput); id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); - //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput); - //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput); id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); break; default: break; - - /* - case Track::AUDIO_OUTPUT: - id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput); - id = addInPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addAuxPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput); - break; - case Track::WAVE: - id = addInPorts(parent, t, chpup, id, mm, ch, isOutput); - break; - case Track::AUDIO_SOFTSYNTH: - case Track::AUDIO_GROUP: - id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput); - id = addInPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput); - id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput); - break; - default: - break; - */ } } @@ -1491,7 +1275,8 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu { char buffer[128]; snprintf(buffer, 128, "%s %d", pup->tr("Channel").latin1(), ch+1); - pup->insertItem(QString(buffer), chpup); + chpup->setTitle(QString(buffer)); + pup->addMenu(chpup); } } @@ -1502,55 +1287,38 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu // Ignore odd numbered left-over channels. //int schans = (chans & ~1) - 1; - pup->insertSeparator(); - //pup->insertItem(new MenuTitleItem("<Stereo>")); ddskrjo - //pup->insertSeparator(); + pup->addSeparator(); + pup->addAction(new MenuTitleItem("<Stereo>", pup)); // // If it's more than two channels, create a sub-menu. If it's just two channels, don't bother with a sub-menu... // - //QPopupMenu* chpup = pup; chpup = pup; if(chans <= 2) // Just do one iteration. chans = 1; - //for(int ch = 0; ch < schans; ++ch) for(int ch = 0; ch < chans; ++ch) { // If more than two channels, create the sub-menu. if(chans > 2) - { - //chpup = new QPopupMenu(parent); - //chpup = new PopupMenu(parent); - //chpup = new PopupMenu(pup->parent()); - chpup = new PopupMenu(); - //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); - pup->connect(chpup, SIGNAL(activated(int)), pup, SIGNAL(activated(int))); - chpup->setCheckable(true); - } + chpup = new PopupMenu(pup); if(isOutput) { switch(t->type()) { case Track::AUDIO_INPUT: - //id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput); id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); case Track::WAVE: case Track::AUDIO_GROUP: case Track::AUDIO_SOFTSYNTH: - //id = addOutPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput); id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput); id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); - //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput); id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); break; case Track::AUDIO_AUX: - //id = addOutPorts(parent, t, chpup, id, mm, ch, 2, isOutput); id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput); break; default: @@ -1562,32 +1330,20 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu switch(t->type()) { case Track::AUDIO_OUTPUT: - //id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addAuxPorts(parent, t, chpup, id, mm, ch, 2, isOutput); id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); id = addAuxPorts(t, chpup, id, mm, ch, 2, isOutput); - //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput); id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); break; case Track::WAVE: - //id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput); id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); break; case Track::AUDIO_SOFTSYNTH: case Track::AUDIO_GROUP: - //id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput); id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); - //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput); - //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput); id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); break; default: @@ -1600,7 +1356,8 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu { char buffer[128]; snprintf(buffer, 128, "%s %d,%d", pup->tr("Channel").latin1(), ch+1, ch+2); - pup->insertItem(QString(buffer), chpup); + chpup->setTitle(QString(buffer)); + pup->addMenu(chpup); } } } @@ -1616,38 +1373,19 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen { RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + QAction* act; SynthIList* al = song->syntis(); for (iSynthI i = al->begin(); i != al->end(); ++i) { Track* track = *i; if (t == track) continue; - //id = addMenuItem(parent, track, lb, r, id, mm, channel, channels); - - /* - QString s(track->name()); - //int it = lb->insertItem(s); - lb->insertItem(s, id); - for (iRoute ir = r->begin(); ir != r->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - if (ir->type == 0 && ir->track == track && ir->channels == channels) { - //lb->setItemChecked(it, true); - lb->setItemChecked(id, true); - break; - } - } - ++id; - */ - - //SynthI* synti = (SynthI*)track; int toch = ((AudioTrack*)track)->totalOutChannels(); // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. if(track->channels() == 1) toch = 1; - //int chans = synti->totalOutChannels(); - //int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels(); // totalInChannels is only used by syntis. int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); @@ -1666,55 +1404,30 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen if(chans > 0) { - //QPopupMenu* chpup = new QPopupMenu(parent); - //PopupMenu* chpup = new PopupMenu(parent); - //PopupMenu* chpup = new PopupMenu(lb->parent()); - PopupMenu* chpup = new PopupMenu(); - //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); - lb->connect(chpup, SIGNAL(activated(int)), lb, SIGNAL(activated(int))); - chpup->setCheckable(true); - + PopupMenu* chpup = new PopupMenu(lb); + chpup->setTitle(track->name()); if(chans > 1) - { - //chpup->insertItem(new MenuTitleItem("<Mono>")); ddskrjo - //pup->insertSeparator(); - } + chpup->addAction(new MenuTitleItem("<Mono>", chpup)); for(int ch = 0; ch < chans; ++ch) { char buffer[128]; - //if(tchans == 2) - // snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); - //else - snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); - chpup->insertItem(QString(buffer), id); + snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); + act = chpup->addAction(QString(buffer)); + act->setData(id); + act->setCheckable(true); - //int ach = (channel == -1) ? ch : channel; - //int bch = (channel == -1) ? -1 : ch; int ach = ch; int bch = -1; - //Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); Route rt(track, isOutput ? bch : ach, 1); - //Route rt(track, ch); - //rt.remoteChannel = -1; - //rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; rt.remoteChannel = isOutput ? ach : bch; mm.insert( pRouteMenuMap(id, rt) ); for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - //if(ir->type == 0 && ir->track == track && ir->channels == channels) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel && - // ir->channels == channels && ir->remoteChannel == r.remoteChannel) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch && - // ir->remoteChannel == rt.remoteChannel) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel && - // ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel) - if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) { int tcompch = rt.channel; @@ -1733,7 +1446,7 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen if(compch == tcompch && compchs == tcompchs) { - chpup->setItemChecked(id, true); + act->setChecked(true); break; } } @@ -1747,46 +1460,28 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen // Ignore odd numbered left-over channels. //int schans = (chans & ~1) - 1; - chpup->insertSeparator(); - //chpup->insertItem(new MenuTitleItem("<Stereo>")); ddskrjo - //pup->insertSeparator(); + chpup->addSeparator(); + chpup->addAction(new MenuTitleItem("<Stereo>", chpup)); for(int ch = 0; ch < chans; ++ch) { char buffer[128]; - //if(tchans == 2) - snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); - //else - // snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); - chpup->insertItem(QString(buffer), id); + snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); + act = chpup->addAction(QString(buffer)); + act->setData(id); + act->setCheckable(true); - //int ach = (channel == -1) ? ch : channel; - //int bch = (channel == -1) ? -1 : ch; int ach = ch; int bch = -1; - //Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); Route rt(track, isOutput ? bch : ach, 2); - //Route rt(track, ch); - //rt.remoteChannel = -1; - //rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; rt.remoteChannel = isOutput ? ach : bch; mm.insert( pRouteMenuMap(id, rt) ); for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) { - //if (ir->type == 0 && ir->track == track) { - //if(ir->type == 0 && ir->track == track && ir->channels == channels) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel && - // ir->channels == channels && ir->remoteChannel == r.remoteChannel) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch && - // ir->remoteChannel == rt.remoteChannel) - //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel && - // ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel) - - if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) { int tcompch = rt.channel; @@ -1805,7 +1500,7 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen if(compch == tcompch && compchs == tcompchs) { - chpup->setItemChecked(id, true); + act->setChecked(true); break; } } @@ -1814,7 +1509,7 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen } } - lb->insertItem(track->name(), chpup); + lb->addMenu(chpup); } } return id; @@ -1829,33 +1524,21 @@ void AudioStrip::iRoutePressed() //if(track->isMidiTrack() || (track->type() == Track::AUDIO_AUX) || (track->type() == Track::AUDIO_SOFTSYNTH)) if(!track || track->isMidiTrack() || track->type() == Track::AUDIO_AUX) { - //_isRoutingPopupMenuMaster = false; gRoutingPopupMenuMaster = 0; return; } QPoint ppt = QCursor::pos(); - //QPopupMenu* pup = new QPopupMenu(iR); - //PopupMenu* pup = new PopupMenu(iR); - //pup->setCheckable(true); - PopupMenu* pup = muse->getRoutingPopupMenu(); pup->disconnect(); AudioTrack* t = (AudioTrack*)track; RouteList* irl = t->inRoutes(); + QAction* act = 0; int gid = 0; - //int n; - ///RouteMenuMap mm; - - // Routes can't be re-read until the message sent from msgAddRoute1() - // has had time to be sent and actually affected the routes. - ///_redisplay: - - //QPopupMenu* pup = new QPopupMenu(iR); - //RouteList* irl = t->inRoutes(); + int id = 0; pup->clear(); gRoutingMenuMap.clear(); @@ -1865,20 +1548,15 @@ void AudioStrip::iRoutePressed() { case Track::AUDIO_INPUT: { - pup->setCheckable(true); - //int gid = 0; for(int i = 0; i < channel; ++i) { char buffer[128]; snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); - //MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); MenuTitleItem* titel = new MenuTitleItem(QString(buffer), pup); - //pup->insertItem(titel); //ddskrjo pup->addAction(titel); if(!checkAudioDevice()) { - ///delete pup; gRoutingPopupMenuMaster = 0; pup->clear(); gRoutingMenuMap.clear(); @@ -1888,8 +1566,11 @@ void AudioStrip::iRoutePressed() std::list<QString> ol = audioDevice->outputPorts(); for(std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - int id = pup->insertItem(*ip, (gid * 16) + i); - //Route dst(*ip, true, i); + id = gid * 16 + i; + act = pup->addAction(*ip); + act->setData(id); + act->setCheckable(true); + Route dst(*ip, true, i, Route::JACK_ROUTE); gRoutingMenuMap.insert( pRouteMenuMap(id, dst) ); ++gid; @@ -1897,13 +1578,13 @@ void AudioStrip::iRoutePressed() { if(*ir == dst) { - pup->setItemChecked(id, true); + act->setChecked(true); break; } } } if(i+1 != channel) - pup->insertSeparator(); + pup->addSeparator(); } } break; @@ -1912,43 +1593,26 @@ void AudioStrip::iRoutePressed() //case Track::AUDIO_GROUP: case Track::AUDIO_OUTPUT: - //gid = addWavePorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addGroupPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addAuxPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addSyntiPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = nonSyntiTrackAddSyntis(iR, t, pup, gid, gRoutingMenuMap, false); - //gid = nonSyntiTrackAddSyntis(this, iR, t, pup, gid, gRoutingMenuMap, false); gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); break; case Track::WAVE: - //gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); break; case Track::AUDIO_GROUP: - //gid = addWavePorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addGroupPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = addSyntiPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); - //gid = nonSyntiTrackAddSyntis(iR, t, pup, gid, gRoutingMenuMap, false); - //gid = nonSyntiTrackAddSyntis(this, iR, t, pup, gid, gRoutingMenuMap, false); gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); break; case Track::AUDIO_SOFTSYNTH: - //gid = addMultiChannelPorts(iR, t, pup, gid, gRoutingMenuMap, false); - //gid = addMultiChannelPorts(this, iR, t, pup, gid, gRoutingMenuMap, false); gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, false); break; default: - ///delete pup; gRoutingPopupMenuMaster = 0; pup->clear(); gRoutingMenuMap.clear(); @@ -1956,9 +1620,8 @@ void AudioStrip::iRoutePressed() return; } - if(pup->count() == 0) + if(pup->actions().isEmpty()) { - ///delete pup; gRoutingPopupMenuMaster = 0; gRoutingMenuMap.clear(); iR->setDown(false); @@ -1967,406 +1630,143 @@ void AudioStrip::iRoutePressed() gIsOutRoutingPopupMenu = false; gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(ppt, 0); + pup->popup(ppt); iR->setDown(false); - return; - - - - /* - //int n = pup->exec(QCursor::pos()); - // For some reason, after the first display, it won't redisplay at the same point if the menu is too high. - n = pup->exec(ppt, 0); - if(n != -1) - { - QString s(pup->text(n)); - - if(track->type() == Track::AUDIO_INPUT) - { - ///delete pup; - int chan = n & 0xf; - - Route srcRoute(s, false, -1, Route::JACK_ROUTE); - Route dstRoute(t, chan); - - srcRoute.channel = chan; - - iRoute iir = irl->begin(); - for(; iir != irl->end(); ++iir) - { - if(*iir == srcRoute) - break; - } - if(iir != irl->end()) - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - else - // connect - audio->msgAddRoute(srcRoute, dstRoute); - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - iR->setDown(false); // pup->exec() catches mouse release event - return; - - // p3.3.46 - ///goto _redisplay; - } - - iRouteMenuMap imm = mm.find(n); - if(imm == mm.end()) - { - delete pup; - iR->setDown(false); // pup->exec() catches mouse release event - return; - } - - //int chan = n >> 16; - //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. - //chan &= 0xffff; - //int chan = imm->second.channel; - //int chans = imm->second.channels; - - //Route srcRoute(s, false, -1); - //Route srcRoute(s, false, -1, Route::TRACK_ROUTE); - Route &srcRoute = imm->second; - - //Route dstRoute(t, -1); - //Route dstRoute(t, chan, chans); - Route dstRoute(t, imm->second.channel, imm->second.channels); - //Route dstRoute(t, imm->second.channel); - dstRoute.remoteChannel = imm->second.remoteChannel; - - iRoute iir = irl->begin(); - for (; iir != irl->end(); ++iir) { - if (*iir == srcRoute) - break; - } - if (iir != irl->end()) { - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.46 - //iR->setDown(false); // pup->exec() catches mouse release event - ///goto _redisplay; - - } - - delete pup; - iR->setDown(false); // pup->exec() catches mouse release event - */ - } -#if 0 //--------------------------------------------------------- -// updateRouteMenus +// routingPopupMenuActivated //--------------------------------------------------------- -void AudioStrip::updateRouteMenus() +void AudioStrip::routingPopupMenuActivated(QAction* act) { - //if(!_isRoutingPopupMenuMaster || track->isMidiTrack() || (track->type() == Track::AUDIO_AUX)) if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack()) return; - - ///QPopupMenu* pup = new QPopupMenu(oR); - // p3.3.47 - //if(!orpup) - // return; - //QPopupMenu* pup = muse->getORoutesPopup(); PopupMenu* pup = muse->getRoutingPopupMenu(); - if(pup->count() == 0) + if(pup->actions().isEmpty()) return; - //pup->setCheckable(true); AudioTrack* t = (AudioTrack*)track; RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); - - //int gid = 0; - //int n; - ///RouteMenuMap mm; - - //QPoint ppt = QCursor::pos(); + int n = act->data().toInt(); + if (n == -1) + return; - /* - iRoute iorl = orl->begin(); - for(; iorl != orl->end(); ++iorl) - { - iRouteMenuMap imm = ormm->begin(); - for(; imm != ormm->end(); ++imm) + if(gIsOutRoutingPopupMenu) + { + if(track->type() == Track::AUDIO_OUTPUT) { - if(*iorl == imm->second) - { - orpup->setItemChecked(imm->first, true); - break; - } + + int chan = n & 0xf; + + Route srcRoute(t, chan); + Route dstRoute(act->text(), true, -1, Route::JACK_ROUTE); + dstRoute.channel = chan; + + // check if route src->dst exists: + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + return; } - //if(imm == ormm->end()) - //{ - //} - } - //if (iorl == orl->end()) - //{ - //} - */ - - iRouteMenuMap imm = gRoutingMenuMap.begin(); - for(; imm != gRoutingMenuMap.end(); ++imm) - { - bool found = false; + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + return; + + Route srcRoute(t, imm->second.channel, imm->second.channels); + srcRoute.remoteChannel = imm->second.remoteChannel; + + Route &dstRoute = imm->second; + + // check if route src->dst exists: iRoute irl = rl->begin(); - for(; irl != rl->end(); ++irl) + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + else + { + if(track->type() == Track::AUDIO_INPUT) { - if(*irl == imm->second) + int chan = n & 0xf; + + Route srcRoute(act->text(), false, -1, Route::JACK_ROUTE); + Route dstRoute(t, chan); + + srcRoute.channel = chan; + + iRoute irl = rl->begin(); + for(; irl != rl->end(); ++irl) { - found = true; - break; + if(*irl == srcRoute) + break; } + if(irl != rl->end()) + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + else + // connect + audio->msgAddRoute(srcRoute, dstRoute); + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + return; } - pup->setItemChecked(imm->first, found); - } - - return; -} -#endif - -//--------------------------------------------------------- -// routingPopupMenuActivated -//--------------------------------------------------------- - -void AudioStrip::routingPopupMenuActivated(int n) -{ - if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack()) - return; - - PopupMenu* pup = muse->getRoutingPopupMenu(); - - //printf("AudioStrip::routingPopupMenuActivated n:%d count:%d\n", n, pup->count()); - - if(pup->count() == 0) - return; - AudioTrack* t = (AudioTrack*)track; - RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); - - //QPoint ppt = QCursor::pos(); - - // p3.3.47 - if (n == -1) - { - //printf("AudioStrip::routingPopupMenuActivated n = -1\n"); - ///delete pup; - return; - } - else - //if(n == 0) - //{ - //printf("AudioStrip::routingPopupMenuActivated n = 0 = tearOffHandle\n"); - //oR->setDown(false); - // return; - //} - //else - { - if(gIsOutRoutingPopupMenu) - { - QString s(pup->text(n)); - - //printf("AudioStrip::routingPopupMenuActivated text:%s\n", s.latin1()); - - if(track->type() == Track::AUDIO_OUTPUT) - { - ///delete orpup; - - int chan = n & 0xf; - - //Route srcRoute(t, -1); - //Route srcRoute(t, chan, chans); - //Route srcRoute(t, chan, 1); - Route srcRoute(t, chan); - - //Route dstRoute(s, true, -1); - Route dstRoute(s, true, -1, Route::JACK_ROUTE); - //Route dstRoute(s, true, 0, Route::JACK_ROUTE); - - //srcRoute.channel = dstRoute.channel = chan; - dstRoute.channel = chan; - //dstRoute.channels = 1; - - // check if route src->dst exists: - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == dstRoute) - break; - } - if (irl != rl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.47 - //pup->popup(ppt, 0); - - //oR->setDown(false); - return; - - // p3.3.46 - ///goto _redisplay; - } - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - { - ///delete orpup; - //oR->setDown(false); // orpup->exec() catches mouse release event - return; - } - - //int chan = n >> 16; - //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. - //chan &= 0xffff; - //int chan = imm->second.channel; - //int chans = imm->second.channels; - - //Route srcRoute(t, -1); - //srcRoute.remoteChannel = chan; - //Route srcRoute(t, chan, chans); - Route srcRoute(t, imm->second.channel, imm->second.channels); - //Route srcRoute(t, imm->second.channel); - srcRoute.remoteChannel = imm->second.remoteChannel; - - //Route dstRoute(s, true, -1); - //Route dstRoute(s, true, -1, Route::TRACK_ROUTE); - Route &dstRoute = imm->second; - - // check if route src->dst exists: - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == dstRoute) - break; - } - if (irl != rl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.46 - //oR->setDown(false); - ///goto _redisplay; - - // p3.3.47 - //pup->popup(ppt, 0); - } - else - { - QString s(pup->text(n)); - - if(track->type() == Track::AUDIO_INPUT) - { - ///delete pup; - int chan = n & 0xf; - - Route srcRoute(s, false, -1, Route::JACK_ROUTE); - Route dstRoute(t, chan); - - srcRoute.channel = chan; - - iRoute irl = rl->begin(); - for(; irl != rl->end(); ++irl) - { - if(*irl == srcRoute) - break; + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + return; + + Route &srcRoute = imm->second; + + Route dstRoute(t, imm->second.channel, imm->second.channels); + dstRoute.remoteChannel = imm->second.remoteChannel; + + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == srcRoute) + break; } - if(irl != rl->end()) - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - else - // connect - audio->msgAddRoute(srcRoute, dstRoute); - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - //iR->setDown(false); // pup->exec() catches mouse release event - return; - - // p3.3.46 - ///goto _redisplay; - } - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - { - //delete pup; - //iR->setDown(false); // pup->exec() catches mouse release event - return; - } - - //int chan = n >> 16; - //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. - //chan &= 0xffff; - //int chan = imm->second.channel; - //int chans = imm->second.channels; - - //Route srcRoute(s, false, -1); - //Route srcRoute(s, false, -1, Route::TRACK_ROUTE); - Route &srcRoute = imm->second; - - //Route dstRoute(t, -1); - //Route dstRoute(t, chan, chans); - Route dstRoute(t, imm->second.channel, imm->second.channels); - //Route dstRoute(t, imm->second.channel); - dstRoute.remoteChannel = imm->second.remoteChannel; - - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == srcRoute) - break; - } - if (irl != rl->end()) { - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.46 - //iR->setDown(false); - ///goto _redisplay; - - } - + if (irl != rl->end()) { + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); } - - ///delete pup; - //oR->setDown(false); } //--------------------------------------------------------- @@ -2383,52 +1783,33 @@ void AudioStrip::oRoutePressed() QPoint ppt = QCursor::pos(); - ///QPopupMenu* pup = new QPopupMenu(oR); - PopupMenu* pup = muse->getRoutingPopupMenu(); pup->disconnect(); - //pup->setCheckable(true); AudioTrack* t = (AudioTrack*)track; RouteList* orl = t->outRoutes(); + QAction* act = 0; int gid = 0; - //int n; - ///RouteMenuMap mm; - - // Routes can't be re-read until the message sent from msgAddRoute1() - // has had time to be sent and actually affected the routes. -/// _redisplay: - - //QPopupMenu* pup = new QPopupMenu(oR); - //RouteList* orl = t->outRoutes(); + int id = 0; pup->clear(); gRoutingMenuMap.clear(); gid = 0; - // p3.3.47 - //orpup->insertTearOffHandle(gid); - //gid++; - switch(track->type()) { case Track::AUDIO_OUTPUT: { - pup->setCheckable(true); - //int gid = 0; for(int i = 0; i < channel; ++i) { char buffer[128]; snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); - //MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); MenuTitleItem* titel = new MenuTitleItem(QString(buffer), pup); - //pup->insertItem(titel); //ddskrjo pup->addAction(titel); if(!checkAudioDevice()) { - ///delete pup; gRoutingPopupMenuMaster = 0; pup->clear(); gRoutingMenuMap.clear(); @@ -2438,8 +1819,11 @@ void AudioStrip::oRoutePressed() std::list<QString> ol = audioDevice->inputPorts(); for(std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - int id = pup->insertItem(*ip, (gid * 16) + i); - //Route dst(*ip, true, i); + id = gid * 16 + i; + act = pup->addAction(*ip); + act->setData(id); + act->setCheckable(true); + Route dst(*ip, true, i, Route::JACK_ROUTE); gRoutingMenuMap.insert( pRouteMenuMap(id, dst) ); ++gid; @@ -2447,13 +1831,13 @@ void AudioStrip::oRoutePressed() { if(*ir == dst) { - pup->setItemChecked(id, true); + act->setChecked(true); break; } } } if(i+1 != channel) - pup->insertSeparator(); + pup->addSeparator(); } } break; @@ -2462,36 +1846,24 @@ void AudioStrip::oRoutePressed() //case Track::AUDIO_GROUP: case Track::AUDIO_SOFTSYNTH: - //addOutPorts(t, pup, orl); - //addGroupPorts(t, pup, orl); - //gid = addMultiChannelPorts(oR, t, pup, gid, gRoutingMenuMap, true); - //gid = addMultiChannelPorts(this, oR, t, pup, gid, gRoutingMenuMap, true); gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, true); break; case Track::AUDIO_INPUT: - //gid = addWavePorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); case Track::WAVE: case Track::AUDIO_GROUP: case Track::AUDIO_AUX: //case Track::AUDIO_SOFTSYNTH: - //gid = addOutPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); - //gid = addGroupPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); gid = addGroupPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); - //gid = addSyntiPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); - //gid = nonSyntiTrackAddSyntis(oR, t, pup, gid, gRoutingMenuMap, true); - //gid = nonSyntiTrackAddSyntis(this, oR, t, pup, gid, gRoutingMenuMap, true); gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, true); break; //case Track::AUDIO_AUX: - //gid = addOutPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); // gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); //break; default: - ///delete pup; gRoutingPopupMenuMaster = 0; pup->clear(); gRoutingMenuMap.clear(); @@ -2499,315 +1871,19 @@ void AudioStrip::oRoutePressed() return; } - if(pup->count() == 0) + if(pup->actions().isEmpty()) { - ///delete pup; gRoutingPopupMenuMaster = 0; gRoutingMenuMap.clear(); oR->setDown(false); return; } - //int n = pup->exec(QCursor::pos()); - ///n = pup->exec(ppt); gIsOutRoutingPopupMenu = true; gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(ppt, 0); + pup->popup(ppt); oR->setDown(false); - return; - - - /* - // p3.3.47 - if(n == 0) - { - printf("AudioStrip::oRoutePressed n = 0 = tearOffHandle\n"); - oR->setDown(false); // orpup->exec() catches mouse release event - return; - } - else - - if (n != -1) { - QString s(orpup->text(n)); - - if(track->type() == Track::AUDIO_OUTPUT) - { - delete orpup; - - int chan = n & 0xf; - - //Route srcRoute(t, -1); - //Route srcRoute(t, chan, chans); - //Route srcRoute(t, chan, 1); - Route srcRoute(t, chan); - - //Route dstRoute(s, true, -1); - Route dstRoute(s, true, -1, Route::JACK_ROUTE); - //Route dstRoute(s, true, 0, Route::JACK_ROUTE); - - //srcRoute.channel = dstRoute.channel = chan; - dstRoute.channel = chan; - //dstRoute.channels = 1; - - // check if route src->dst exists: - iRoute iorl = orl->begin(); - for (; iorl != orl->end(); ++iorl) { - if (*iorl == dstRoute) - break; - } - if (iorl != orl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - oR->setDown(false); // orpup->exec() catches mouse release event - return; - - // p3.3.46 - ///goto _redisplay; - } - - iRouteMenuMap imm = ormm.find(n); - if(imm == ormm.end()) - { - delete orpup; - oR->setDown(false); // orpup->exec() catches mouse release event - return; - } - - //int chan = n >> 16; - //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. - //chan &= 0xffff; - //int chan = imm->second.channel; - //int chans = imm->second.channels; - - //Route srcRoute(t, -1); - //srcRoute.remoteChannel = chan; - //Route srcRoute(t, chan, chans); - Route srcRoute(t, imm->second.channel, imm->second.channels); - //Route srcRoute(t, imm->second.channel); - srcRoute.remoteChannel = imm->second.remoteChannel; - - //Route dstRoute(s, true, -1); - //Route dstRoute(s, true, -1, Route::TRACK_ROUTE); - Route &dstRoute = imm->second; - - // check if route src->dst exists: - iRoute iorl = orl->begin(); - for (; iorl != orl->end(); ++iorl) { - if (*iorl == dstRoute) - break; - } - if (iorl != orl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.46 - //oR->setDown(false); // orpup->exec() catches mouse release event - ///goto _redisplay; - - } - - delete orpup; - oR->setDown(false); // pup->exec() catches mouse release event - */ } -/* -//--------------------------------------------------------- -// iRoutePressed -//--------------------------------------------------------- - -void AudioStrip::iRoutePressed() - { - QPopupMenu* pup = new QPopupMenu(iR); - pup->setCheckable(true); - AudioTrack* t = (AudioTrack*)track; - RouteList* irl = t->inRoutes(); - - switch(track->type()) { - case Track::MIDI: - case Track::DRUM: - case Track::AUDIO_AUX: - case Track::AUDIO_SOFTSYNTH: - delete pup; - return; - case Track::AUDIO_INPUT: - { - int gid = 0; - for (int i = 0; i < channel; ++i) { - char buffer[128]; - snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); - MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); - pup->insertItem(titel); - - if (!checkAudioDevice()) return; - std::list<QString> ol = audioDevice->outputPorts(); - for (std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - int id = pup->insertItem(*ip, (gid * 16) + i); - //Route dst(*ip, true, i); - Route dst(*ip, true, i, Route::JACK_ROUTE); - ++gid; - for (iRoute ir = irl->begin(); ir != irl->end(); ++ir) { - if (*ir == dst) { - pup->setItemChecked(id, true); - break; - } - } - } - if (i+1 != channel) - pup->insertSeparator(); - } - } - break; - case Track::AUDIO_OUTPUT: - addWavePorts(t, pup, irl); - addInPorts(t, pup, irl); - addGroupPorts(t, pup, irl); - addAuxPorts(t, pup, irl); - addSyntiPorts(t, pup, irl); - break; - case Track::WAVE: - addInPorts(t, pup, irl); - break; - case Track::AUDIO_GROUP: - addWavePorts(t, pup, irl); - addInPorts(t, pup, irl); - addGroupPorts(t, pup, irl); - addSyntiPorts(t, pup, irl); - break; - } - int n = pup->exec(QCursor::pos()); - if (n != -1) { - QString s(pup->text(n)); - - //Route srcRoute(s, false, -1); - Route srcRoute(s, false, -1, (track->type() == Track::AUDIO_INPUT) ? Route::JACK_ROUTE : Route::TRACK_ROUTE); - Route dstRoute(t, -1); - - if (track->type() == Track::AUDIO_INPUT) - srcRoute.channel = dstRoute.channel = n & 0xf; - iRoute iir = irl->begin(); - for (; iir != irl->end(); ++iir) { - if (*iir == srcRoute) - break; - } - if (iir != irl->end()) { - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } - delete pup; - iR->setDown(false); // pup->exec() catches mouse release event - } -*/ - -/* -//--------------------------------------------------------- -// oRoutePressed -//--------------------------------------------------------- - -void AudioStrip::oRoutePressed() - { - QPopupMenu* pup = new QPopupMenu(oR); - pup->setCheckable(true); - AudioTrack* t = (AudioTrack*)track; - RouteList* orl = t->outRoutes(); - - switch(track->type()) { - case Track::MIDI: - case Track::DRUM: - delete pup; - return; - case Track::AUDIO_OUTPUT: - { - int gid = 0; - for (int i = 0; i < channel; ++i) { - char buffer[128]; - snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); - MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); - pup->insertItem(titel); - - if (!checkAudioDevice()) return; - std::list<QString> ol = audioDevice->inputPorts(); - for (std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - int id = pup->insertItem(*ip, (gid * 16) + i); - //Route dst(*ip, true, i); - Route dst(*ip, true, i, Route::JACK_ROUTE); - ++gid; - for (iRoute ir = orl->begin(); ir != orl->end(); ++ir) { - if (*ir == dst) { - pup->setItemChecked(id, true); - break; - } - } - } - if (i+1 != channel) - pup->insertSeparator(); - } - } - break; - case Track::AUDIO_INPUT: - addWavePorts(t, pup, orl); - case Track::WAVE: - case Track::AUDIO_GROUP: - case Track::AUDIO_SOFTSYNTH: - addOutPorts(t, pup, orl); - addGroupPorts(t, pup, orl); - break; - case Track::AUDIO_AUX: - addOutPorts(t, pup, orl); - break; - } - int n = pup->exec(QCursor::pos()); - if (n != -1) { - QString s(pup->text(n)); - Route srcRoute(t, -1); - //Route dstRoute(s, true, -1); - Route dstRoute(s, true, -1, (track->type() == Track::AUDIO_OUTPUT) ? Route::JACK_ROUTE : Route::TRACK_ROUTE); - - if (track->type() == Track::AUDIO_OUTPUT) - srcRoute.channel = dstRoute.channel = n & 0xf; - - // check if route src->dst exists: - iRoute iorl = orl->begin(); - for (; iorl != orl->end(); ++iorl) { - if (*iorl == dstRoute) - break; - } - if (iorl != orl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } - delete pup; - oR->setDown(false); // pup->exec() catches mouse release event - } -*/ diff --git a/muse2/muse/mixer/astrip.h b/muse2/muse/mixer/astrip.h index 82662b2b..bd3a1fa8 100644 --- a/muse2/muse/mixer/astrip.h +++ b/muse2/muse/mixer/astrip.h @@ -18,6 +18,7 @@ class Slider; class Knob; class QDialog; class QToolButton; +class QAction; //class QPopupMenu; class PopupMenu; class QButton; @@ -66,7 +67,7 @@ class AudioStrip : public Strip { void offToggled(bool); void iRoutePressed(); void oRoutePressed(); - void routingPopupMenuActivated(int /*id*/); + void routingPopupMenuActivated(QAction*); void auxChanged(double, int); void volumeChanged(double); void volumePressed(); diff --git a/muse2/muse/mixer/mstrip.cpp b/muse2/muse/mixer/mstrip.cpp index 92d2d02f..6ec47f24 100644 --- a/muse2/muse/mixer/mstrip.cpp +++ b/muse2/muse/mixer/mstrip.cpp @@ -9,6 +9,7 @@ #include <fastlog.h> #include <QLayout> +#include <QAction> #include <qapplication.h> #include <qdialog.h> #include <qtoolbutton.h> @@ -965,11 +966,12 @@ void MidiStrip::updateOffState() // Ripped from AudioStrip, hehh(mg) // routingPopupMenuActivated //--------------------------------------------------------- -void MidiStrip::routingPopupMenuActivated(int n) +void MidiStrip::routingPopupMenuActivated(QAction* act) { if(gRoutingPopupMenuMaster != this || !track || !track->isMidiTrack()) return; - muse->routingPopupMenuActivated(track, n); + + muse->routingPopupMenuActivated(track, act->data().toInt()); } //--------------------------------------------------------- @@ -981,131 +983,15 @@ void MidiStrip::iRoutePressed() if(!track || !track->isMidiTrack()) return; - //song->chooseMidiRoutes(iR, (MidiTrack*)track, false); PopupMenu* pup = muse->prepareRoutingPopupMenu(track, false); if(!pup) return; - //pup->disconnect(); gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(QCursor::pos(), 0); + pup->popup(QCursor::pos()); iR->setDown(false); - return; - - /* - RouteList* irl = track->inRoutes(); - //Route dst(track, -1); - - QPopupMenu* pup = new QPopupMenu(iR); - pup->setCheckable(true); - - int gid = 0; - - //MidiInPortList* tl = song->midiInPorts(); - //for(iMidiInPort i = tl->begin();i != tl->end(); ++i) - for(int i = 0; i < MIDI_PORTS; ++i) - { - //MidiInPort* track = *i; - // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick wth ports. - MidiPort* mp = &midiPorts[i]; - MidiDevice* md = mp->device(); - if(!md) - continue; - - if(!(md->rwFlags() & 2)) - continue; - - //printf("MidiStrip::iRoutePressed adding submenu portnum:%d\n", i); - - //QMenu* m = menu->addMenu(track->name()); - QPopupMenu* subp = new QPopupMenu(iR); - - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - //QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); - //subp->insertItem(QT_TR_NOOP(QString("Channel %1").arg(ch+1)), i * MIDI_CHANNELS + ch); - gid = i * MIDI_CHANNELS + ch; - - //printf("MidiStrip::iRoutePressed inserting gid:%d\n", gid); - - subp->insertItem(QString("Channel %1").arg(ch+1), gid); - //a->setCheckable(true); - //Route src(track, ch, RouteNode::TRACK); - //Route src(md, ch); - //Route r = Route(src, dst); - //a->setData(QVariant::fromValue(r)); - //a->setChecked(rl->indexOf(r) != -1); - Route srcRoute(md, ch); - for(iRoute ir = irl->begin(); ir != irl->end(); ++ir) - { - //if(*ir == dst) - if(*ir == srcRoute) - { - subp->setItemChecked(gid, true); - break; - } - } - } - pup->insertItem(QT_TR_NOOP(md->name()), subp); - } - - int n = pup->exec(QCursor::pos()); - delete pup; - if (n != -1) - { - int mdidx = n / MIDI_CHANNELS; - int ch = n % MIDI_CHANNELS; - - //if(debugMsg) - printf("MidiStrip::iRoutePressed mdidx:%d ch:%d\n", mdidx, ch); - - MidiPort* mp = &midiPorts[mdidx]; - MidiDevice* md = mp->device(); - if(!md) - return; - - if(!(md->rwFlags() & 2)) - return; - - - //QString s(pup->text(n)); - //QT_TR_NOOP(md->name()) - - //Route srcRoute(s, false, -1); - Route srcRoute(md, ch); - //Route srcRoute(md, -1); - //Route dstRoute(track, -1); - Route dstRoute(track, ch); - - //if (track->type() == Track::AUDIO_INPUT) - // srcRoute.channel = dstRoute.channel = n & 0xf; - iRoute iir = irl->begin(); - for (; iir != irl->end(); ++iir) { - if (*iir == srcRoute) - break; - } - if (iir != irl->end()) { - // disconnect - printf("MidiStrip::iRoutePressed removing route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect - printf("MidiStrip::iRoutePressed adding route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); - audio->msgAddRoute(srcRoute, dstRoute); - } - printf("MidiStrip::iRoutePressed calling msgUpdateSoloStates\n"); - audio->msgUpdateSoloStates(); - printf("MidiStrip::iRoutePressed calling song->update\n"); - song->update(SC_ROUTE); - } - //delete pup; - iR->setDown(false); // pup->exec() catches mouse release event - printf("MidiStrip::iRoutePressed end\n"); - */ - } //--------------------------------------------------------- @@ -1113,104 +999,19 @@ void MidiStrip::iRoutePressed() //--------------------------------------------------------- void MidiStrip::oRoutePressed() - { +{ if(!track || !track->isMidiTrack()) return; - //song->chooseMidiRoutes(oR, (MidiTrack*)track, true); PopupMenu* pup = muse->prepareRoutingPopupMenu(track, true); if(!pup) return; - //pup->disconnect(); gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(QCursor::pos(), 0); + pup->popup(QCursor::pos()); oR->setDown(false); - return; - - /* - QPopupMenu* pup = new QPopupMenu(oR); - pup->setCheckable(true); - AudioTrack* t = (AudioTrack*)track; - RouteList* orl = t->outRoutes(); - - switch(track->type()) { - case Track::MIDI: - case Track::DRUM: - delete pup; - return; - case Track::AUDIO_OUTPUT: - { - int gid = 0; - for (int i = 0; i < channel; ++i) { - char buffer[128]; - snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); - MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); - pup->insertItem(titel); - - if (!checkAudioDevice()) return; - std::list<QString> ol = audioDevice->inputPorts(); - for (std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - int id = pup->insertItem(*ip, (gid * 16) + i); - Route dst(*ip, true, i); - ++gid; - for (iRoute ir = orl->begin(); ir != orl->end(); ++ir) { - if (*ir == dst) { - pup->setItemChecked(id, true); - break; - } - } - } - if (i+1 != channel) - pup->insertSeparator(); - } - } - break; - case Track::AUDIO_INPUT: - addWavePorts(t, pup, orl); - case Track::WAVE: - case Track::AUDIO_GROUP: - case Track::AUDIO_SOFTSYNTH: - addOutPorts(t, pup, orl); - addGroupPorts(t, pup, orl); - break; - case Track::AUDIO_AUX: - addOutPorts(t, pup, orl); - break; - } - int n = pup->exec(QCursor::pos()); - if (n != -1) { - QString s(pup->text(n)); - Route srcRoute(t, -1); - Route dstRoute(s, true, -1); - - if (track->type() == Track::AUDIO_OUTPUT) - srcRoute.channel = dstRoute.channel = n & 0xf; - - // check if route src->dst exists: - iRoute iorl = orl->begin(); - for (; iorl != orl->end(); ++iorl) { - if (*iorl == dstRoute) - break; - } - if (iorl != orl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } - delete pup; - oR->setDown(false); // pup->exec() catches mouse release event - */ - - - } +} diff --git a/muse2/muse/mixer/mstrip.h b/muse2/muse/mixer/mstrip.h index 86eb3fac..d5776d43 100644 --- a/muse2/muse/mixer/mstrip.h +++ b/muse2/muse/mixer/mstrip.h @@ -20,6 +20,7 @@ class Knob; class QString; class MidiTrack; class QLabel; +class QAction; //--------------------------------------------------------- // MidiStrip @@ -56,7 +57,7 @@ class MidiStrip : public Strip { //void routeClicked(); void iRoutePressed(); void oRoutePressed(); - void routingPopupMenuActivated(int /*id*/); + void routingPopupMenuActivated(QAction*); void setVolume(double); void setPan(double); void setChorusSend(double); diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp index 60729d69..618f0d19 100644 --- a/muse2/muse/widgets/popupmenu.cpp +++ b/muse2/muse/widgets/popupmenu.cpp @@ -8,9 +8,9 @@ // PopupMenu sub-class of QMenu created by Tim. //========================================================= +//#include <stdio.h> #include <QMouseEvent> #include <QAction> -#include <stdio.h> //#include <QStandardItemModel> #include "popupmenu.h" @@ -28,7 +28,7 @@ PopupMenu::PopupMenu(QWidget* parent) PopupMenu::~PopupMenu() { - printf("PopupMenu::~PopupMenu\n"); // REMOVE Tim. + //printf("PopupMenu::~PopupMenu\n"); } void PopupMenu::clear() |