summaryrefslogtreecommitdiff
path: root/muse2/muse/widgets/routepopup.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2011-12-21 17:54:10 +0000
committerFlorian Jung <flo@windfisch.org>2011-12-21 17:54:10 +0000
commit1fe51e45eebbfc2ac198ed4778c9afdb9eaf2ed0 (patch)
tree3d976c7966bec1f4d534a6281713ff36ec9cd3e8 /muse2/muse/widgets/routepopup.cpp
parentc36a5508aa42e596b005425208054af9a60734b4 (diff)
merged again
Diffstat (limited to 'muse2/muse/widgets/routepopup.cpp')
-rw-r--r--muse2/muse/widgets/routepopup.cpp538
1 files changed, 370 insertions, 168 deletions
diff --git a/muse2/muse/widgets/routepopup.cpp b/muse2/muse/widgets/routepopup.cpp
index 0f1f8264..3e2ad008 100644
--- a/muse2/muse/widgets/routepopup.cpp
+++ b/muse2/muse/widgets/routepopup.cpp
@@ -34,6 +34,10 @@
#include "menutitleitem.h"
#include "popupmenu.h"
+#include "custom_widget_actions.h"
+#include "globaldefs.h"
+#define _USE_CUSTOM_WIDGET_ACTIONS_
+
namespace MusEGui {
//---------------------------------------------------------
@@ -617,7 +621,22 @@ int RoutePopupMenu::nonSyntiTrackAddSyntis(MusECore::AudioTrack* t, PopupMenu* l
int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id, bool isOutput)
{
+
+#ifndef _USE_CUSTOM_WIDGET_ACTIONS_
+
QAction* act;
+
+#endif
+
+#ifdef _USE_CUSTOM_WIDGET_ACTIONS_
+
+ PixmapButtonsHeaderWidgetAction* wa_hdr = new PixmapButtonsHeaderWidgetAction("Output port/device", darkRedLedIcon, MIDI_CHANNELS, pup);
+ pup->addAction(wa_hdr);
+ ++id;
+#else
+ pup->addAction(new MenuTitleItem("Output port/device", pup));
+#endif
+
for(int i = 0; i < MIDI_PORTS; ++i)
{
MusECore::MidiPort* mp = &MusEGlobal::midiPorts[i];
@@ -626,19 +645,16 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id
// This is desirable, but could lead to 'hidden' routes unless we add more support
// such as removing the existing routes when user changes flags.
// So for now, just list all valid ports whether read or write.
- if(!md)
- continue;
- //if(!(md->rwFlags() & (isOutput ? 1 : 2)))
+ //if(!md)
// continue;
+ if(!md || !(md->rwFlags() & (isOutput ? 2 : 1))) // If this is an input click we are looking for midi outputs here.
+ continue;
// Do not list synth devices!
if(md->isSynti())
continue;
- MusECore::RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes();
-
- PopupMenu* subp = new PopupMenu(pup, true);
- subp->setTitle(md->name());
+ MusECore::RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes();
int chanmask = 0;
// To reduce number of routes required, from one per channel to just one containing a channel mask.
@@ -653,6 +669,21 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id
}
}
+#ifdef _USE_CUSTOM_WIDGET_ACTIONS_
+
+ PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + md->name(),
+ redLedIcon, darkRedLedIcon,MIDI_CHANNELS, chanmask, pup);
+ MusECore::Route srcRoute(i, 0); // Ignore the routing channels - our action holds the channels.
+ //wa->setData(id++);
+ wa->setData(qVariantFromValue(srcRoute));
+ pup->addAction(wa);
+ ++id;
+
+#else
+
+ PopupMenu* subp = new PopupMenu(pup, true);
+ subp->setTitle(md->name());
+
for(int ch = 0; ch < MIDI_CHANNELS; ++ch)
{
act = subp->addAction(QString("Channel %1").arg(ch+1));
@@ -677,6 +708,9 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id
++id;
pup->addMenu(subp);
+
+#endif // _USE_CUSTOM_WIDGET_ACTIONS_
+
}
return id;
}
@@ -687,29 +721,22 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id
//======================
RoutePopupMenu::RoutePopupMenu(QWidget* parent, MusECore::Track* track, bool isOutput)
- : _track(track), _isOutMenu(isOutput)
+ //: _track(track), _isOutMenu(isOutput)
+ : PopupMenu(parent, true), _track(track), _isOutMenu(isOutput)
{
- _pup = new PopupMenu(parent, true);
init();
}
RoutePopupMenu::RoutePopupMenu(const QString& title, QWidget* parent, MusECore::Track* track, bool isOutput)
- : _track(track), _isOutMenu(isOutput)
+ //: _track(track), _isOutMenu(isOutput)
+ : PopupMenu(title, parent, true), _track(track), _isOutMenu(isOutput)
{
- _pup = new PopupMenu(title, parent, true);
init();
}
-RoutePopupMenu::~RoutePopupMenu()
-{
- //printf("RoutePopupMenu::~RoutePopupMenu\n");
- // Make sure to clear which clears and deletes any sub popups.
- _pup->clear();
- delete _pup;
-}
-
void RoutePopupMenu::init()
{
+ //printf("RoutePopupMenu::init this:%p\n", this);
connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
}
@@ -726,15 +753,19 @@ void RoutePopupMenu::updateRouteMenus()
// In case for some reason a route could not be added (or removed).
// Then the item will be properly un-checked (or checked) here.
+ // TODO Fix this up a bit. It doesn't quite respond to complete removal, and other situations are a bit odd.
+ // Best to ignore it for now since it only half-works. p4.0.42
+
+/*
//printf("RoutePopupMenu::updateRouteMenus\n");
- if(!_track || !_pup || _pup->actions().isEmpty() || !_pup->isVisible())
+ if(!_track || actions().isEmpty() || !isVisible())
return;
MusECore::RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes();
// Clear all the action check marks.
- _pup->clearAllChecks();
+ clearAllChecks();
// Take care of Midi Port to Audio Input routes first...
if(_isOutMenu && _track->isMidiTrack())
@@ -754,10 +785,13 @@ void RoutePopupMenu::updateRouteMenus()
if(ir->channel & chbits)
{
MusECore::Route r(ir->track, chbits);
- //printf("RoutePopupMenu::updateRouteMenus MusECore::MidiPort to AudioInput chbits:%d\n", chbits);
- QAction* act = _pup->findActionFromData(qVariantFromValue(r));
+ //printf("RoutePopupMenu::updateRouteMenus MusECore::MidiPort to AudioInput chbits:%d\n", chbits); //
+ QAction* act = findActionFromData(qVariantFromValue(r));
if(act)
+ {
+ //printf(" ... Found\n"); //
act->setChecked(true);
+ }
}
}
}
@@ -771,6 +805,25 @@ void RoutePopupMenu::updateRouteMenus()
// Do MidiTrack to MidiPort routes...
if(irl->type == MusECore::Route::MIDI_PORT_ROUTE)
{
+
+#ifdef _USE_CUSTOM_WIDGET_ACTIONS_
+
+ // Widget action handles channels. Look for route with channels ignored and set to zero.
+ MusECore::Route r(irl->midiPort, 0);
+ QAction* act = findActionFromData(qVariantFromValue(r));
+ if(act)
+ {
+ //printf("RoutePopupMenu::updateRouteMenus found MidiTrack to MidiPort irl type:%d\n", irl->type); //
+ // Check for custom widget actions first.
+ PixmapButtonsWidgetAction* mc_wa = dynamic_cast<PixmapButtonsWidgetAction*>(act);
+ if(mc_wa)
+ {
+ //printf(" ... Found custom, setting current state\n"); //
+ mc_wa->setCurrentState(irl->channel); // Set all channels at once.
+ }
+ }
+
+#else
//printf("RoutePopupMenu::updateRouteMenus MIDI_PORT_ROUTE\n");
for(int ch = 0; ch < MIDI_CHANNELS; ++ch)
{
@@ -778,33 +831,67 @@ void RoutePopupMenu::updateRouteMenus()
if(irl->channel & chbits)
{
MusECore::Route r(irl->midiPort, chbits);
- QAction* act = _pup->findActionFromData(qVariantFromValue(r));
+ //printf("RoutePopupMenu::updateRouteMenus MidiTrack to MidiPort irl type:%d\n", irl->type); //
+ // If act is a PixmapButtonsWidgetAction, route channel is ignored and is zero.
+ QAction* act = findActionFromData(qVariantFromValue(r));
if(act)
+ {
+ //printf(" ... Found\n"); //
act->setChecked(true);
+ }
}
}
+#endif // _USE_CUSTOM_WIDGET_ACTIONS_
+
}
else
// Do all other routes...
{
- //printf("RoutePopupMenu::updateRouteMenus other irl type:%d\n", irl->type);
- QAction* act = _pup->findActionFromData(qVariantFromValue(*irl));
+
+#ifdef _USE_CUSTOM_WIDGET_ACTIONS_
+
+ // Do MidiPort to MidiTrack routes...
+ if(irl->type == MusECore::Route::TRACK_ROUTE && irl->track && irl->track->type() == MusECore::Track::AUDIO_INPUT)
+ {
+ // Widget action handles channels. Look for route with channels ignored and set to zero.
+ MusECore::Route r(irl->track, 0);
+ QAction* act = findActionFromData(qVariantFromValue(r));
+ if(act)
+ {
+ // Check for custom widget actions first.
+ PixmapButtonsWidgetAction* mc_wa = dynamic_cast<PixmapButtonsWidgetAction*>(act);
+ if(mc_wa)
+ {
+ //printf("RoutePopupMenu::updateRouteMenus found custom irl type:%d\n", irl->type); //
+ mc_wa->setCurrentState(irl->channel); // Set all channels at once.
+ continue;
+ }
+ }
+ }
+
+#endif // _USE_CUSTOM_WIDGET_ACTIONS_
+
+ printf("RoutePopupMenu::updateRouteMenus other irl type:%d\n", irl->type); // REMOVE TIm.
if(act)
+ {
+ //printf("RoutePopupMenu::updateRouteMenus found other irl type:%d\n", irl->type); //
act->setChecked(true);
+ }
}
}
+*/
}
void RoutePopupMenu::popupActivated(QAction* action)
{
- if(!action || !_track || !_pup || _pup->actions().isEmpty())
+ if(!action || !_track || actions().isEmpty())
return;
if(_track->isMidiTrack())
{
MusECore::RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes();
- // Take care of Route data items first...
+ // Take care of Route data items first...
if(qVariantCanConvert<MusECore::Route>(action->data()))
{
MusECore::Route aRoute = action->data().value<MusECore::Route>();
@@ -836,13 +923,10 @@ void RoutePopupMenu::popupActivated(QAction* action)
MusECore::RouteList* mprl = _isOutMenu ? mp->outRoutes() : mp->inRoutes();
MusECore::ciRoute ir = mprl->begin();
for (; ir != mprl->end(); ++ir)
- {
- if(ir->type == MusECore::Route::TRACK_ROUTE && ir->track == aRoute.track) // Is there already a route to this port?
- {
- chmask = ir->channel; // Grab the channel mask.
- break;
+ if(ir->type == MusECore::Route::TRACK_ROUTE && ir->track == aRoute.track) { // Is there already a route to this port?
+ chmask = ir->channel; // Grab the channel mask.
+ break;
}
- }
if ((chmask & chbit) == chbit) // Is the channel's bit(s) set?
{
// disconnect
@@ -866,56 +950,113 @@ void RoutePopupMenu::popupActivated(QAction* action)
}
return;
}
+ // Support Audio Input track to Midi Port routes.
else if(aRoute.type == MusECore::Route::MIDI_PORT_ROUTE)
{
- int chbit = aRoute.channel;
- MusECore::Route bRoute(_track, chbit);
- int mdidx = aRoute.midiPort;
-
- MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mdidx];
- MusECore::MidiDevice* md = mp->device();
- //if(!md) // Rem. Allow connections to ports with no device.
- // return;
-
- //if(!(md->rwFlags() & 2))
- //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2)))
- if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2)))
- return;
-
- int chmask = 0;
- MusECore::ciRoute iir = rl->begin();
- for (; iir != rl->end(); ++iir)
+ // Check for custom midi channel select action.
+ PixmapButtonsWidgetAction* cs_wa = dynamic_cast<PixmapButtonsWidgetAction*>(action);
+ if(cs_wa)
{
- if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port?
+ MusECore::Route aRoute = action->data().value<MusECore::Route>();
+ int chbits = cs_wa->currentState();
+ aRoute.channel = chbits; // Restore the desired route channels from the custom widget action state.
+
+ int mdidx = aRoute.midiPort;
+ MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mdidx];
+
+ MusECore::MidiDevice* md = mp->device();
+ //if(!md) // Rem. Allow connections to ports with no device.
+ // return;
+
+ //if(!(md->rwFlags() & 2))
+ //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2)))
+ if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2)))
+ return;
+
+ int chmask = 0;
+ MusECore::ciRoute iir = rl->begin();
+ for (; iir != rl->end(); ++iir)
+ if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) { // Is there already a route to this port?
+ chmask = iir->channel; // Grab the channel mask.
+ break;
+ }
+
+ // Only if something changed...
+ if(chmask != chbits)
{
- chmask = iir->channel; // Grab the channel mask.
- break;
- }
- }
- if ((chmask & chbit) == chbit) // Is the channel's bit(s) set?
- {
- // disconnect
- if(_isOutMenu)
- MusEGlobal::audio->msgRemoveRoute(bRoute, aRoute);
- else
- MusEGlobal::audio->msgRemoveRoute(aRoute, bRoute);
+ if(chmask != 0)
+ {
+ MusECore::Route bRoute(_track, chmask);
+ // Disconnect all existing channels.
+ if(_isOutMenu)
+ MusEGlobal::audio->msgRemoveRoute(bRoute, *iir);
+ else
+ MusEGlobal::audio->msgRemoveRoute(*iir, bRoute);
+ }
+ if(chbits != 0)
+ {
+ // Connect desired channels.
+ MusECore::Route bRoute(_track, chbits);
+ if(_isOutMenu)
+ MusEGlobal::audio->msgAddRoute(bRoute, aRoute);
+ else
+ MusEGlobal::audio->msgAddRoute(aRoute, bRoute);
+ }
+ MusEGlobal::audio->msgUpdateSoloStates();
+ MusEGlobal::song->update(SC_ROUTE);
+ }
+ //return;
}
- else
+ else
{
- // connect
- if(_isOutMenu)
- MusEGlobal::audio->msgAddRoute(bRoute, aRoute);
- else
- MusEGlobal::audio->msgAddRoute(aRoute, bRoute);
+ int chbit = aRoute.channel;
+ MusECore::Route bRoute(_track, chbit);
+ int mdidx = aRoute.midiPort;
+
+ MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mdidx];
+ MusECore::MidiDevice* md = mp->device();
+ //if(!md) // Rem. Allow connections to ports with no device.
+ // return;
+
+ //if(!(md->rwFlags() & 2))
+ //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2)))
+ if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2)))
+ return;
+
+ int chmask = 0;
+ MusECore::ciRoute iir = rl->begin();
+ for (; iir != rl->end(); ++iir)
+ {
+ if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port?
+ {
+ chmask = iir->channel; // Grab the channel mask.
+ break;
+ }
+ }
+ if ((chmask & chbit) == chbit) // Is the channel's bit(s) set?
+ {
+ // disconnect
+ if(_isOutMenu)
+ MusEGlobal::audio->msgRemoveRoute(bRoute, aRoute);
+ else
+ MusEGlobal::audio->msgRemoveRoute(aRoute, bRoute);
+ }
+ else
+ {
+ // connect
+ if(_isOutMenu)
+ MusEGlobal::audio->msgAddRoute(bRoute, aRoute);
+ else
+ MusEGlobal::audio->msgAddRoute(aRoute, bRoute);
+ }
+
+ MusEGlobal::audio->msgUpdateSoloStates();
+ MusEGlobal::song->update(SC_ROUTE);
}
-
- MusEGlobal::audio->msgUpdateSoloStates();
- MusEGlobal::song->update(SC_ROUTE);
}
}
- else
// ... now take care of integer data items.
- if(qVariantCanConvert<int>(action->data()))
+ else if(qVariantCanConvert<int>(action->data()))
{
int n = action->data().value<int>();
if(!_isOutMenu && n == 0)
@@ -961,34 +1102,73 @@ void RoutePopupMenu::popupActivated(QAction* action)
// Support Midi Port to Audio Input routes.
if(_track->type() == MusECore::Track::AUDIO_INPUT && srcRoute.type == MusECore::Route::MIDI_PORT_ROUTE)
{
- int chbit = srcRoute.channel;
- MusECore::Route dstRoute(t, chbit);
- int mdidx = srcRoute.midiPort;
- int chmask = 0;
- MusECore::ciRoute iir = rl->begin();
- for (; iir != rl->end(); ++iir)
+ // Check for custom midi channel select action.
+ PixmapButtonsWidgetAction* cs_wa = dynamic_cast<PixmapButtonsWidgetAction*>(action);
+ if(cs_wa)
{
- if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port?
+ int chbits = cs_wa->currentState();
+ srcRoute.channel = chbits; // Restore the desired route channels from the custom widget action state.
+ int mdidx = srcRoute.midiPort;
+
+ int chmask = 0;
+ MusECore::ciRoute iir = rl->begin();
+ for (; iir != rl->end(); ++iir)
+ if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) { // Is there already a route to this port?
+ chmask = iir->channel; // Grab the channel mask.
+ break;
+ }
+
+ // Only if something changed...
+ if(chmask != chbits)
{
- chmask = iir->channel; // Grab the channel mask.
- break;
- }
- }
-
- if ((chmask & chbit) == chbit) // Is the channel's bit(s) set?
- {
- //printf("routingPopupMenuActivated: removing src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel);
- MusEGlobal::audio->msgRemoveRoute(srcRoute, dstRoute);
+ if(chmask != 0)
+ {
+ // Disconnect all existing channels.
+ MusECore::Route dstRoute(t, chmask);
+ MusEGlobal::audio->msgRemoveRoute(*iir, dstRoute);
+ }
+ if(chbits != 0)
+ {
+ // Connect desired channels.
+ MusECore::Route dstRoute(t, chbits);
+ MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute);
+ }
+ MusEGlobal::audio->msgUpdateSoloStates();
+ MusEGlobal::song->update(SC_ROUTE);
+ }
+ return;
}
- else
+ else
{
- //printf("routingPopupMenuActivated: adding src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel);
- MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute);
- }
-
- MusEGlobal::audio->msgUpdateSoloStates();
- MusEGlobal::song->update(SC_ROUTE);
- return;
+ int chbit = srcRoute.channel;
+ MusECore::Route dstRoute(t, chbit);
+ int mdidx = srcRoute.midiPort;
+ int chmask = 0;
+ MusECore::ciRoute iir = rl->begin();
+ for (; iir != rl->end(); ++iir)
+ {
+ if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port?
+ {
+ chmask = iir->channel; // Grab the channel mask.
+ break;
+ }
+ }
+
+ if ((chmask & chbit) == chbit) // Is the channel's bit(s) set?
+ {
+ //printf("routingPopupMenuActivated: removing src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel);
+ MusEGlobal::audio->msgRemoveRoute(srcRoute, dstRoute);
+ }
+ else
+ {
+ //printf("routingPopupMenuActivated: adding src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel);
+ MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute);
+ }
+
+ MusEGlobal::audio->msgUpdateSoloStates();
+ MusEGlobal::song->update(SC_ROUTE);
+ return;
+ }
}
MusECore::Route dstRoute(t, srcRoute.channel, srcRoute.channels);
@@ -1020,13 +1200,13 @@ void RoutePopupMenu::popupActivated(QAction* action)
void RoutePopupMenu::prepare()
{
- _pup->disconnect();
- _pup->clear();
+ ///disconnect();
+ ///clear();
if(!_track)
return;
- connect(_pup, SIGNAL(triggered(QAction*)), SLOT(popupActivated(QAction*)));
+ connect(this, SIGNAL(triggered(QAction*)), SLOT(popupActivated(QAction*)));
if(_track->isMidiTrack())
{
@@ -1055,11 +1235,11 @@ void RoutePopupMenu::prepare()
//if(!md)
// continue;
- _pup->addSeparator();
- _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup));
- PopupMenu* subp = new PopupMenu(_pup, true);
+ addSeparator();
+ addAction(new MenuTitleItem(tr("Soloing chain"), this));
+ PopupMenu* subp = new PopupMenu(this, true);
subp->setTitle(tr("Audio returns"));
- _pup->addMenu(subp);
+ addMenu(subp);
MusECore::InputList* al = MusEGlobal::song->inputs();
for (MusECore::ciAudioInput i = al->begin(); i != al->end(); ++i)
@@ -1096,19 +1276,26 @@ void RoutePopupMenu::prepare()
}
if(pi == MIDI_PORTS)
{
- act = _pup->addAction(tr("Warning: No input devices!"));
+ act = addAction(tr("Warning: No input devices!"));
act->setCheckable(false);
act->setData(-1);
- _pup->addSeparator();
+ addSeparator();
}
- act = _pup->addAction(QIcon(*settings_midiport_softsynthsIcon), tr("Open midi config..."));
+ act = addAction(QIcon(*settings_midiport_softsynthsIcon), tr("Open midi config..."));
act->setCheckable(false);
act->setData(gid);
- _pup->addSeparator();
+ addSeparator();
++gid;
- _pup->addAction(new MenuTitleItem("Input port/device", _pup));
-
+#ifdef _USE_CUSTOM_WIDGET_ACTIONS_
+
+ PixmapButtonsHeaderWidgetAction* wa_hdr = new PixmapButtonsHeaderWidgetAction("Input port/device", darkRedLedIcon, MIDI_CHANNELS, this);
+ addAction(wa_hdr);
+ ++gid;
+#else
+ addAction(new MenuTitleItem("Input port/device", this));
+#endif
+
for(int i = 0; i < MIDI_PORTS; ++i)
{
// NOTE: Could possibly list all devices, bypassing ports, but no, let's stick with ports.
@@ -1142,7 +1329,19 @@ void RoutePopupMenu::prepare()
if(!md && ir == rl->end())
continue;
- PopupMenu* subp = new PopupMenu(_pup, true);
+#ifdef _USE_CUSTOM_WIDGET_ACTIONS_
+
+ PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + md->name(),
+ redLedIcon, darkRedLedIcon, MIDI_CHANNELS, chanmask, this);
+ MusECore::Route srcRoute(i, 0); // Ignore the routing channels - our action holds the channels.
+ //wa->setData(id++);
+ wa->setData(qVariantFromValue(srcRoute));
+ addAction(wa);
+ ++gid;
+
+#else
+
+ PopupMenu* subp = new PopupMenu(this, true);
subp->setTitle(QString("%1:").arg(i+1) + (md ? md->name() : tr("<none>")));
for(int ch = 0; ch < MIDI_CHANNELS; ++ch)
@@ -1162,7 +1361,10 @@ void RoutePopupMenu::prepare()
MusECore::Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits.
act->setData(qVariantFromValue(togRoute));
++gid;
- _pup->addMenu(subp);
+ addMenu(subp);
+
+#endif // _USE_CUSTOM_WIDGET_ACTIONS_
+
}
#if 0
@@ -1242,18 +1444,18 @@ void RoutePopupMenu::prepare()
{
char buffer[128];
snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().constData(), i+1);
- MenuTitleItem* titel = new MenuTitleItem(QString(buffer), _pup);
- _pup->addAction(titel);
+ MenuTitleItem* titel = new MenuTitleItem(QString(buffer), this);
+ addAction(titel);
if(!MusEGlobal::checkAudioDevice())
{
- _pup->clear();
+ clear();
return;
}
std::list<QString> ol = MusEGlobal::audioDevice->inputPorts();
for(std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip)
{
- act = _pup->addAction(*ip);
+ act = addAction(*ip);
act->setCheckable(true);
MusECore::Route dst(*ip, true, i, MusECore::Route::JACK_ROUTE);
@@ -1269,42 +1471,42 @@ void RoutePopupMenu::prepare()
}
}
if(i+1 != channel)
- _pup->addSeparator();
+ addSeparator();
}
//
// Display using separate menu for audio inputs:
//
- _pup->addSeparator();
- _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup));
- PopupMenu* subp = new PopupMenu(_pup, true);
+ addSeparator();
+ addAction(new MenuTitleItem(tr("Soloing chain"), this));
+ PopupMenu* subp = new PopupMenu(this, true);
subp->setTitle(tr("Audio returns"));
- _pup->addMenu(subp);
+ addMenu(subp);
gid = addInPorts(t, subp, gid, -1, -1, true);
//
// Display all in the same menu:
//
- //_pup->addSeparator();
- //MenuTitleItem* title = new MenuTitleItem(tr("Audio returns"), _pup);
- //_pup->addAction(title);
- //gid = addInPorts(t, _pup, gid, -1, -1, true);
+ //addSeparator();
+ //MenuTitleItem* title = new MenuTitleItem(tr("Audio returns"), this);
+ //addAction(title);
+ //gid = addInPorts(t, this, gid, -1, -1, true);
}
break;
case MusECore::Track::AUDIO_SOFTSYNTH:
- gid = addMultiChannelPorts(t, _pup, gid, true);
+ gid = addMultiChannelPorts(t, this, gid, true);
break;
case MusECore::Track::AUDIO_INPUT:
case MusECore::Track::WAVE:
case MusECore::Track::AUDIO_GROUP:
case MusECore::Track::AUDIO_AUX:
- gid = addWavePorts( t, _pup, gid, -1, -1, true);
- gid = addOutPorts( t, _pup, gid, -1, -1, true);
- gid = addGroupPorts( t, _pup, gid, -1, -1, true);
- gid = nonSyntiTrackAddSyntis(t, _pup, gid, true);
+ gid = addWavePorts( t, this, gid, -1, -1, true);
+ gid = addOutPorts( t, this, gid, -1, -1, true);
+ gid = addGroupPorts( t, this, gid, -1, -1, true);
+ gid = nonSyntiTrackAddSyntis(t, this, gid, true);
break;
default:
- _pup->clear();
+ clear();
return;
}
}
@@ -1327,18 +1529,18 @@ void RoutePopupMenu::prepare()
{
char buffer[128];
snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().constData(), i+1);
- MenuTitleItem* titel = new MenuTitleItem(QString(buffer), _pup);
- _pup->addAction(titel);
+ MenuTitleItem* titel = new MenuTitleItem(QString(buffer), this);
+ addAction(titel);
if(!MusEGlobal::checkAudioDevice())
{
- _pup->clear();
+ clear();
return;
}
std::list<QString> ol = MusEGlobal::audioDevice->outputPorts();
for(std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip)
{
- act = _pup->addAction(*ip);
+ act = addAction(*ip);
act->setCheckable(true);
MusECore::Route dst(*ip, true, i, MusECore::Route::JACK_ROUTE);
@@ -1354,59 +1556,59 @@ void RoutePopupMenu::prepare()
}
}
if(i+1 != channel)
- _pup->addSeparator();
+ addSeparator();
}
//
// Display using separate menus for midi ports and audio outputs:
//
- _pup->addSeparator();
- _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup));
- PopupMenu* subp = new PopupMenu(_pup, true);
+ addSeparator();
+ addAction(new MenuTitleItem(tr("Soloing chain"), this));
+ PopupMenu* subp = new PopupMenu(this, true);
subp->setTitle(tr("Audio sends"));
- _pup->addMenu(subp);
+ addMenu(subp);
gid = addOutPorts(t, subp, gid, -1, -1, false);
- subp = new PopupMenu(_pup, true);
+ subp = new PopupMenu(this, true);
subp->setTitle(tr("Midi port sends"));
- _pup->addMenu(subp);
+ addMenu(subp);
addMidiPorts(t, subp, gid, false);
//
// Display all in the same menu:
//
- //_pup->addAction(new MenuTitleItem(tr("Audio sends"), _pup));
- //gid = addOutPorts(t, _pup, gid, -1, -1, false);
- //_pup->addSeparator();
- //_pup->addAction(new MenuTitleItem(tr("Midi sends"), _pup));
- //addMidiPorts(t, _pup, gid, false);
+ //addAction(new MenuTitleItem(tr("Audio sends"), this));
+ //gid = addOutPorts(t, this, gid, -1, -1, false);
+ //addSeparator();
+ //addAction(new MenuTitleItem(tr("Midi sends"), this));
+ //addMidiPorts(t, this, gid, false);
}
break;
case MusECore::Track::AUDIO_OUTPUT:
- gid = addWavePorts( t, _pup, gid, -1, -1, false);
- gid = addInPorts( t, _pup, gid, -1, -1, false);
- gid = addGroupPorts(t, _pup, gid, -1, -1, false);
- gid = addAuxPorts( t, _pup, gid, -1, -1, false);
- gid = nonSyntiTrackAddSyntis(t, _pup, gid, false);
+ gid = addWavePorts( t, this, gid, -1, -1, false);
+ gid = addInPorts( t, this, gid, -1, -1, false);
+ gid = addGroupPorts(t, this, gid, -1, -1, false);
+ gid = addAuxPorts( t, this, gid, -1, -1, false);
+ gid = nonSyntiTrackAddSyntis(t, this, gid, false);
break;
case MusECore::Track::WAVE:
- gid = addWavePorts( t, _pup, gid, -1, -1, false);
- gid = addInPorts( t, _pup, gid, -1, -1, false);
- gid = addGroupPorts(t, _pup, gid, -1, -1, false);
- gid = addAuxPorts( t, _pup, gid, -1, -1, false);
- gid = nonSyntiTrackAddSyntis(t, _pup, gid, false);
+ gid = addWavePorts( t, this, gid, -1, -1, false);
+ gid = addInPorts( t, this, gid, -1, -1, false);
+ gid = addGroupPorts(t, this, gid, -1, -1, false);
+ gid = addAuxPorts( t, this, gid, -1, -1, false);
+ gid = nonSyntiTrackAddSyntis(t, this, gid, false);
break;
case MusECore::Track::AUDIO_GROUP:
- gid = addWavePorts( t, _pup, gid, -1, -1, false);
- gid = addInPorts( t, _pup, gid, -1, -1, false);
- gid = addGroupPorts(t, _pup, gid, -1, -1, false);
- gid = addAuxPorts( t, _pup, gid, -1, -1, false);
- gid = nonSyntiTrackAddSyntis(t, _pup, gid, false);
+ gid = addWavePorts( t, this, gid, -1, -1, false);
+ gid = addInPorts( t, this, gid, -1, -1, false);
+ gid = addGroupPorts(t, this, gid, -1, -1, false);
+ gid = addAuxPorts( t, this, gid, -1, -1, false);
+ gid = nonSyntiTrackAddSyntis(t, this, gid, false);
break;
case MusECore::Track::AUDIO_SOFTSYNTH:
- gid = addMultiChannelPorts(t, _pup, gid, false);
+ gid = addMultiChannelPorts(t, this, gid, false);
break;
default:
- _pup->clear();
+ clear();
return;
}
}
@@ -1421,7 +1623,7 @@ void RoutePopupMenu::exec(MusECore::Track* track, bool isOutput)
_isOutMenu = isOutput;
}
prepare();
- _pup->exec();
+ PopupMenu::exec();
}
void RoutePopupMenu::exec(const QPoint& p, MusECore::Track* track, bool isOutput)
@@ -1432,7 +1634,7 @@ void RoutePopupMenu::exec(const QPoint& p, MusECore::Track* track, bool isOutput
_isOutMenu = isOutput;
}
prepare();
- _pup->exec(p);
+ PopupMenu::exec(p);
}
void RoutePopupMenu::popup(const QPoint& p, MusECore::Track* track, bool isOutput)
@@ -1443,7 +1645,7 @@ void RoutePopupMenu::popup(const QPoint& p, MusECore::Track* track, bool isOutpu
_isOutMenu = isOutput;
}
prepare();
- _pup->popup(p);
+ PopupMenu::popup(p);
}
} // namespace MusEGui