962
973
//---------------------------------------------------------
975
//---------------------------------------------------------
977
static int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput)
979
// totalInChannels is only used by syntis.
980
//int channels = (!isOutput || route_track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)route_track)->totalOutChannels() : ((AudioTrack*)route_track)->totalInChannels();
981
//int channels = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels();
982
int toch = ((AudioTrack*)track)->totalOutChannels();
983
// If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user.
984
if(track->channels() == 1)
987
// totalInChannels is only used by syntis.
988
///int chans = (isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels();
990
// Don't add the last stray mono route if the track is stereo.
991
//if(route_track->channels() > 1 && (channel+1 == chans))
994
RouteList* rl = isOutput ? track->outRoutes() : track->inRoutes();
996
QString s(route_track->name());
997
//int trackchans = track->channels();
1000
//if(track->channels() > 1 && (channel+1 < channels))
1001
//if(track->channels() > 1)
1002
//if(route_track->type() == Track::AUDIO_SOFTSYNTH && channels > 2 && track->channels() > 1)
1003
///if(track->type() == Track::AUDIO_SOFTSYNTH && chans > 2 && route_track->channels() > 1)
1004
/// s += QString(" < [%1,%2]").arg(channel+1).arg(channel+2);
1006
//int it = lb->insertItem(s);
1007
lb->insertItem(s, id);
1012
Route r(route_track, isOutput ? ach : bch, channels);
1013
//Route r(route_track, channel);
1015
r.remoteChannel = isOutput ? bch : ach;
1017
mm.insert( pRouteMenuMap(id, r) );
1019
for(iRoute ir = rl->begin(); ir != rl->end(); ++ir)
1021
//if (ir->type == 0 && ir->track == track) {
1022
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channels == channels)
1023
//if(ir->type == Route::TRACK_ROUTE && ir->track == track &&
1024
// (channel != -1 && ir->channel == channel) && (channels != -1 && ir->channels == channels))
1025
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel)
1026
//printf("addMenuItem: ir->type:%d ir->track:%s track:%s ir->channel:%d channel:%d ir->channels:%d channels:%d\n",
1027
// ir->type, ir->track->name().latin1(), track->name().latin1(), ir->channel, channel, ir->channels, channels);
1028
//if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == channel && ir->remoteChannel == r.remoteChannel)
1030
//if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == channel && ir->channels == channels && ir->remoteChannel == r.remoteChannel)
1032
if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->remoteChannel == r.remoteChannel)
1034
int tcompch = r.channel;
1037
int tcompchs = r.channels;
1039
tcompchs = isOutput ? track->channels() : route_track->channels();
1041
int compch = ir->channel;
1044
int compchs = ir->channels;
1046
compchs = isOutput ? track->channels() : ir->track->channels();
1048
//if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == r.channel && ir->channels == r.channels && ir->remoteChannel == r.remoteChannel)
1049
if(compch == tcompch && compchs == tcompchs)
1051
//lb->setItemChecked(it, true);
1052
lb->setItemChecked(id, true);
1060
//---------------------------------------------------------
964
1062
//---------------------------------------------------------
966
static void addAuxPorts(AudioTrack* t, QPopupMenu* lb, RouteList* r)
1064
static int addAuxPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput)
968
1066
AuxList* al = song->auxs();
969
1067
for (iAudioAux i = al->begin(); i != al->end(); ++i) {
970
1068
Track* track = *i;
1071
//id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput);
1072
id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput);
973
1075
QString s(track->name());
974
int it = lb->insertItem(s);
1076
//int it = lb->insertItem(s);
1077
lb->insertItem(s, id);
975
1078
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
976
if (ir->type == 0 && ir->track == track) {
977
lb->setItemChecked(it, true);
1079
//if (ir->type == 0 && ir->track == track) {
1080
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1081
//lb->setItemChecked(it, true);
1082
lb->setItemChecked(id, true);
984
1093
//---------------------------------------------------------
986
1095
//---------------------------------------------------------
988
static void addInPorts(AudioTrack* t, QPopupMenu* lb, RouteList* r)
1097
static int addInPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput)
990
1099
InputList* al = song->inputs();
991
1100
for (iAudioInput i = al->begin(); i != al->end(); ++i) {
992
1101
Track* track = *i;
1104
//id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput);
1105
id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput);
995
1108
QString s(track->name());
996
int it = lb->insertItem(s);
1109
//int it = lb->insertItem(s);
1110
lb->insertItem(s, id);
997
1111
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
998
if (ir->type == 0 && ir->track == track) {
999
lb->setItemChecked(it, true);
1112
//if (ir->type == 0 && ir->track == track) {
1113
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1114
//lb->setItemChecked(it, true);
1115
lb->setItemChecked(id, true);
1006
1126
//---------------------------------------------------------
1008
1128
//---------------------------------------------------------
1010
static void addOutPorts(AudioTrack* t, QPopupMenu* lb, RouteList* r)
1130
static int addOutPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput)
1012
1132
OutputList* al = song->outputs();
1013
1133
for (iAudioOutput i = al->begin(); i != al->end(); ++i) {
1014
1134
Track* track = *i;
1015
1135
if (t == track)
1137
//id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput);
1138
id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput);
1017
1141
QString s(track->name());
1018
int it = lb->insertItem(s);
1142
//int it = lb->insertItem(s);
1143
lb->insertItem(s, id);
1019
1144
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
1020
if (ir->type == 0 && ir->track == track) {
1021
lb->setItemChecked(it, true);
1145
//if (ir->type == 0 && ir->track == track) {
1146
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1147
//lb->setItemChecked(it, true);
1148
lb->setItemChecked(id, true);
1028
1159
//---------------------------------------------------------
1029
1160
// addGroupPorts
1030
1161
//---------------------------------------------------------
1032
static void addGroupPorts(AudioTrack* t, QPopupMenu* lb, RouteList* r)
1163
static int addGroupPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput)
1034
1165
GroupList* al = song->groups();
1035
1166
for (iAudioGroup i = al->begin(); i != al->end(); ++i) {
1036
1167
Track* track = *i;
1037
1168
if (t == track)
1170
//id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput);
1171
id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput);
1039
1174
QString s(track->name());
1040
int it = lb->insertItem(s);
1175
//int it = lb->insertItem(s);
1176
lb->insertItem(s, id);
1041
1177
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
1042
if (ir->type == 0 && ir->track == track) {
1043
lb->setItemChecked(it, true);
1178
//if (ir->type == 0 && ir->track == track) {
1179
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1180
//lb->setItemChecked(it, true);
1181
lb->setItemChecked(id, true);
1050
1192
//---------------------------------------------------------
1051
1193
// addWavePorts
1052
1194
//---------------------------------------------------------
1054
static void addWavePorts(AudioTrack* t, QPopupMenu* lb, RouteList* r)
1196
static int addWavePorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput)
1056
1198
WaveTrackList* al = song->waves();
1057
1199
for (iWaveTrack i = al->begin(); i != al->end(); ++i) {
1058
1200
Track* track = *i;
1059
1201
if (t == track)
1203
//id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput);
1204
id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput);
1061
1207
QString s(track->name());
1062
int it = lb->insertItem(s);
1208
//int it = lb->insertItem(s);
1209
lb->insertItem(s, id);
1063
1210
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
1064
if (ir->type == 0 && ir->track == track) {
1065
lb->setItemChecked(it, true);
1211
//if (ir->type == 0 && ir->track == track) {
1212
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1213
//lb->setItemChecked(it, true);
1214
lb->setItemChecked(id, true);
1072
1225
//---------------------------------------------------------
1073
1226
// addSyntiPorts
1074
1227
//---------------------------------------------------------
1076
static void addSyntiPorts(AudioTrack* t, QPopupMenu* lb, RouteList* r)
1078
SynthIList* al = song->syntis();
1079
for (iSynthI i = al->begin(); i != al->end(); ++i) {
1083
QString s(track->name());
1084
int it = lb->insertItem(s);
1085
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
1086
if (ir->type == 0 && ir->track == track) {
1087
lb->setItemChecked(it, true);
1229
static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id,
1230
RouteMenuMap& mm, int channel, int channels, bool isOutput)
1232
RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes();
1234
SynthIList* al = song->syntis();
1235
for (iSynthI i = al->begin(); i != al->end(); ++i)
1240
//id = addMenuItem(parent, track, lb, r, id, mm, channel, channels);
1243
QString s(track->name());
1244
//int it = lb->insertItem(s);
1245
lb->insertItem(s, id);
1246
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
1247
//if (ir->type == 0 && ir->track == track) {
1248
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1249
//lb->setItemChecked(it, true);
1250
lb->setItemChecked(id, true);
1257
//SynthI* synti = (SynthI*)track;
1259
int toch = ((AudioTrack*)track)->totalOutChannels();
1260
// If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user.
1261
if(track->channels() == 1)
1264
//int chans = synti->totalOutChannels();
1265
//int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels();
1266
// totalInChannels is only used by syntis.
1267
int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels();
1269
//int schans = synti->channels();
1270
//if(schans < chans)
1272
int tchans = (channels != -1) ? channels: t->channels();
1275
// Ignore odd numbered left-over mono channel.
1276
//chans = chans & ~1;
1283
//QPopupMenu* chpup = new QPopupMenu(parent);
1284
//PopupMenu* chpup = new PopupMenu(parent);
1285
//PopupMenu* chpup = new PopupMenu(lb->parent());
1286
PopupMenu* chpup = new PopupMenu();
1287
//strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int)));
1288
lb->connect(chpup, SIGNAL(activated(int)), lb, SIGNAL(activated(int)));
1289
chpup->setCheckable(true);
1290
for(int ch = 0; ch < chans; ++ch)
1294
snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2);
1296
snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1);
1297
chpup->insertItem(QString(buffer), id);
1299
int ach = (channel == -1) ? ch : channel;
1300
int bch = (channel == -1) ? -1 : ch;
1302
Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans);
1303
//Route rt(track, ch);
1304
//rt.remoteChannel = -1;
1305
rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach;
1307
mm.insert( pRouteMenuMap(id, rt) );
1309
for(iRoute ir = rl->begin(); ir != rl->end(); ++ir)
1311
//if (ir->type == 0 && ir->track == track) {
1312
//if(ir->type == 0 && ir->track == track && ir->channels == channels)
1313
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel &&
1314
// ir->channels == channels && ir->remoteChannel == r.remoteChannel)
1315
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch &&
1316
// ir->remoteChannel == rt.remoteChannel)
1317
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel &&
1318
// ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel)
1320
if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel)
1322
int tcompch = rt.channel;
1325
int tcompchs = rt.channels;
1327
tcompchs = isOutput ? t->channels() : track->channels();
1329
int compch = ir->channel;
1332
int compchs = ir->channels;
1334
compchs = isOutput ? t->channels() : ir->track->channels();
1336
if(compch == tcompch && compchs == tcompchs)
1338
chpup->setItemChecked(id, true);
1346
lb->insertItem(track->name(), chpup);
1352
//---------------------------------------------------------
1353
// addMultiChannelOutPorts
1354
//---------------------------------------------------------
1356
static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenuMap& mm, bool isOutput)
1358
int toch = t->totalOutChannels();
1359
// If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user.
1360
if(t->channels() == 1)
1363
// Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less.
1364
//int chans = t->totalOutChannels();
1365
// totalInChannels is only used by syntis.
1366
//int chans = isOutput ? t->totalOutChannels() : t->totalInChannels();
1367
//int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? t->totalOutChannels() : t->totalInChannels();
1368
int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? toch : t->totalInChannels();
1370
// If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user.
1371
//if(t->channels() == 1)
1376
pup->insertItem(new MenuTitleItem("<Mono>"));
1377
//pup->insertSeparator();
1381
// If it's more than one channel, create a sub-menu. If it's just one channel, don't bother with a sub-menu...
1384
//QPopupMenu* chpup = pup;
1385
PopupMenu* chpup = pup;
1387
for(int ch = 0; ch < chans; ++ch)
1389
// If more than one channel, create the sub-menu.
1392
//chpup = new QPopupMenu(parent);
1393
//chpup = new PopupMenu(parent);
1394
//chpup = new PopupMenu(pup->parent());
1395
chpup = new PopupMenu();
1396
//connect(chpup, SIGNAL(activated(int)), strip, SLOT(oRouteMenuActivated(int)));
1397
//strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int)));
1398
pup->connect(chpup, SIGNAL(activated(int)), pup, SIGNAL(activated(int)));
1399
chpup->setCheckable(true);
1407
case Track::AUDIO_INPUT:
1408
//id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1409
id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput);
1411
case Track::AUDIO_GROUP:
1412
case Track::AUDIO_SOFTSYNTH:
1413
//id = addOutPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1414
//id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1415
id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput);
1416
id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput);
1417
//id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1418
//id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput);
1419
id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput);
1421
case Track::AUDIO_AUX:
1422
//id = addOutPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1423
id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput);
1429
case Track::AUDIO_INPUT:
1430
id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput);
1432
case Track::AUDIO_GROUP:
1433
case Track::AUDIO_SOFTSYNTH:
1434
id = addOutPorts(parent, t, chpup, id, mm, ch, isOutput);
1435
id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput);
1436
id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput);
1438
case Track::AUDIO_AUX:
1439
id = addOutPorts(parent, t, chpup, id, mm, ch, isOutput);
1451
case Track::AUDIO_OUTPUT:
1452
//id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1453
//id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1454
//id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1455
//id = addAuxPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1456
id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput);
1457
id = addInPorts(t, chpup, id, mm, ch, 1, isOutput);
1458
id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput);
1459
id = addAuxPorts(t, chpup, id, mm, ch, 1, isOutput);
1460
//id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1461
//id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput);
1462
id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput);
1465
//id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1466
id = addInPorts(t, chpup, id, mm, ch, 1, isOutput);
1468
case Track::AUDIO_SOFTSYNTH:
1469
case Track::AUDIO_GROUP:
1470
//id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1471
//id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1472
//id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1473
id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput);
1474
id = addInPorts(t, chpup, id, mm, ch, 1, isOutput);
1475
id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput);
1476
//id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput);
1477
//id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput);
1478
id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput);
1484
case Track::AUDIO_OUTPUT:
1485
id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput);
1486
id = addInPorts(parent, t, chpup, id, mm, ch, isOutput);
1487
id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput);
1488
id = addAuxPorts(parent, t, chpup, id, mm, ch, isOutput);
1489
id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput);
1492
id = addInPorts(parent, t, chpup, id, mm, ch, isOutput);
1494
case Track::AUDIO_SOFTSYNTH:
1495
case Track::AUDIO_GROUP:
1496
id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput);
1497
id = addInPorts(parent, t, chpup, id, mm, ch, isOutput);
1498
id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput);
1499
id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput);
1507
// If more than one channel, add the created sub-menu.
1511
snprintf(buffer, 128, "%s %d", pup->tr("Channel").latin1(), ch+1);
1512
pup->insertItem(QString(buffer), chpup);
1516
// For stereo listing, ignore odd numbered left-over channels.
1520
// Ignore odd numbered left-over channels.
1521
//int schans = (chans & ~1) - 1;
1523
pup->insertSeparator();
1524
pup->insertItem(new MenuTitleItem("<Stereo>"));
1525
//pup->insertSeparator();
1528
// If it's more than two channels, create a sub-menu. If it's just two channels, don't bother with a sub-menu...
1531
//QPopupMenu* chpup = pup;
1534
// Just do one iteration.
1537
//for(int ch = 0; ch < schans; ++ch)
1538
for(int ch = 0; ch < chans; ++ch)
1540
// If more than two channels, create the sub-menu.
1543
//chpup = new QPopupMenu(parent);
1544
//chpup = new PopupMenu(parent);
1545
//chpup = new PopupMenu(pup->parent());
1546
chpup = new PopupMenu();
1547
//strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int)));
1548
pup->connect(chpup, SIGNAL(activated(int)), pup, SIGNAL(activated(int)));
1549
chpup->setCheckable(true);
1556
case Track::AUDIO_INPUT:
1557
//id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1558
id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput);
1560
case Track::AUDIO_GROUP:
1561
case Track::AUDIO_SOFTSYNTH:
1562
//id = addOutPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1563
//id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1564
id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput);
1565
id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput);
1566
//id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1567
//id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput);
1568
id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput);
1570
case Track::AUDIO_AUX:
1571
//id = addOutPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1572
id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput);
1582
case Track::AUDIO_OUTPUT:
1583
//id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1584
//id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1585
//id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1586
//id = addAuxPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1587
id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput);
1588
id = addInPorts(t, chpup, id, mm, ch, 2, isOutput);
1589
id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput);
1590
id = addAuxPorts(t, chpup, id, mm, ch, 2, isOutput);
1591
//id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1592
//id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput);
1593
id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput);
1596
//id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1597
id = addInPorts(t, chpup, id, mm, ch, 2, isOutput);
1599
case Track::AUDIO_SOFTSYNTH:
1600
case Track::AUDIO_GROUP:
1601
//id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1602
//id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1603
//id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1604
id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput);
1605
id = addInPorts(t, chpup, id, mm, ch, 2, isOutput);
1606
id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput);
1607
//id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput);
1608
//id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput);
1609
id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput);
1616
// If more than two channels, add the created sub-menu.
1620
snprintf(buffer, 128, "%s %d,%d", pup->tr("Channel").latin1(), ch+1, ch+2);
1621
pup->insertItem(QString(buffer), chpup);
1629
//---------------------------------------------------------
1630
// nonSyntiTrackAddSyntis
1631
//---------------------------------------------------------
1633
static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, bool isOutput)
1635
RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes();
1637
SynthIList* al = song->syntis();
1638
for (iSynthI i = al->begin(); i != al->end(); ++i)
1643
//id = addMenuItem(parent, track, lb, r, id, mm, channel, channels);
1646
QString s(track->name());
1647
//int it = lb->insertItem(s);
1648
lb->insertItem(s, id);
1649
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
1650
//if (ir->type == 0 && ir->track == track) {
1651
if (ir->type == 0 && ir->track == track && ir->channels == channels) {
1652
//lb->setItemChecked(it, true);
1653
lb->setItemChecked(id, true);
1660
//SynthI* synti = (SynthI*)track;
1662
int toch = ((AudioTrack*)track)->totalOutChannels();
1663
// If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user.
1664
if(track->channels() == 1)
1667
//int chans = synti->totalOutChannels();
1668
//int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels();
1669
// totalInChannels is only used by syntis.
1670
int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels();
1672
//int schans = synti->channels();
1673
//if(schans < chans)
1675
// int tchans = (channels != -1) ? channels: t->channels();
1678
// Ignore odd numbered left-over mono channel.
1679
//chans = chans & ~1;
1683
//int tchans = (channels != -1) ? channels: t->channels();
1687
//QPopupMenu* chpup = new QPopupMenu(parent);
1688
//PopupMenu* chpup = new PopupMenu(parent);
1689
//PopupMenu* chpup = new PopupMenu(lb->parent());
1690
PopupMenu* chpup = new PopupMenu();
1691
//strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int)));
1692
lb->connect(chpup, SIGNAL(activated(int)), lb, SIGNAL(activated(int)));
1693
chpup->setCheckable(true);
1697
chpup->insertItem(new MenuTitleItem("<Mono>"));
1698
//pup->insertSeparator();
1701
for(int ch = 0; ch < chans; ++ch)
1705
// snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2);
1707
snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1);
1708
chpup->insertItem(QString(buffer), id);
1710
//int ach = (channel == -1) ? ch : channel;
1711
//int bch = (channel == -1) ? -1 : ch;
1715
//Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans);
1716
Route rt(track, isOutput ? bch : ach, 1);
1717
//Route rt(track, ch);
1719
//rt.remoteChannel = -1;
1720
//rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach;
1721
rt.remoteChannel = isOutput ? ach : bch;
1723
mm.insert( pRouteMenuMap(id, rt) );
1725
for(iRoute ir = rl->begin(); ir != rl->end(); ++ir)
1727
//if (ir->type == 0 && ir->track == track) {
1728
//if(ir->type == 0 && ir->track == track && ir->channels == channels)
1729
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel &&
1730
// ir->channels == channels && ir->remoteChannel == r.remoteChannel)
1731
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch &&
1732
// ir->remoteChannel == rt.remoteChannel)
1733
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel &&
1734
// ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel)
1736
if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel)
1738
int tcompch = rt.channel;
1741
int tcompchs = rt.channels;
1743
tcompchs = isOutput ? t->channels() : track->channels();
1745
int compch = ir->channel;
1748
int compchs = ir->channels;
1750
compchs = isOutput ? t->channels() : ir->track->channels();
1752
if(compch == tcompch && compchs == tcompchs)
1754
chpup->setItemChecked(id, true);
1765
// Ignore odd numbered left-over channels.
1766
//int schans = (chans & ~1) - 1;
1768
chpup->insertSeparator();
1769
chpup->insertItem(new MenuTitleItem("<Stereo>"));
1770
//pup->insertSeparator();
1772
for(int ch = 0; ch < chans; ++ch)
1776
snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2);
1778
// snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1);
1779
chpup->insertItem(QString(buffer), id);
1781
//int ach = (channel == -1) ? ch : channel;
1782
//int bch = (channel == -1) ? -1 : ch;
1786
//Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans);
1787
Route rt(track, isOutput ? bch : ach, 2);
1788
//Route rt(track, ch);
1790
//rt.remoteChannel = -1;
1791
//rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach;
1792
rt.remoteChannel = isOutput ? ach : bch;
1794
mm.insert( pRouteMenuMap(id, rt) );
1796
for(iRoute ir = rl->begin(); ir != rl->end(); ++ir)
1798
//if (ir->type == 0 && ir->track == track) {
1799
//if(ir->type == 0 && ir->track == track && ir->channels == channels)
1800
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel &&
1801
// ir->channels == channels && ir->remoteChannel == r.remoteChannel)
1802
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch &&
1803
// ir->remoteChannel == rt.remoteChannel)
1804
//if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel &&
1805
// ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel)
1808
if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel)
1810
int tcompch = rt.channel;
1813
int tcompchs = rt.channels;
1815
tcompchs = isOutput ? t->channels() : track->channels();
1817
int compch = ir->channel;
1820
int compchs = ir->channels;
1822
compchs = isOutput ? t->channels() : ir->track->channels();
1824
if(compch == tcompch && compchs == tcompchs)
1826
chpup->setItemChecked(id, true);
1835
lb->insertItem(track->name(), chpup);
1841
//---------------------------------------------------------
1843
//---------------------------------------------------------
1845
void AudioStrip::iRoutePressed()
1847
//if(track->isMidiTrack() || (track->type() == Track::AUDIO_AUX) || (track->type() == Track::AUDIO_SOFTSYNTH))
1848
if(!track || track->isMidiTrack() || track->type() == Track::AUDIO_AUX)
1850
//_isRoutingPopupMenuMaster = false;
1851
gRoutingPopupMenuMaster = 0;
1855
QPoint ppt = QCursor::pos();
1857
//QPopupMenu* pup = new QPopupMenu(iR);
1858
//PopupMenu* pup = new PopupMenu(iR);
1859
//pup->setCheckable(true);
1861
PopupMenu* pup = muse->getRoutingPopupMenu();
1864
AudioTrack* t = (AudioTrack*)track;
1865
RouteList* irl = t->inRoutes();
1871
// Routes can't be re-read until the message sent from msgAddRoute1()
1872
// has had time to be sent and actually affected the routes.
1875
//QPopupMenu* pup = new QPopupMenu(iR);
1876
//RouteList* irl = t->inRoutes();
1879
gRoutingMenuMap.clear();
1882
switch(track->type())
1884
case Track::AUDIO_INPUT:
1886
pup->setCheckable(true);
1888
for(int i = 0; i < channel; ++i)
1891
snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1);
1892
MenuTitleItem* titel = new MenuTitleItem(QString(buffer));
1893
pup->insertItem(titel);
1895
if(!checkAudioDevice())
1898
gRoutingPopupMenuMaster = 0;
1900
gRoutingMenuMap.clear();
1904
std::list<QString> ol = audioDevice->outputPorts();
1905
for(std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip)
1907
int id = pup->insertItem(*ip, (gid * 16) + i);
1908
//Route dst(*ip, true, i);
1909
Route dst(*ip, true, i, Route::JACK_ROUTE);
1910
gRoutingMenuMap.insert( pRouteMenuMap(id, dst) );
1912
for(iRoute ir = irl->begin(); ir != irl->end(); ++ir)
1916
pup->setItemChecked(id, true);
1922
pup->insertSeparator();
1926
//case Track::AUDIO_OUTPUT:
1928
//case Track::AUDIO_GROUP:
1930
case Track::AUDIO_OUTPUT:
1931
//gid = addWavePorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1932
//gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1933
//gid = addGroupPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1934
//gid = addAuxPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1935
gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
1936
gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
1937
gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false);
1938
gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
1939
//gid = addSyntiPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1940
//gid = nonSyntiTrackAddSyntis(iR, t, pup, gid, gRoutingMenuMap, false);
1941
//gid = nonSyntiTrackAddSyntis(this, iR, t, pup, gid, gRoutingMenuMap, false);
1942
gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false);
1945
//gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1946
gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
1948
case Track::AUDIO_GROUP:
1949
//gid = addWavePorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1950
//gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1951
//gid = addGroupPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1952
gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
1953
gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
1954
gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false);
1955
//gid = addSyntiPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false);
1956
//gid = nonSyntiTrackAddSyntis(iR, t, pup, gid, gRoutingMenuMap, false);
1957
//gid = nonSyntiTrackAddSyntis(this, iR, t, pup, gid, gRoutingMenuMap, false);
1958
gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false);
1961
case Track::AUDIO_SOFTSYNTH:
1962
//gid = addMultiChannelPorts(iR, t, pup, gid, gRoutingMenuMap, false);
1963
//gid = addMultiChannelPorts(this, iR, t, pup, gid, gRoutingMenuMap, false);
1964
gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, false);
1968
gRoutingPopupMenuMaster = 0;
1970
gRoutingMenuMap.clear();
1975
if(pup->count() == 0)
1978
gRoutingPopupMenuMaster = 0;
1979
gRoutingMenuMap.clear();
1984
gIsOutRoutingPopupMenu = false;
1985
gRoutingPopupMenuMaster = this;
1986
connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int)));
1987
connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide()));
1995
//int n = pup->exec(QCursor::pos());
1996
// For some reason, after the first display, it won't redisplay at the same point if the menu is too high.
1997
n = pup->exec(ppt, 0);
2000
QString s(pup->text(n));
2002
if(track->type() == Track::AUDIO_INPUT)
2007
Route srcRoute(s, false, -1, Route::JACK_ROUTE);
2008
Route dstRoute(t, chan);
2010
srcRoute.channel = chan;
2012
iRoute iir = irl->begin();
2013
for(; iir != irl->end(); ++iir)
2015
if(*iir == srcRoute)
2018
if(iir != irl->end())
2020
audio->msgRemoveRoute(srcRoute, dstRoute);
2023
audio->msgAddRoute(srcRoute, dstRoute);
2025
audio->msgUpdateSoloStates();
2026
song->update(SC_ROUTE);
2027
iR->setDown(false); // pup->exec() catches mouse release event
2034
iRouteMenuMap imm = mm.find(n);
2038
iR->setDown(false); // pup->exec() catches mouse release event
2042
//int chan = n >> 16;
2043
//int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo.
2045
//int chan = imm->second.channel;
2046
//int chans = imm->second.channels;
2048
//Route srcRoute(s, false, -1);
2049
//Route srcRoute(s, false, -1, Route::TRACK_ROUTE);
2050
Route &srcRoute = imm->second;
2052
//Route dstRoute(t, -1);
2053
//Route dstRoute(t, chan, chans);
2054
Route dstRoute(t, imm->second.channel, imm->second.channels);
2055
//Route dstRoute(t, imm->second.channel);
2056
dstRoute.remoteChannel = imm->second.remoteChannel;
2058
iRoute iir = irl->begin();
2059
for (; iir != irl->end(); ++iir) {
2060
if (*iir == srcRoute)
2063
if (iir != irl->end()) {
2065
audio->msgRemoveRoute(srcRoute, dstRoute);
2069
audio->msgAddRoute(srcRoute, dstRoute);
2071
audio->msgUpdateSoloStates();
2072
song->update(SC_ROUTE);
2075
//iR->setDown(false); // pup->exec() catches mouse release event
2081
iR->setDown(false); // pup->exec() catches mouse release event
2087
//---------------------------------------------------------
2089
//---------------------------------------------------------
2091
void AudioStrip::updateRouteMenus()
2093
//if(!_isRoutingPopupMenuMaster || track->isMidiTrack() || (track->type() == Track::AUDIO_AUX))
2094
if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack())
2097
///QPopupMenu* pup = new QPopupMenu(oR);
2102
//QPopupMenu* pup = muse->getORoutesPopup();
2103
PopupMenu* pup = muse->getRoutingPopupMenu();
2105
if(pup->count() == 0)
2108
//pup->setCheckable(true);
2109
AudioTrack* t = (AudioTrack*)track;
2110
RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes();
2116
//QPoint ppt = QCursor::pos();
2120
iRoute iorl = orl->begin();
2121
for(; iorl != orl->end(); ++iorl)
2123
iRouteMenuMap imm = ormm->begin();
2124
for(; imm != ormm->end(); ++imm)
2126
if(*iorl == imm->second)
2128
orpup->setItemChecked(imm->first, true);
2132
//if(imm == ormm->end())
2137
//if (iorl == orl->end())
2142
iRouteMenuMap imm = gRoutingMenuMap.begin();
2143
for(; imm != gRoutingMenuMap.end(); ++imm)
2146
iRoute irl = rl->begin();
2147
for(; irl != rl->end(); ++irl)
2149
if(*irl == imm->second)
2155
pup->setItemChecked(imm->first, found);
2162
//---------------------------------------------------------
2163
// routingPopupMenuActivated
2164
//---------------------------------------------------------
2166
void AudioStrip::routingPopupMenuActivated(int n)
2168
if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack())
2171
PopupMenu* pup = muse->getRoutingPopupMenu();
2173
//printf("AudioStrip::routingPopupMenuActivated n:%d count:%d\n", n, pup->count());
2175
if(pup->count() == 0)
2178
AudioTrack* t = (AudioTrack*)track;
2179
RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes();
2181
//QPoint ppt = QCursor::pos();
2186
//printf("AudioStrip::routingPopupMenuActivated n = -1\n");
2193
//printf("AudioStrip::routingPopupMenuActivated n = 0 = tearOffHandle\n");
2194
//oR->setDown(false);
2199
if(gIsOutRoutingPopupMenu)
2201
QString s(pup->text(n));
2203
//printf("AudioStrip::routingPopupMenuActivated text:%s\n", s.latin1());
2205
if(track->type() == Track::AUDIO_OUTPUT)
2211
//Route srcRoute(t, -1);
2212
//Route srcRoute(t, chan, chans);
2213
//Route srcRoute(t, chan, 1);
2214
Route srcRoute(t, chan);
2216
//Route dstRoute(s, true, -1);
2217
Route dstRoute(s, true, -1, Route::JACK_ROUTE);
2218
//Route dstRoute(s, true, 0, Route::JACK_ROUTE);
2220
//srcRoute.channel = dstRoute.channel = chan;
2221
dstRoute.channel = chan;
2222
//dstRoute.channels = 1;
2224
// check if route src->dst exists:
2225
iRoute irl = rl->begin();
2226
for (; irl != rl->end(); ++irl) {
2227
if (*irl == dstRoute)
2230
if (irl != rl->end()) {
2231
// disconnect if route exists
2232
audio->msgRemoveRoute(srcRoute, dstRoute);
2235
// connect if route does not exist
2236
audio->msgAddRoute(srcRoute, dstRoute);
2238
audio->msgUpdateSoloStates();
2239
song->update(SC_ROUTE);
2242
//pup->popup(ppt, 0);
2244
//oR->setDown(false);
2251
iRouteMenuMap imm = gRoutingMenuMap.find(n);
2252
if(imm == gRoutingMenuMap.end())
2255
//oR->setDown(false); // orpup->exec() catches mouse release event
2259
//int chan = n >> 16;
2260
//int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo.
2262
//int chan = imm->second.channel;
2263
//int chans = imm->second.channels;
2265
//Route srcRoute(t, -1);
2266
//srcRoute.remoteChannel = chan;
2267
//Route srcRoute(t, chan, chans);
2268
Route srcRoute(t, imm->second.channel, imm->second.channels);
2269
//Route srcRoute(t, imm->second.channel);
2270
srcRoute.remoteChannel = imm->second.remoteChannel;
2272
//Route dstRoute(s, true, -1);
2273
//Route dstRoute(s, true, -1, Route::TRACK_ROUTE);
2274
Route &dstRoute = imm->second;
2276
// check if route src->dst exists:
2277
iRoute irl = rl->begin();
2278
for (; irl != rl->end(); ++irl) {
2279
if (*irl == dstRoute)
2282
if (irl != rl->end()) {
2283
// disconnect if route exists
2284
audio->msgRemoveRoute(srcRoute, dstRoute);
2287
// connect if route does not exist
2288
audio->msgAddRoute(srcRoute, dstRoute);
2290
audio->msgUpdateSoloStates();
2291
song->update(SC_ROUTE);
2294
//oR->setDown(false);
2298
//pup->popup(ppt, 0);
2302
QString s(pup->text(n));
2304
if(track->type() == Track::AUDIO_INPUT)
2309
Route srcRoute(s, false, -1, Route::JACK_ROUTE);
2310
Route dstRoute(t, chan);
2312
srcRoute.channel = chan;
2314
iRoute irl = rl->begin();
2315
for(; irl != rl->end(); ++irl)
2317
if(*irl == srcRoute)
2320
if(irl != rl->end())
2322
audio->msgRemoveRoute(srcRoute, dstRoute);
2325
audio->msgAddRoute(srcRoute, dstRoute);
2327
audio->msgUpdateSoloStates();
2328
song->update(SC_ROUTE);
2329
//iR->setDown(false); // pup->exec() catches mouse release event
2336
iRouteMenuMap imm = gRoutingMenuMap.find(n);
2337
if(imm == gRoutingMenuMap.end())
2340
//iR->setDown(false); // pup->exec() catches mouse release event
2344
//int chan = n >> 16;
2345
//int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo.
2347
//int chan = imm->second.channel;
2348
//int chans = imm->second.channels;
2350
//Route srcRoute(s, false, -1);
2351
//Route srcRoute(s, false, -1, Route::TRACK_ROUTE);
2352
Route &srcRoute = imm->second;
2354
//Route dstRoute(t, -1);
2355
//Route dstRoute(t, chan, chans);
2356
Route dstRoute(t, imm->second.channel, imm->second.channels);
2357
//Route dstRoute(t, imm->second.channel);
2358
dstRoute.remoteChannel = imm->second.remoteChannel;
2360
iRoute irl = rl->begin();
2361
for (; irl != rl->end(); ++irl) {
2362
if (*irl == srcRoute)
2365
if (irl != rl->end()) {
2367
audio->msgRemoveRoute(srcRoute, dstRoute);
2371
audio->msgAddRoute(srcRoute, dstRoute);
2373
audio->msgUpdateSoloStates();
2374
song->update(SC_ROUTE);
2377
//iR->setDown(false);
2385
//oR->setDown(false);
2388
//---------------------------------------------------------
2390
//---------------------------------------------------------
2392
void AudioStrip::oRoutePressed()
2394
if(!track || track->isMidiTrack())
2396
gRoutingPopupMenuMaster = 0;
2400
QPoint ppt = QCursor::pos();
2402
///QPopupMenu* pup = new QPopupMenu(oR);
2404
PopupMenu* pup = muse->getRoutingPopupMenu();
2407
//pup->setCheckable(true);
2408
AudioTrack* t = (AudioTrack*)track;
2409
RouteList* orl = t->outRoutes();
2415
// Routes can't be re-read until the message sent from msgAddRoute1()
2416
// has had time to be sent and actually affected the routes.
2419
//QPopupMenu* pup = new QPopupMenu(oR);
2420
//RouteList* orl = t->outRoutes();
2423
gRoutingMenuMap.clear();
2427
//orpup->insertTearOffHandle(gid);
2430
switch(track->type())
2432
case Track::AUDIO_OUTPUT:
2434
pup->setCheckable(true);
2436
for(int i = 0; i < channel; ++i)
2439
snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1);
2440
MenuTitleItem* titel = new MenuTitleItem(QString(buffer));
2441
pup->insertItem(titel);
2443
if(!checkAudioDevice())
2446
gRoutingPopupMenuMaster = 0;
2448
gRoutingMenuMap.clear();
2452
std::list<QString> ol = audioDevice->inputPorts();
2453
for(std::list<QString>::iterator ip = ol.begin(); ip != ol.end(); ++ip)
2455
int id = pup->insertItem(*ip, (gid * 16) + i);
2456
//Route dst(*ip, true, i);
2457
Route dst(*ip, true, i, Route::JACK_ROUTE);
2458
gRoutingMenuMap.insert( pRouteMenuMap(id, dst) );
2460
for(iRoute ir = orl->begin(); ir != orl->end(); ++ir)
2464
pup->setItemChecked(id, true);
2470
pup->insertSeparator();
2474
//case Track::AUDIO_INPUT:
2476
//case Track::AUDIO_GROUP:
2478
case Track::AUDIO_SOFTSYNTH:
2479
//addOutPorts(t, pup, orl);
2480
//addGroupPorts(t, pup, orl);
2481
//gid = addMultiChannelPorts(oR, t, pup, gid, gRoutingMenuMap, true);
2482
//gid = addMultiChannelPorts(this, oR, t, pup, gid, gRoutingMenuMap, true);
2483
gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, true);
2486
case Track::AUDIO_INPUT:
2487
//gid = addWavePorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true);
2488
gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
2490
case Track::AUDIO_GROUP:
2491
case Track::AUDIO_AUX:
2492
//case Track::AUDIO_SOFTSYNTH:
2493
//gid = addOutPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true);
2494
//gid = addGroupPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true);
2495
gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
2496
gid = addGroupPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
2497
//gid = addSyntiPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true);
2498
//gid = nonSyntiTrackAddSyntis(oR, t, pup, gid, gRoutingMenuMap, true);
2499
//gid = nonSyntiTrackAddSyntis(this, oR, t, pup, gid, gRoutingMenuMap, true);
2500
gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, true);
2502
//case Track::AUDIO_AUX:
2503
//gid = addOutPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true);
2504
// gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
2509
gRoutingPopupMenuMaster = 0;
2511
gRoutingMenuMap.clear();
2516
if(pup->count() == 0)
2519
gRoutingPopupMenuMaster = 0;
2520
gRoutingMenuMap.clear();
2525
//int n = pup->exec(QCursor::pos());
2526
///n = pup->exec(ppt);
2527
gIsOutRoutingPopupMenu = true;
2528
gRoutingPopupMenuMaster = this;
2529
connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int)));
2530
connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide()));
2540
printf("AudioStrip::oRoutePressed n = 0 = tearOffHandle\n");
2541
oR->setDown(false); // orpup->exec() catches mouse release event
2547
QString s(orpup->text(n));
2549
if(track->type() == Track::AUDIO_OUTPUT)
2555
//Route srcRoute(t, -1);
2556
//Route srcRoute(t, chan, chans);
2557
//Route srcRoute(t, chan, 1);
2558
Route srcRoute(t, chan);
2560
//Route dstRoute(s, true, -1);
2561
Route dstRoute(s, true, -1, Route::JACK_ROUTE);
2562
//Route dstRoute(s, true, 0, Route::JACK_ROUTE);
2564
//srcRoute.channel = dstRoute.channel = chan;
2565
dstRoute.channel = chan;
2566
//dstRoute.channels = 1;
2568
// check if route src->dst exists:
2569
iRoute iorl = orl->begin();
2570
for (; iorl != orl->end(); ++iorl) {
2571
if (*iorl == dstRoute)
2574
if (iorl != orl->end()) {
2575
// disconnect if route exists
2576
audio->msgRemoveRoute(srcRoute, dstRoute);
2579
// connect if route does not exist
2580
audio->msgAddRoute(srcRoute, dstRoute);
2582
audio->msgUpdateSoloStates();
2583
song->update(SC_ROUTE);
2585
oR->setDown(false); // orpup->exec() catches mouse release event
2592
iRouteMenuMap imm = ormm.find(n);
2593
if(imm == ormm.end())
2596
oR->setDown(false); // orpup->exec() catches mouse release event
2600
//int chan = n >> 16;
2601
//int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo.
2603
//int chan = imm->second.channel;
2604
//int chans = imm->second.channels;
2606
//Route srcRoute(t, -1);
2607
//srcRoute.remoteChannel = chan;
2608
//Route srcRoute(t, chan, chans);
2609
Route srcRoute(t, imm->second.channel, imm->second.channels);
2610
//Route srcRoute(t, imm->second.channel);
2611
srcRoute.remoteChannel = imm->second.remoteChannel;
2613
//Route dstRoute(s, true, -1);
2614
//Route dstRoute(s, true, -1, Route::TRACK_ROUTE);
2615
Route &dstRoute = imm->second;
2617
// check if route src->dst exists:
2618
iRoute iorl = orl->begin();
2619
for (; iorl != orl->end(); ++iorl) {
2620
if (*iorl == dstRoute)
2623
if (iorl != orl->end()) {
2624
// disconnect if route exists
2625
audio->msgRemoveRoute(srcRoute, dstRoute);
2628
// connect if route does not exist
2629
audio->msgAddRoute(srcRoute, dstRoute);
2631
audio->msgUpdateSoloStates();
2632
song->update(SC_ROUTE);
2635
//oR->setDown(false); // orpup->exec() catches mouse release event
2641
oR->setDown(false); // pup->exec() catches mouse release event
1094
2646
//---------------------------------------------------------
1095
2647
// iRoutePressed
1096
2648
//---------------------------------------------------------