summaryrefslogtreecommitdiff
path: root/attic/muse2-oom/muse2/muse/confmport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse2-oom/muse2/muse/confmport.cpp')
-rw-r--r--attic/muse2-oom/muse2/muse/confmport.cpp1026
1 files changed, 0 insertions, 1026 deletions
diff --git a/attic/muse2-oom/muse2/muse/confmport.cpp b/attic/muse2-oom/muse2/muse/confmport.cpp
deleted file mode 100644
index 77e6889c..00000000
--- a/attic/muse2-oom/muse2/muse/confmport.cpp
+++ /dev/null
@@ -1,1026 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: confmport.cpp,v 1.9.2.10 2009/12/15 03:39:58 terminator356 Exp $
-//
-// (C) Copyright 2000 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#include <list>
-#include <termios.h>
-#include <iostream>
-#include <stdio.h>
-
-#include <QMenu>
-#include <QMessageBox>
-#include <QPixmap>
-#include <QTableWidget>
-#include <QTableWidgetItem>
-
-#include "confmport.h"
-#include "app.h"
-#include "icons.h"
-#include "globals.h"
-#include "arranger.h"
-#include "midiport.h"
-#include "mididev.h"
-#include "xml.h"
-#include "midisyncimpl.h"
-#include "midifilterimpl.h"
-#include "ctrlcombo.h"
-#include "minstrument.h"
-#include "synth.h"
-#include "audio.h"
-#include "midiseq.h"
-#include "driver/alsamidi.h"
-#include "driver/jackmidi.h"
-#include "audiodev.h"
-#include "menutitleitem.h"
-#include "utils.h"
-
-extern std::vector<Synth*> synthis;
-
-enum { DEVCOL_NO = 0, DEVCOL_GUI, DEVCOL_REC, DEVCOL_PLAY, DEVCOL_INSTR, DEVCOL_NAME,
- //DEVCOL_STATE };
- //DEVCOL_ROUTES, DEVCOL_STATE };
- //DEVCOL_INROUTES, DEVCOL_OUTROUTES, DEVCOL_STATE }; // p3.3.55
- DEVCOL_INROUTES, DEVCOL_OUTROUTES, DEVCOL_DEF_IN_CHANS, DEVCOL_DEF_OUT_CHANS, DEVCOL_STATE };
-
-//---------------------------------------------------------
-// mdevViewItemRenamed
-//---------------------------------------------------------
-
-void MPConfig::mdevViewItemRenamed(QTableWidgetItem* item)
-{
- int col = item->column();
- QString s = item->text();
- //printf("MPConfig::mdevViewItemRenamed col:%d txt:%s\n", col, s.toLatin1().constData());
- if(item == 0)
- return;
- switch(col)
- {
- case DEVCOL_DEF_IN_CHANS:
- {
- QString id = item->tableWidget()->item(item->row(), DEVCOL_NO)->text();
- int no = atoi(id.toLatin1().constData()) - 1;
- if(no < 0 || no >= MIDI_PORTS)
- return;
- midiPorts[no].setDefaultInChannels(((1 << MIDI_CHANNELS) - 1) & string2bitmap(s));
- song->update();
- }
- break;
- case DEVCOL_DEF_OUT_CHANS:
- {
- QString id = item->tableWidget()->item(item->row(), DEVCOL_NO)->text();
- int no = atoi(id.toLatin1().constData()) - 1;
- if(no < 0 || no >= MIDI_PORTS)
- return;
- midiPorts[no].setDefaultOutChannels(((1 << MIDI_CHANNELS) - 1) & string2bitmap(s));
- song->update();
- }
- break;
- case DEVCOL_NAME:
- {
- QString id = item->tableWidget()->item(item->row(), DEVCOL_NO)->text();
- int no = atoi(id.toLatin1().constData()) - 1;
- if(no < 0 || no >= MIDI_PORTS)
- return;
-
- MidiPort* port = &midiPorts[no];
- MidiDevice* dev = port->device();
- // Only Jack midi devices.
- if(!dev || dev->deviceType() != MidiDevice::JACK_MIDI)
- return;
- if(dev->name() == s)
- return;
-
- if(midiDevices.find(s))
- {
- QMessageBox::critical(this,
- tr("MusE: bad device name"),
- tr("please choose a unique device name"),
- QMessageBox::Ok,
- Qt::NoButton,
- Qt::NoButton);
- songChanged(-1);
- return;
- }
- dev->setName(s);
- song->update();
- }
- break;
- default:
- //printf("MPConfig::mdevViewItemRenamed unknown column clicked col:%d txt:%s\n", col, s.toLatin1().constData());
- break;
- }
-}
-
-//---------------------------------------------------------
-// rbClicked
-//---------------------------------------------------------
-
-void MPConfig::rbClicked(QTableWidgetItem* item)
- {
- if (item == 0)
- return;
- QString id = item->tableWidget()->item(item->row(), DEVCOL_NO)->text();
- int no = atoi(id.toLatin1().constData()) - 1;
- if (no < 0 || no >= MIDI_PORTS)
- return;
-
- int n;
- MidiPort* port = &midiPorts[no];
- MidiDevice* dev = port->device();
- int rwFlags = dev ? dev->rwFlags() : 0;
- int openFlags = dev ? dev->openFlags() : 0;
- QTableWidget* listView = item->tableWidget();
- //printf("MPConfig::rbClicked cpt x:%d y:%d\n", cpt.x(), cpt.y());
- //printf("MPConfig::rbClicked new cpt x:%d y:%d\n", cpt.x(), cpt.y());
- //printf("MPConfig::rbClicked new mapped cpt x:%d y:%d\n", cpt.x(), cpt.y());
- QPoint ppt = listView->visualItemRect(item).bottomLeft();
- QPoint mousepos = QCursor::pos();
- //printf("MPConfig::rbClicked ppt x:%d y:%d\n", ppt.x(), ppt.y());
- int col = item->column();
- ppt += QPoint(0, listView->horizontalHeader()->height());
- //printf("MPConfig::rbClicked new ppt x:%d y:%d\n", ppt.x(), ppt.y());
- ppt = listView->mapToGlobal(ppt);
- //printf("MPConfig::rbClicked new mapped ppt x:%d y:%d\n", ppt.x(), ppt.y());
-
- switch (col) {
- case DEVCOL_GUI:
- if (dev == 0)
- //break;
- return;
- if (port->hasGui())
- {
- port->instrument()->showGui(!port->guiVisible());
- item->setIcon(port->guiVisible() ? QIcon(*dotIcon) : QIcon(*dothIcon));
- }
- //break;
- return;
-
- case DEVCOL_REC:
- if (dev == 0 || !(rwFlags & 2))
- //break;
- return;
- openFlags ^= 0x2;
- dev->setOpenFlags(openFlags);
- midiSeq->msgSetMidiDevice(port, dev); // reopen device
- item->setIcon(openFlags & 2 ? QIcon(*dotIcon) : QIcon(*dothIcon));
-
- // p3.3.55
- if(dev->deviceType() == MidiDevice::JACK_MIDI)
- {
- if(dev->openFlags() & 2)
- {
- //item->setPixmap(DEVCOL_INROUTES, *buttondownIcon);
- item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setText(tr("in"));
- }
- else
- {
- //item->setPixmap(DEVCOL_INROUTES, *buttondownIcon);
- item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setText("");
- }
- }
-
- //break;
- return;
-
- case DEVCOL_PLAY:
- if (dev == 0 || !(rwFlags & 1))
- //break;
- return;
- openFlags ^= 0x1;
- dev->setOpenFlags(openFlags);
- midiSeq->msgSetMidiDevice(port, dev); // reopen device
- item->setIcon(openFlags & 1 ? QIcon(*dotIcon) : QIcon(*dothIcon));
-
- // p3.3.55
- if(dev->deviceType() == MidiDevice::JACK_MIDI)
- {
- if(dev->openFlags() & 1)
- {
- //item->setPixmap(DEVCOL_OUTROUTES, *buttondownIcon);
- item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setText(tr("out"));
- }
- else
- {
- //item->setPixmap(DEVCOL_OUTROUTES, *buttondownIcon);
- item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setText("");
- }
- }
-
- //break;
- return;
-
- //case DEVCOL_ROUTES:
- case DEVCOL_INROUTES: // p3.3.55
- case DEVCOL_OUTROUTES:
- {
- if(!checkAudioDevice())
- return;
-
- if(audioDevice->deviceType() != AudioDevice::JACK_AUDIO) // p3.3.52 Only if Jack is running.
- return;
-
- if(!dev)
- return;
-
- // Only Jack midi devices.
- //MidiJackDevice* mjd = dynamic_cast<MidiJackDevice*>(dev);
- //if(!mjd)
- if(dev->deviceType() != MidiDevice::JACK_MIDI)
- return;
-
- //if(!(dev->rwFlags() & 3))
- //if(!(dev->rwFlags() & ((col == DEVCOL_OUTROUTES) ? 1 : 2))) // p3.3.55
- if(!(dev->openFlags() & ((col == DEVCOL_OUTROUTES) ? 1 : 2)))
- return;
-
- //RouteList* rl = (dev->rwFlags() & 1) ? dev->outRoutes() : dev->inRoutes();
- RouteList* rl = (col == DEVCOL_OUTROUTES) ? dev->outRoutes() : dev->inRoutes(); // p3.3.55
- QMenu* pup = 0;
- int gid = 0;
- std::list<QString> sl;
- pup = new QMenu(this);
-
- _redisplay:
- pup->clear();
- gid = 0;
-
- // Jack input ports if device is writable, and jack output ports if device is readable.
- //sl = (dev->rwFlags() & 1) ? audioDevice->inputPorts(true, _showAliases) : audioDevice->outputPorts(true, _showAliases);
- // p3.3.55
- sl = (col == DEVCOL_OUTROUTES) ? audioDevice->inputPorts(true, _showAliases) : audioDevice->outputPorts(true, _showAliases);
-
- //for (int i = 0; i < channel; ++i)
- //{
- //char buffer[128];
- //snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().constData(), i+1);
- //MenuTitleItem* titel = new MenuTitleItem(QString(buffer));
- //pup->insertItem(titel);
-
- QAction* act;
-
- act = pup->addAction(tr("Show first aliases"));
- act->setData(gid);
- act->setCheckable(true);
- act->setChecked(_showAliases == 0);
- ++gid;
-
- act = pup->addAction(tr("Show second aliases"));
- act->setData(gid);
- act->setCheckable(true);
- act->setChecked(_showAliases == 1);
- ++gid;
-
- pup->addSeparator();
- for(std::list<QString>::iterator ip = sl.begin(); ip != sl.end(); ++ip)
- {
- act = pup->addAction(*ip);
- act->setData(gid);
- act->setCheckable(true);
-
- //Route dst(*ip, true, i);
- //Route rt(*ip, (dev->rwFlags() & 1), -1, Route::JACK_ROUTE);
- Route rt(*ip, (col == DEVCOL_OUTROUTES), -1, Route::JACK_ROUTE); // p3.3.55
- for(iRoute ir = rl->begin(); ir != rl->end(); ++ir)
- {
- if (*ir == rt)
- {
- act->setChecked(true);
- break;
- }
- }
- ++gid;
- }
- //if (i+1 != channel)
- // pup->insertSeparator();
- //}
-
- act = pup->exec(ppt);
- if(act)
- {
- n = act->data().toInt();
- if(n == 0) // Show first aliases
- {
- //delete pup;
- if(_showAliases == 0)
- _showAliases = -1;
- else
- _showAliases = 0;
- goto _redisplay; // Go back
- }
- else
- if(n == 1) // Show second aliases
- {
- //delete pup;
- if(_showAliases == 1)
- _showAliases = -1;
- else
- _showAliases = 1;
- goto _redisplay; // Go back
- }
-
- QString s(act->text());
-
- //if(dev->rwFlags() & 1) // Writable
- if(col == DEVCOL_OUTROUTES) // Writable p3.3.55
- {
- Route srcRoute(dev, -1);
- Route dstRoute(s, true, -1, Route::JACK_ROUTE);
-
- iRoute iir = rl->begin();
- for(; iir != rl->end(); ++iir)
- {
- if(*iir == dstRoute)
- break;
- }
- if(iir != rl->end())
- // disconnect
- audio->msgRemoveRoute(srcRoute, dstRoute);
- else
- // connect
- audio->msgAddRoute(srcRoute, dstRoute);
- }
- else
- //if(dev->rwFlags() & 2) // Readable
- //if(col == DEVCOL_INROUTES) // Readable p3.3.55
- {
- Route srcRoute(s, false, -1, Route::JACK_ROUTE);
- Route dstRoute(dev, -1);
-
- iRoute iir = rl->begin();
- for(; iir != rl->end(); ++iir)
- {
- if(*iir == srcRoute)
- break;
- }
- if(iir != rl->end())
- // disconnect
- audio->msgRemoveRoute(srcRoute, dstRoute);
- else
- // connect
- audio->msgAddRoute(srcRoute, dstRoute);
- }
-
- audio->msgUpdateSoloStates();
- song->update(SC_ROUTE);
-
- // p3.3.46
- //delete pup;
- // FIXME:
- // Routes can't be re-read until the message sent from msgAddRoute1()
- // has had time to be sent and actually affected the routes.
- ///goto _redisplay; // Go back
- }
- delete pup;
- //iR->setDown(false); // pup->exec() catches mouse release event
- }
- //break;
- return;
-
- case DEVCOL_DEF_IN_CHANS:
- case DEVCOL_DEF_OUT_CHANS:
- {
- }
- //break;
- return;
-
- case DEVCOL_NAME:
- {
- //printf("MPConfig::rbClicked DEVCOL_NAME\n");
-
- // Did we click in the text area?
- if((mousepos.x() - ppt.x()) > buttondownIcon->width())
- {
- //printf("MPConfig::rbClicked starting item rename... enabled?:%d\n", item->renameEnabled(DEVCOL_NAME));
- // Start the renaming of the cell...
- QModelIndex current = item->tableWidget()->currentIndex();
- if (item->flags() & Qt::ItemIsEditable)
- item->tableWidget()->edit(current.sibling(current.row(), DEVCOL_NAME));
-
- return;
- }
- else
- // We clicked the 'down' button.
- {
- QMenu* pup = new QMenu(this);
-
- QAction* act;
-
- // Could do it this way...
- //act = pup->addAction(tr("Create") + QT_TRANSLATE_NOOP("@default", " Jack") + tr(" input"));
- //act = pup->addAction(tr("Create") + QT_TRANSLATE_NOOP("@default", " Jack") + tr(" output"));
- //act = pup->addAction(tr("Create") + QT_TRANSLATE_NOOP("@default", " Jack") + tr(" combo"));
- // ... or keep it simple and let the user click on the green lights instead.
- act = pup->addAction(tr("Create") + QT_TRANSLATE_NOOP("@default", " Jack") + tr(" device"));
- act->setData(0);
-
- typedef std::map<std::string, int > asmap;
- typedef std::map<std::string, int >::iterator imap;
-
- asmap mapALSA;
- asmap mapJACK;
- asmap mapSYNTH;
-
- int aix = 0x10000000;
- int jix = 0x20000000;
- int six = 0x30000000;
- for(iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i)
- {
- //devALSA = dynamic_cast<MidiAlsaDevice*>(*i);
- //if(devALSA)
- if((*i)->deviceType() == MidiDevice::ALSA_MIDI)
- {
- //mapALSA.insert( std::pair<std::string, int> (std::string(devALSA->name().lower().toLatin1().constData()), ii) );
- mapALSA.insert( std::pair<std::string, int> (std::string((*i)->name().toLatin1().constData()), aix) );
- ++aix;
- }
- else
- if((*i)->deviceType() == MidiDevice::JACK_MIDI)
- {
- //devJACK = dynamic_cast<MidiJackDevice*>(*i);
- //if(devJACK)
- //mapJACK.insert( std::pair<std::string, int> (std::string(devJACK->name().lower().toLatin1().constData()), ii) );
- mapJACK.insert( std::pair<std::string, int> (std::string((*i)->name().toLatin1().constData()), jix) );
- ++jix;
- }
- else
- if((*i)->deviceType() == MidiDevice::SYNTH_MIDI)
- {
- mapSYNTH.insert( std::pair<std::string, int> (std::string((*i)->name().toLatin1().constData()), six) );
- ++six;
- }
- else
- printf("MPConfig::rbClicked unknown midi device: %s\n", (*i)->name().toLatin1().constData());
- }
-
- //int sz = midiDevices.size();
- //if(!mapALSA.empty())
- {
- pup->addSeparator();
- pup->addAction(new MenuTitleItem(QT_TRANSLATE_NOOP("@default", "ALSA:"), pup));
-
- for(imap i = mapALSA.begin(); i != mapALSA.end(); ++i)
- {
- int idx = i->second;
- //if(idx > sz) // Sanity check
- // continue;
- QString s(i->first.c_str());
- MidiDevice* md = midiDevices.find(s, MidiDevice::ALSA_MIDI);
- if(md)
- {
- //if(!dynamic_cast<MidiAlsaDevice*>(md))
- if(md->deviceType() != MidiDevice::ALSA_MIDI)
- continue;
-
- act = pup->addAction(QT_TRANSLATE_NOOP("@default", md->name()));
- act->setData(idx);
- act->setCheckable(true);
- act->setChecked(md == dev);
- }
- }
- }
-
- if(!mapSYNTH.empty())
- {
- pup->addSeparator();
- pup->addAction(new MenuTitleItem(QT_TRANSLATE_NOOP("@default", "SYNTH:"), pup));
-
- for(imap i = mapSYNTH.begin(); i != mapSYNTH.end(); ++i)
- {
- int idx = i->second;
- //if(idx > sz)
- // continue;
- QString s(i->first.c_str());
- MidiDevice* md = midiDevices.find(s, MidiDevice::SYNTH_MIDI);
- if(md)
- {
- //if(!dynamic_cast<MidiJackDevice*>(md))
- if(md->deviceType() != MidiDevice::SYNTH_MIDI)
- continue;
-
- act = pup->addAction(QT_TRANSLATE_NOOP("@default", md->name()));
- act->setData(idx);
- act->setCheckable(true);
- act->setChecked(md == dev);
- }
- }
- }
-
- //if(!mapJACK.empty())
- {
- pup->addSeparator();
- pup->addAction(new MenuTitleItem(QT_TRANSLATE_NOOP("@default", "JACK:"), pup));
-
- for(imap i = mapJACK.begin(); i != mapJACK.end(); ++i)
- {
- int idx = i->second;
- //if(idx > sz)
- // continue;
- QString s(i->first.c_str());
- MidiDevice* md = midiDevices.find(s, MidiDevice::JACK_MIDI);
- if(md)
- {
- //if(!dynamic_cast<MidiJackDevice*>(md))
- if(md->deviceType() != MidiDevice::JACK_MIDI)
- continue;
-
- act = pup->addAction(QT_TRANSLATE_NOOP("@default", md->name()));
- act->setData(idx);
- act->setCheckable(true);
- act->setChecked(md == dev);
- }
- }
- }
-
- act = pup->exec(ppt);
- if(!act)
- {
- delete pup;
- //break;
- return;
- }
-
- n = act->data().toInt();
- //printf("MPConfig::rbClicked n:%d\n", n);
-
- MidiDevice* sdev = 0;
- if(n < 0x10000000)
- {
- delete pup;
- if(n <= 2) // p3.3.55
- {
- sdev = MidiJackDevice::createJackMidiDevice();
-
- if(sdev)
- {
- int of = 3;
- switch(n)
- {
- case 0: of = 3; break;
- case 1: of = 2; break;
- case 2: of = 1; break;
- }
- sdev->setOpenFlags(of);
- }
- }
- }
- else
- {
- int typ;
- if(n < 0x20000000)
- typ = MidiDevice::ALSA_MIDI;
- else
- if(n < 0x30000000)
- typ = MidiDevice::JACK_MIDI;
- else
- //if(n < 0x40000000)
- typ = MidiDevice::SYNTH_MIDI;
-
- sdev = midiDevices.find(act->text(), typ);
- delete pup;
- // Is it the current device? Reset it to <none>.
- if(sdev == dev)
- sdev = 0;
- }
-
- midiSeq->msgSetMidiDevice(port, sdev);
- muse->changeConfig(true); // save configuration file
- song->update();
- }
- }
- //break;
- return;
-
- case DEVCOL_INSTR:
- {
- if (dev && dev->isSynti())
- //break;
- return;
- if (instrPopup == 0)
- instrPopup = new QMenu(this);
- instrPopup->clear();
- for (iMidiInstrument i = midiInstruments.begin(); i
- != midiInstruments.end(); ++i)
- {
- // By T356.
- // Do not list synths. Although it is possible to assign a synth
- // as an instrument to a non-synth device, we should not allow this.
- // (One reason is that the 'show gui' column is then enabled, which
- // makes no sense for a non-synth device).
- SynthI* si = dynamic_cast<SynthI*>(*i);
- if(!si)
- instrPopup->addAction((*i)->iname());
- }
-
- QAction* act = instrPopup->exec(ppt, 0);
- if(!act)
- //break;
- return;
- QString s = act->text();
- item->tableWidget()->item(item->row(), DEVCOL_INSTR)->setText(s);
- for (iMidiInstrument i = midiInstruments.begin(); i
- != midiInstruments.end(); ++i) {
- if ((*i)->iname() == s) {
- port->setInstrument(*i);
- break;
- }
- }
- song->update();
- }
- //break;
- return;
- }
- //songChanged(-1);
- }
-
-//---------------------------------------------------------
-// MPConfig::setToolTip
-//---------------------------------------------------------
-
-void MPConfig::setToolTip(QTableWidgetItem *item, int col)
- {
- switch (col) {
- case DEVCOL_NO: item->setToolTip(tr("Port Number")); break;
- case DEVCOL_GUI: item->setToolTip(tr("Enable gui")); break;
- case DEVCOL_REC: item->setToolTip(tr("Enable reading")); break;
- case DEVCOL_PLAY: item->setToolTip(tr("Enable writing")); break;
- case DEVCOL_INSTR: item->setToolTip(tr("Port instrument")); break;
- case DEVCOL_NAME: item->setToolTip(tr("Midi device name. Click to edit (Jack)")); break;
- //case DEVCOL_ROUTES: item->setToolTip(tr("Jack midi ports")); break;
- case DEVCOL_INROUTES: item->setToolTip(tr("Connections from Jack Midi outputs")); break;
- case DEVCOL_OUTROUTES: item->setToolTip(tr("Connections to Jack Midi inputs")); break;
- case DEVCOL_DEF_IN_CHANS: item->setToolTip(tr("Connect these to new midi tracks")); break;
- case DEVCOL_DEF_OUT_CHANS: item->setToolTip(tr("Connect new midi tracks to this (first listed only)")); break;
- case DEVCOL_STATE: item->setToolTip(tr("Device state")); break;
- default: return;
- }
- }
-
-//---------------------------------------------------------
-// MPConfig::setWhatsThis
-//---------------------------------------------------------
-
-void MPConfig::setWhatsThis(QTableWidgetItem *item, int col)
- {
- switch (col) {
- case DEVCOL_NO:
- item->setWhatsThis(tr("Port Number")); break;
- case DEVCOL_GUI:
- item->setWhatsThis(tr("Enable gui for device")); break;
- case DEVCOL_REC:
- item->setWhatsThis(tr("Enable reading from device")); break;
- case DEVCOL_PLAY:
- item->setWhatsThis(tr("Enable writing to device")); break;
- case DEVCOL_NAME:
- item->setWhatsThis(tr("Name of the midi device associated with"
- " this port number. Click to edit Jack midi name.")); break;
- case DEVCOL_INSTR:
- item->setWhatsThis(tr("Instrument connected to port")); break;
- //case DEVCOL_ROUTES:
- // item->setWhatsThis(tr("Jack midi ports")); break;
- case DEVCOL_INROUTES:
- item->setWhatsThis(tr("Connections from Jack Midi output ports")); break;
- case DEVCOL_OUTROUTES:
- item->setWhatsThis(tr("Connections to Jack Midi input ports")); break;
- case DEVCOL_DEF_IN_CHANS:
- item->setWhatsThis(tr("Connect these channels, on this port, to new midi tracks.\n"
- "Example:\n"
- " 1 2 3 channel 1 2 and 3\n"
- " 1-3 same\n"
- " 1-3 5 channel 1 2 3 and 5\n"
- " all all channels\n"
- " none no channels")); break;
- case DEVCOL_DEF_OUT_CHANS:
- item->setWhatsThis(tr("Connect new midi tracks to these channels, on this port.\n"
- "See default in channels.\n"
- "NOTE: Currently only one output port and channel supported (first found)")); break;
- case DEVCOL_STATE:
- item->setWhatsThis(tr("State: result of opening the device")); break;
- default:
- break;
- }
- }
-
-
-//---------------------------------------------------------
-// MPConfig::addItem()
-//---------------------------------------------------------
-
-void MPConfig::addItem(int row, int col, QTableWidgetItem *item, QTableWidget *table)
- {
- setWhatsThis(item, col);
- table->setItem(row, col, item);
- }
-
-
-//---------------------------------------------------------
-// MPConfig
-// Midi Port Config
-//---------------------------------------------------------
-
-MPConfig::MPConfig(QWidget* parent)
- : QDialog(parent)
- {
- setupUi(this);
- mdevView->setRowCount(MIDI_PORTS);
- mdevView->verticalHeader()->hide();
- mdevView->setSelectionMode(QAbstractItemView::SingleSelection);
- mdevView->setShowGrid(false);
-
- //popup = 0;
- instrPopup = 0;
- _showAliases = -1; // 0: Show first aliases, if available. Nah, stick with -1: none at first.
-
- QStringList columnnames;
- columnnames << tr("Port")
- << tr("GUI")
- << tr("I")
- << tr("O")
- << tr("Instrument")
- << tr("Device Name")
- << tr("In routes")
- << tr("Out routes")
- << tr("Def in ch")
- << tr("Def out ch")
- << tr("State");
-
- mdevView->setColumnCount(columnnames.size());
- mdevView->setHorizontalHeaderLabels(columnnames);
- for (int i = 0; i < columnnames.size(); ++i) {
- setWhatsThis(mdevView->horizontalHeaderItem(i), i);
- setToolTip(mdevView->horizontalHeaderItem(i), i);
- }
- mdevView->setFocusPolicy(Qt::NoFocus);
-
- connect(mdevView, SIGNAL(itemPressed(QTableWidgetItem*)),
- this, SLOT(rbClicked(QTableWidgetItem*)));
- connect(mdevView, SIGNAL(itemChanged(QTableWidgetItem*)),
- this, SLOT(mdevViewItemRenamed(QTableWidgetItem*)));
- connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
-
- connect(synthList, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged()));
- connect(instanceList, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged()));
-
- connect(addInstance, SIGNAL(clicked()), SLOT(addInstanceClicked()));
- connect(synthList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(addInstanceClicked()));
- connect(removeInstance, SIGNAL(clicked()), SLOT(removeInstanceClicked()));
- connect(instanceList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(removeInstanceClicked()));
- songChanged(0);
- }
-
-
-MPConfig::~MPConfig()
-{
-}
-
-//---------------------------------------------------------
-// selectionChanged
-//---------------------------------------------------------
-
-void MPConfig::selectionChanged()
- {
- addInstance->setEnabled(synthList->currentItem());
- removeInstance->setEnabled(instanceList->currentItem());
- }
-
-//---------------------------------------------------------
-// songChanged
-//---------------------------------------------------------
-
-void MPConfig::songChanged(int flags)
- {
- // Is it simply a midi controller value adjustment? Forget it.
- if(flags == SC_MIDI_CONTROLLER)
- return;
-
- // Get currently selected index...
- int no = -1;
- QTableWidgetItem* sitem = mdevView->currentItem();
- if(sitem)
- {
- QString id = sitem->tableWidget()->item(sitem->row(), DEVCOL_NO)->text();
- no = atoi(id.toLatin1().constData()) - 1;
- if(no < 0 || no >= MIDI_PORTS)
- no = -1;
- }
-
- sitem = 0;
- mdevView->clearContents();
- for (int i = MIDI_PORTS-1; i >= 0; --i)
- {
- mdevView->blockSignals(true); // otherwise itemChanged() is triggered and bad things happen.
- MidiPort* port = &midiPorts[i];
- MidiDevice* dev = port->device();
- QString s;
- s.setNum(i+1);
- QTableWidgetItem* itemno = new QTableWidgetItem(s);
- addItem(i, DEVCOL_NO, itemno, mdevView);
- itemno->setTextAlignment(Qt::AlignHCenter);
- itemno->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemstate = new QTableWidgetItem(port->state());
- addItem(i, DEVCOL_STATE, itemstate, mdevView);
- itemstate->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* iteminstr = new QTableWidgetItem(port->instrument() ?
- port->instrument()->iname() :
- tr("<unknown>"));
- addItem(i, DEVCOL_INSTR, iteminstr, mdevView);
- iteminstr->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemname = new QTableWidgetItem;
- addItem(i, DEVCOL_NAME, itemname, mdevView);
- itemname->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemgui = new QTableWidgetItem;
- addItem(i, DEVCOL_GUI, itemgui, mdevView);
- itemgui->setTextAlignment(Qt::AlignHCenter);
- itemgui->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemrec = new QTableWidgetItem;
- addItem(i, DEVCOL_REC, itemrec, mdevView);
- itemrec->setTextAlignment(Qt::AlignHCenter);
- itemrec->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemplay = new QTableWidgetItem;
- addItem(i, DEVCOL_PLAY, itemplay, mdevView);
- itemplay->setTextAlignment(Qt::AlignHCenter);
- itemplay->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemout = new QTableWidgetItem;
- addItem(i, DEVCOL_OUTROUTES, itemout, mdevView);
- itemout->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemin = new QTableWidgetItem;
- addItem(i, DEVCOL_INROUTES, itemin, mdevView);
- itemin->setFlags(Qt::ItemIsEnabled);
- QTableWidgetItem* itemdefin = new QTableWidgetItem(bitmap2String(port->defaultInChannels()));
- addItem(i, DEVCOL_DEF_IN_CHANS, itemdefin, mdevView);
- itemdefin->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
- QTableWidgetItem* itemdefout = new QTableWidgetItem(bitmap2String(port->defaultOutChannels()));
- addItem(i, DEVCOL_DEF_OUT_CHANS, itemdefout, mdevView);
- itemdefout->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
- mdevView->blockSignals(false);
-
-
- if (dev) {
- itemname->setText(dev->name());
-
- // Is it a Jack midi device? Allow renaming.
- //if(dynamic_cast<MidiJackDevice*>(dev))
- if (dev->deviceType() == MidiDevice::JACK_MIDI)
- itemname->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
-
- if (dev->rwFlags() & 0x2)
- itemrec->setIcon(dev->openFlags() & 2 ? QIcon(*dotIcon) : QIcon(*dothIcon));
- else
- itemrec->setIcon(QIcon(QPixmap()));
- if (dev->rwFlags() & 0x1)
- itemplay->setIcon( dev->openFlags() & 1 ? QIcon(*dotIcon) : QIcon(*dothIcon));
- else
- itemplay->setIcon(QIcon(QPixmap()));
- }
- else {
- itemname->setText(tr("<none>"));
- itemgui->setIcon(QIcon(*dothIcon));
- itemrec->setIcon(QIcon(QPixmap()));
- itemplay->setIcon(QIcon(QPixmap()));
- }
- if (port->hasGui()) {
- itemgui->setIcon(port->guiVisible() ? QIcon(*dotIcon) : QIcon(*dothIcon));
- }
- else {
- itemgui->setIcon(QIcon(QPixmap()));
- }
- if (!(dev && dev->isSynti()))
- iteminstr->setIcon(QIcon(*buttondownIcon));
- itemname->setIcon(QIcon(*buttondownIcon));
-
-
- //if(dev && dynamic_cast<MidiJackDevice*>(dev))
- if(dev && dev->deviceType() == MidiDevice::JACK_MIDI)
- {
- //item->setPixmap(DEVCOL_ROUTES, *buttondownIcon);
- //item->setText(DEVCOL_ROUTES, tr("routes"));
-
- // p3.3.55
- if(dev->rwFlags() & 1)
- //if(dev->openFlags() & 1)
- {
- itemout->setIcon(QIcon(*buttondownIcon));
- if(dev->openFlags() & 1)
- itemout->setText(tr("out"));
- }
- if(dev->rwFlags() & 2)
- //if(dev->openFlags() & 2)
- {
- itemin->setIcon(QIcon(*buttondownIcon));
- if(dev->openFlags() & 2)
- itemin->setText(tr("in"));
- }
- }
-
- if(i == no) sitem = itemno;
- }
- if(sitem)
- mdevView->setCurrentItem(sitem);
-
- QString s;
- synthList->clear();
- for (std::vector<Synth*>::iterator i = synthis.begin();
- i != synthis.end(); ++i) {
- //s = (*i)->baseName();
- //s = (*i)->name();
-
- QTreeWidgetItem* item = new QTreeWidgetItem(synthList);
- //item->setText(0, s);
- item->setText(0, QString((*i)->baseName()));
- s.setNum((*i)->instances());
- item->setText(1, s);
- item->setTextAlignment(1, Qt::AlignHCenter);
- //item->setText(2, QString((*i)->baseName()));
- item->setText(2, QString((*i)->name()));
-
- item->setText(3, QString((*i)->version()));
- item->setText(4, QString((*i)->description()));
- }
- instanceList->clear();
- SynthIList* sl = song->syntis();
- for (iSynthI si = sl->begin(); si != sl->end(); ++si) {
- QTreeWidgetItem* iitem = new QTreeWidgetItem(instanceList);
- iitem->setText(0, (*si)->name());
- if ((*si)->midiPort() == -1)
- s = tr("<none>");
- else
- s.setNum((*si)->midiPort() + 1);
- iitem->setText(1, s);
- iitem->setTextAlignment(1, Qt::AlignHCenter);
- }
- synthList->resizeColumnToContents(1);
- mdevView->resizeColumnsToContents();
- mdevView->horizontalHeader()->setResizeMode(DEVCOL_NO ,QHeaderView::Fixed);
- mdevView->horizontalHeader()->setResizeMode(DEVCOL_REC ,QHeaderView::Fixed);
- mdevView->horizontalHeader()->setResizeMode(DEVCOL_PLAY ,QHeaderView::Fixed);
- mdevView->horizontalHeader()->setResizeMode(DEVCOL_GUI ,QHeaderView::Fixed);
- mdevView->horizontalHeader()->setStretchLastSection( true );
- selectionChanged();
- }
-
-//---------------------------------------------------------
-// addInstanceClicked
-//---------------------------------------------------------
-
-void MPConfig::addInstanceClicked()
- {
- QTreeWidgetItem* item = synthList->currentItem();
- if (item == 0)
- return;
- //SynthI *si = song->createSynthI(item->text(2));
- SynthI *si = song->createSynthI(item->text(0), item->text(2));
- if(!si)
- return;
-
- // add instance last in midi device list
- for (int i = 0; i < MIDI_PORTS; ++i) {
- MidiPort* port = &midiPorts[i];
- MidiDevice* dev = port->device();
- if (dev==0) {
- midiSeq->msgSetMidiDevice(port, si);
- muse->changeConfig(true); // save configuration file
- song->update();
- break;
- }
- }
- }
-
-//---------------------------------------------------------
-// removeInstanceClicked
-//---------------------------------------------------------
-
-void MPConfig::removeInstanceClicked()
- {
- QTreeWidgetItem* item = instanceList->currentItem();
- if (item == 0)
- return;
- SynthIList* sl = song->syntis();
- iSynthI ii;
- for (ii = sl->begin(); ii != sl->end(); ++ii) {
- if ((*ii)->iname() == item->text(0))
- break;
- }
- if (ii == sl->end()) {
- printf("synthesizerConfig::removeInstanceClicked(): synthi not found\n");
- return;
- }
- audio->msgRemoveTrack(*ii);
- }
-
-//---------------------------------------------------------
-// configMidiPorts
-//---------------------------------------------------------
-
-void MusE::configMidiPorts()
- {
- if (!midiPortConfig) {
- midiPortConfig = new MPConfig(this);
- }
- midiPortConfig->show();
- midiPortConfig->raise();
- midiPortConfig->activateWindow();
- }
-