summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--muse2/muse/conf.cpp2
-rw-r--r--muse2/muse/confmport.cpp98
-rw-r--r--muse2/muse/confmport.h4
-rw-r--r--muse2/muse/instruments/minstrument.cpp26
-rw-r--r--muse2/muse/instruments/minstrument.h3
-rw-r--r--muse2/muse/widgets/mtrackinfo.cpp508
-rw-r--r--muse2/muse/widgets/mtrackinfo.h3
-rw-r--r--muse2/muse/widgets/mtrackinfobase.ui452
9 files changed, 455 insertions, 648 deletions
diff --git a/ChangeLog b/ChangeLog
index a724e050..8f49d5c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+06.01.2014:
+ - Midi instrument can now be changed from midi track info panel. (Tim)
+ - Some minor code tweaks, code cleanup in mtrackinfo.cpp, confmport.cpp.
+06.01.2014:
+ - Added (and fixed) Roland SD-50 .idf file by Patrick. Needs more work: split in two .idfs (Tim)
+ - Added GM2 .idf file created by me Tim.
+ - Fixed a couple of improper "&apos" xml substitutions in xml.cpp
17.10.2013:
- Fixed drag&drop plugins sometimes not working when built with optimize (rj)
10.10.2013:
diff --git a/muse2/muse/conf.cpp b/muse2/muse/conf.cpp
index 56d648ad..2d2a35e2 100644
--- a/muse2/muse/conf.cpp
+++ b/muse2/muse/conf.cpp
@@ -1625,7 +1625,7 @@ void MidiFileConfig::updateValues()
{
importDefaultInstr->clear();
for(MusECore::iMidiInstrument i = MusECore::midiInstruments.begin(); i != MusECore::midiInstruments.end(); ++i)
- if(!dynamic_cast<MusECore::SynthI*>(*i)) // Sorry, no synths for now.
+ if(!(*i)->isSynti()) // Sorry, no synths for now.
importDefaultInstr->addItem((*i)->iname());
int idx = importDefaultInstr->findText(MusEGlobal::config.importMidiDefaultInstr);
if(idx != -1)
diff --git a/muse2/muse/confmport.cpp b/muse2/muse/confmport.cpp
index b0e68b09..ddd8d2a5 100644
--- a/muse2/muse/confmport.cpp
+++ b/muse2/muse/confmport.cpp
@@ -297,81 +297,6 @@ void MPConfig::mdevViewItemRenamed(QTableWidgetItem* item)
return;
switch(col)
{
- // Enabled: Use editor (Not good - only responds if text changed. We need to respond always).
- // Disabled: Use pop-up menu. DELETETHIS?
- #if 0
- 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;
- int allch = (1 << MIDI_CHANNELS) - 1;
- int ch = allch & string2bitmap(s);
- MusEGlobal::midiPorts[no].setDefaultInChannels(ch);
-
- if(!MusEGlobal::song->midis()->empty() && MusEGlobal::midiPorts[no].device()) // Only if there are tracks, and device is valid.
- {
- int ret = QMessageBox::question(this, tr("Default input connections"),
- tr("Setting will apply to new midi tracks.\n"
- "Do you want to apply to all existing midi tracks now?"),
- QMessageBox::Yes | QMessageBox::No,
- QMessageBox::No);
- if(ret == QMessageBox::Yes)
- {
- MusECore::MidiTrackList* mtl = MusEGlobal::song->midis();
- for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it)
- {
- // Remove all routes from this port to the tracks first.
- MusEGlobal::audio->msgRemoveRoute(MusECore::Route(no, allch), MusECore::Route(*it, allch));
- if(ch)
- MusEGlobal::audio->msgAddRoute(MusECore::Route(no, ch), MusECore::Route(*it, ch));
- }
- }
- }
- MusEGlobal::song->update();
- }
- break;
- #endif
-
- // Enabled: Use editor (Not good - only responds if text changed. We need to respond always).
- // Disabled: Use pop-up menu.
- // Only turn on if and when multiple output routes are supported. DELETETHIS?
- #if 0
- 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;
- int allch = (1 << MIDI_CHANNELS) - 1;
- int ch = allch & string2bitmap(s);
- MusEGlobal::midiPorts[no].setDefaultOutChannels(ch);
-
- if(!MusEGlobal::song->midis()->empty() && MusEGlobal::midiPorts[no].device()) // Only if there are tracks, and device is valid.
- {
- int ret = QMessageBox::question(this, tr("Default output connections"),
- tr("Setting will apply to new midi tracks.\n"
- "Do you want to apply to all existing midi tracks now?"),
- QMessageBox::Yes | QMessageBox::No,
- QMessageBox::No);
- if(ret == QMessageBox::Yes)
- {
- MusECore::MidiTrackList* mtl = MusEGlobal::song->midis();
- for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it)
- {
- // Remove all routes from the tracks to this port first.
- MusEGlobal::audio->msgRemoveRoute(MusECore::Route(*it, allch), MusECore::Route(no, allch));
- if(ch)
- MusEGlobal::audio->msgAddRoute(MusECore::Route(*it, ch), MusECore::Route(no, ch));
- }
- }
- }
- MusEGlobal::song->update();
- }
- break;
- # endif
-
case DEVCOL_NAME:
{
QString id = item->tableWidget()->item(item->row(), DEVCOL_NO)->text();
@@ -652,9 +577,6 @@ void MPConfig::rbClicked(QTableWidgetItem* item)
act->setEnabled(!MusEGlobal::song->midis()->empty()); // && MusEGlobal::midiPorts[no].device()); DELETETHIS
connect(defpup, SIGNAL(triggered(QAction*)), SLOT(changeDefInputRoutes(QAction*)));
- // DELETETHIS 2
- //connect(defpup, SIGNAL(aboutToHide()), MusEGlobal::muse, SLOT(routingPopupMenuAboutToHide()));
- //defpup->popup(QCursor::pos());
defpup->exec(QCursor::pos());
delete defpup;
defpup = 0;
@@ -763,16 +685,12 @@ void MPConfig::rbClicked(QTableWidgetItem* item)
for(imap i = mapALSA.begin(); i != mapALSA.end(); ++i)
{
int idx = i->second;
- //if(idx > sz) // Sanity check DELETETHIS 2
- // continue;
QString s(i->first.c_str());
MusECore::MidiDevice* md = MusEGlobal::midiDevices.find(s, MusECore::MidiDevice::ALSA_MIDI);
if(md)
{
- //if(!dynamic_cast<MidiAlsaDevice*>(md)) DELETETHIS
if(md->deviceType() != MusECore::MidiDevice::ALSA_MIDI)
continue;
-
act = pup->addAction(md->name());
act->setData(idx);
act->setCheckable(true);
@@ -970,20 +888,8 @@ void MPConfig::rbClicked(QTableWidgetItem* item)
if (dev && dev->isSynti())
return;
if (instrPopup == 0)
- instrPopup = new QMenu(this);
- instrPopup->clear();
- for (MusECore::iMidiInstrument i = MusECore::midiInstruments.begin(); i
- != MusECore::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).
- MusECore::SynthI* si = dynamic_cast<MusECore::SynthI*>(*i);
- if(!si)
- instrPopup->addAction((*i)->iname());
- }
+ instrPopup = new PopupMenu(this);
+ MusECore::MidiInstrument::populateInstrPopup(instrPopup, port->instrument(), false);
QAction* act = instrPopup->exec(ppt);
if(!act)
diff --git a/muse2/muse/confmport.h b/muse2/muse/confmport.h
index 39e29bb6..4b5635ae 100644
--- a/muse2/muse/confmport.h
+++ b/muse2/muse/confmport.h
@@ -50,8 +50,8 @@ class PopupMenu;
class MPConfig : public QDialog, Ui::SynthConfigBase {
Q_OBJECT
- QMenu* instrPopup;
- MusEGui::PopupMenu* defpup;
+ PopupMenu* instrPopup;
+ PopupMenu* defpup;
int _showAliases; // -1: None. 0: First aliases. 1: Second aliases etc.
void setWhatsThis(QTableWidgetItem *item, int col);
void setToolTip(QTableWidgetItem *item, int col);
diff --git a/muse2/muse/instruments/minstrument.cpp b/muse2/muse/instruments/minstrument.cpp
index c119f0bc..ecfc2da4 100644
--- a/muse2/muse/instruments/minstrument.cpp
+++ b/muse2/muse/instruments/minstrument.cpp
@@ -472,13 +472,13 @@ MType MidiInstrument::midiType() const
void MidiInstrument::reset(int portNo)
{
MusECore::MidiPort* port = &MusEGlobal::midiPorts[portNo];
- if(port->device() == 0) // p4.0.15
+ if(port->device() == 0)
return;
MusECore::MidiPlayEvent ev;
ev.setType(0x90);
ev.setPort(portNo);
- ev.setTime(0); // p4.0.15
+ ev.setTime(0);
for (int chan = 0; chan < MIDI_CHANNELS; ++chan)
{
@@ -692,7 +692,7 @@ void SysEx::write(int level, Xml& xml)
void MidiInstrument::readMidiState(Xml& xml)
{
- // p4.0.27 A kludge to support old midistates by wrapping them in the proper header.
+ // A kludge to support old midistates by wrapping them in the proper header.
_tmpMidiStateVersion = 1; // Assume old (unmarked) first version 1.
for (;;)
{
@@ -918,7 +918,6 @@ void MidiInstrument::read(Xml& xml)
else if (tag == "Controller") {
MidiController* mc = new MidiController();
mc->read(xml);
- // Added by Tim. Copied from muse 2.
//
// HACK: make predefined "Program" controller overloadable
//
@@ -1041,6 +1040,25 @@ void MidiInstrument::write(int level, Xml& xml)
//---------------------------------------------------------
+// populateInstrPopup (static)
+//---------------------------------------------------------
+
+void MidiInstrument::populateInstrPopup(MusEGui::PopupMenu* menu, MidiInstrument* /*current*/, bool show_synths)
+ {
+ menu->clear();
+ for (MusECore::iMidiInstrument i = MusECore::midiInstruments.begin(); i
+ != MusECore::midiInstruments.end(); ++i)
+ {
+ // 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).
+ if(show_synths || !(*i)->isSynti())
+ menu->addAction((*i)->iname());
+ }
+ }
+
+//---------------------------------------------------------
// populatePatchPopup
//---------------------------------------------------------
diff --git a/muse2/muse/instruments/minstrument.h b/muse2/muse/instruments/minstrument.h
index 5a520e67..4f532719 100644
--- a/muse2/muse/instruments/minstrument.h
+++ b/muse2/muse/instruments/minstrument.h
@@ -202,8 +202,8 @@ class MidiInstrument {
const QString& iname() const { return _name; }
void setIName(const QString& txt) { _name = txt; }
MType midiType() const;
+ virtual bool isSynti() const { return false; }
- //MidiInstrument& uniqueCopy(const MidiInstrument&);
// Assign will 'delete' all existing patches and groups from the instrument.
MidiInstrument& assign(const MidiInstrument&);
QString filePath() const { return _filePath; }
@@ -240,6 +240,7 @@ class MidiInstrument {
virtual void reset(int);
virtual QString getPatchName(int,int,bool) const;
virtual void populatePatchPopup(MusEGui::PopupMenu*, int, bool);
+ static void populateInstrPopup(MusEGui::PopupMenu*, MidiInstrument* current = 0, bool show_synths = false); // Static
void read(Xml&);
void write(int level, Xml&);
diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp
index a73eb212..2872385c 100644
--- a/muse2/muse/widgets/mtrackinfo.cpp
+++ b/muse2/muse/widgets/mtrackinfo.cpp
@@ -125,6 +125,7 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
progRecButton->setFocusPolicy(Qt::NoFocus);
volRecButton->setFocusPolicy(Qt::NoFocus);
panRecButton->setFocusPolicy(Qt::NoFocus);
+ instrPushButton->setFocusPolicy(Qt::NoFocus);
iPatch->setFocusPolicy(Qt::NoFocus);
iOutput->setFocusPolicy(Qt::NoFocus);
@@ -153,33 +154,7 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
//trackNameLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum));
if(selected)
- {
trackNameLabel->setObjectName(selected->cname());
-
- /*QPalette pal;
- QColor c;
- //pal.setColor(trackNameLabel->backgroundRole(), QColor(0, 160, 255)); // Med blue
- if(selected->type() == MusECore::Track::DRUM)
- c = MusEGlobal::config.drumTrackLabelBg;
- else
- c = MusEGlobal::config.midiTrackLabelBg;
-
- QLinearGradient gradient(trackNameLabel->geometry().topLeft(), trackNameLabel->geometry().bottomLeft());
- //gradient.setColorAt(0, c.darker());
- //gradient.setColorAt(0, c);
- //gradient.setColorAt(1, c.darker());
- gradient.setColorAt(0, c.lighter());
- gradient.setColorAt(1, c);
- //palette.setBrush(QPalette::Button, gradient);
- //palette.setBrush(QPalette::Window, gradient);
- pal.setBrush(trackNameLabel->backgroundRole(), gradient);
- trackNameLabel->setPalette(pal); */
- }
- //else
- //{
- // pal.setColor(trackNameLabel->backgroundRole(), MusEGlobal::config.midiTrackLabelBg);
- // trackNameLabel->setPalette(pal);
- //}
//trackNameLabel->setStyleSheet(QString("background-color: ") + QColor(0, 160, 255).name()); // Med blue
trackNameLabel->setWordWrap(true);
@@ -192,18 +167,27 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
setLabelText();
setLabelFont();
+ MusECore::MidiInstrument* minstr = NULL;
+ MusECore::MidiTrack* track = static_cast<MusECore::MidiTrack*>(selected);
+ if(track)
+ minstr = MusEGlobal::midiPorts[track->outPort()].instrument();
+ if(minstr)
+ {
+ instrPushButton->setText(minstr->iname());
+ if(minstr->isSynti())
+ instrPushButton->setEnabled(false);
+ else
+ instrPushButton->setEnabled(true);
+ }
+ else
+ instrPushButton->setText(tr("<unknown>"));
+
//setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding));
- connect(iPatch, SIGNAL(released()), SLOT(instrPopup()));
-
- //pop = new QMenu(iPatch);
- //pop->setCheckable(false); // not needed in Qt4
+ connect(instrPushButton, SIGNAL(released()), SLOT(instrPopup()));
+ connect(iPatch, SIGNAL(released()), SLOT(patchPopup()));
- // Removed by Tim. p3.3.9
- //connect(iName, SIGNAL(returnPressed()), SLOT(iNameChanged()));
-
connect(iOutputChannel, SIGNAL(valueChanged(int)), SLOT(iOutputChannelChanged(int)));
- ///connect(iInputChannel, SIGNAL(textChanged(const QString&)), SLOT(iInputChannelChanged(const QString&)));
connect(iHBank, SIGNAL(valueChanged(int)), SLOT(iProgHBankChanged()));
connect(iLBank, SIGNAL(valueChanged(int)), SLOT(iProgLBankChanged()));
connect(iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged()));
@@ -220,7 +204,6 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
connect(iPan, SIGNAL(valueChanged(int)), SLOT(iPanChanged(int)));
connect(iPan, SIGNAL(ctrlDoubleClicked()), SLOT(iPanDoubleClicked()));
connect(iOutput, SIGNAL(activated(int)), SLOT(iOutputPortChanged(int)));
- ///connect(iInput, SIGNAL(textChanged(const QString&)), SLOT(iInputPortChanged(const QString&)));
connect(recordButton, SIGNAL(clicked()), SLOT(recordClicked()));
connect(progRecButton, SIGNAL(clicked()), SLOT(progRecClicked()));
connect(volRecButton, SIGNAL(clicked()), SLOT(volRecClicked()));
@@ -259,11 +242,6 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
connect(iLen, SIGNAL(escapePressed()), SIGNAL(escapePressed()));
connect(iKompr, SIGNAL(escapePressed()), SIGNAL(escapePressed()));
connect(iPan, SIGNAL(escapePressed()), SIGNAL(escapePressed()));
-
- // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values...
- // Enabled (for Midi Port to Audio Input routing). p4.0.14 Tim.
- //oRButton->setEnabled(false);
- //oRButton->setVisible(false);
connect(oRButton, SIGNAL(pressed()), SLOT(outRoutesPressed()));
connect(MusEGlobal::song, SIGNAL(songChanged(MusECore::SongChangedFlags_t)), SLOT(songChanged(MusECore::SongChangedFlags_t)));
@@ -278,7 +256,6 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
void MidiTrackInfo::heartBeat()
{
- ///if(!showTrackinfoFlag || !selected)
if(_blockHeartbeatCount < 0) // error
{
fprintf(stderr, "ERROR: MidiTrackInfo::heartBeat: _blockHeartbeatCount is < 0, resetting to 0\n");
@@ -297,81 +274,44 @@ void MidiTrackInfo::heartBeat()
int outChannel = track->outChannel();
int outPort = track->outPort();
- ///int ichMask = track->inChannelMask();
- //int iptMask = track->inPortMask();
- ///unsigned int iptMask = track->inPortMask();
-
MusECore::MidiPort* mp = &MusEGlobal::midiPorts[outPort];
- // Set record echo.
- //if(recEchoButton->isChecked() != track->recEcho())
- //{
- // recEchoButton->blockSignals(true);
- // recEchoButton->setChecked(track->recEcho());
- // recEchoButton->blockSignals(false);
- //}
-
// Check for detection of midi general activity on chosen channels...
int mpt = 0;
- //int mch = 0;
MusECore::RouteList* rl = track->inRoutes();
MusECore::ciRoute r = rl->begin();
- //for( ; mpt < MIDI_PORTS; ++mpt)
for( ; r != rl->end(); ++r)
{
- //if(!r->isValid() || ((r->type != Route::ALSA_MIDI_ROUTE) && (r->type != Route::JACK_MIDI_ROUTE)))
- //if(!r->isValid() || (r->type != Route::MIDI_DEVICE_ROUTE))
- if(!r->isValid() || (r->type != MusECore::Route::MIDI_PORT_ROUTE)) // p3.3.49
+ if(!r->isValid() || (r->type != MusECore::Route::MIDI_PORT_ROUTE))
continue;
// NOTE: TODO: Code for channelless events like sysex, ** IF we end up using the 'special channel 17' method.
//if(r->channel == -1)
- if(r->channel == -1 || r->channel == 0) // p3.3.50
+ if(r->channel == -1 || r->channel == 0)
continue;
// No port assigned to the device?
- //mpt = r->device->midiPort();
- mpt = r->midiPort; // p3.3.49
+ mpt = r->midiPort;
if(mpt < 0 || mpt >= MIDI_PORTS)
continue;
- //for(; mch < MIDI_CHANNELS; ++mch)
- //{
- //if(MusEGlobal::midiPorts[mpt].syncInfo().actDetect(mch) && (iptMask & (1 << mpt)) && (ichMask & (1 << mch)) )
- //if((iptMask & bitShiftLU[mpt]) && (MusEGlobal::midiPorts[mpt].syncInfo().actDetectBits() & ichMask) )
- //if(MusEGlobal::midiPorts[mpt].syncInfo().actDetectBits() & bitShiftLU[r->channel])
- if(MusEGlobal::midiPorts[mpt].syncInfo().actDetectBits() & r->channel) // p3.3.50 Use new channel mask.
+ if(MusEGlobal::midiPorts[mpt].syncInfo().actDetectBits() & r->channel)
+ {
+ if(!_midiDetect)
{
- //if(iChanTextLabel->paletteBackgroundColor() != green)
- // iChanTextLabel->setPaletteBackgroundColor(green);
- //if(iChanDetectLabel->pixmap() != greendotIcon)
- if(!_midiDetect)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting green icon\n");
-
- _midiDetect = true;
- //iChanDetectLabel->setPixmap(*greendotIcon);
- iChanDetectLabel->setPixmap(*redLedIcon);
- }
- break;
- }
- //}
+ _midiDetect = true;
+ iChanDetectLabel->setPixmap(*redLedIcon);
+ }
+ break;
+ }
}
// No activity detected?
- //if(mch == MIDI_CHANNELS)
- //if(mpt == MIDI_PORTS)
if(r == rl->end())
{
- //if(iChanTextLabel->paletteBackgroundColor() != darkGreen)
- // iChanTextLabel->setPaletteBackgroundColor(darkGreen);
- //if(iChanDetectLabel->pixmap() != darkgreendotIcon)
if(_midiDetect)
{
- //printf("Arranger::midiTrackInfoHeartBeat setting darkgreen icon\n");
-
_midiDetect = false;
- //iChanDetectLabel->setPixmap(*darkgreendotIcon);
iChanDetectLabel->setPixmap(*darkRedLedIcon);
}
}
@@ -381,8 +321,6 @@ void MidiTrackInfo::heartBeat()
{
if(program != MusECore::CTRL_VAL_UNKNOWN)
{
- //printf("Arranger::midiTrackInfoHeartBeat setting program to unknown\n");
-
program = MusECore::CTRL_VAL_UNKNOWN;
if(iHBank->value() != 0)
{
@@ -427,7 +365,7 @@ void MidiTrackInfo::heartBeat()
}
else
{
- // p4.0.27 The optimizing below, to avoid repeatedly calling getPatchName, generally worked OK.
+ // The optimizing below, to avoid repeatedly calling getPatchName, generally worked OK.
// But Fluidsynth revealed a flaw. When loading a song, updateTrackInfo is called which correctly
// sets program = nprogram. But a synth will not receive midistate sysexes until later.
// With Fluidsynth, that messed up our optimizing because the soundfont has not loaded yet.
@@ -447,30 +385,20 @@ void MidiTrackInfo::heartBeat()
{
program = nprogram;
- //int hb, lb, pr;
- //if (program == MusECore::CTRL_VAL_UNKNOWN) {
- // hb = lb = pr = 0;
- // iPatch->setText("---");
- // }
- //else
- //{
- MusECore::MidiInstrument* instr = mp->instrument();
- const QString name = instr->getPatchName(outChannel, program, track->isDrumTrack());
- if(iPatch->text() != name)
- iPatch->setText(name);
-
- int hb = ((program >> 16) & 0xff) + 1;
- if (hb == 0x100)
- hb = 0;
- int lb = ((program >> 8) & 0xff) + 1;
- if (lb == 0x100)
- lb = 0;
- int pr = (program & 0xff) + 1;
- if (pr == 0x100)
- pr = 0;
- //}
-
- //printf("Arranger::midiTrackInfoHeartBeat setting program\n");
+ MusECore::MidiInstrument* instr = mp->instrument();
+ const QString name = instr->getPatchName(outChannel, program, track->isDrumTrack());
+ if(iPatch->text() != name)
+ iPatch->setText(name);
+
+ int hb = ((program >> 16) & 0xff) + 1;
+ if (hb == 0x100)
+ hb = 0;
+ int lb = ((program >> 8) & 0xff) + 1;
+ if (lb == 0x100)
+ lb = 0;
+ int pr = (program & 0xff) + 1;
+ if (pr == 0x100)
+ pr = 0;
if(iHBank->value() != hb)
{
@@ -498,12 +426,7 @@ void MidiTrackInfo::heartBeat()
int mn = mc->minVal();
int v = mp->hwCtrlState(outChannel, MusECore::CTRL_VOLUME);
if(v == MusECore::CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == MusECore::CTRL_VAL_UNKNOWN)
- // v = 0;
v = mn - 1;
- //}
else
// Auto bias...
v -= mc->bias();
@@ -512,10 +435,7 @@ void MidiTrackInfo::heartBeat()
volume = v;
if(iLautst->value() != v)
{
- //printf("Arranger::midiTrackInfoHeartBeat setting volume\n");
-
iLautst->blockSignals(true);
- //iLautst->setRange(mn - 1, mc->maxVal());
iLautst->setValue(v);
iLautst->blockSignals(false);
}
@@ -525,12 +445,7 @@ void MidiTrackInfo::heartBeat()
mn = mc->minVal();
v = mp->hwCtrlState(outChannel, MusECore::CTRL_PANPOT);
if(v == MusECore::CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == MusECore::CTRL_VAL_UNKNOWN)
- // v = 0;
v = mn - 1;
- //}
else
// Auto bias...
v -= mc->bias();
@@ -539,31 +454,11 @@ void MidiTrackInfo::heartBeat()
pan = v;
if(iPan->value() != v)
{
- //printf("Arranger::midiTrackInfoHeartBeat setting pan\n");
-
iPan->blockSignals(true);
- //iPan->setRange(mn - 1, mc->maxVal());
iPan->setValue(v);
iPan->blockSignals(false);
}
}
-
- // Does it include a midi controller value adjustment? Then handle it...
- //if(flags & SC_MIDI_CONTROLLER)
- // seek();
-
- /*
- if(iTransp->value() != track->transposition)
- iTransp->setValue(track->transposition);
- if(iAnschl->value() != track->velocity)
- iAnschl->setValue(track->velocity);
- if(iVerz->value() != track->delay)
- iVerz->setValue(track->delay);
- if(iLen->value() != track->len)
- iLen->setValue(track->len);
- if(iKompr->value() != track->compression)
- iKompr->setValue(track->compression);
- */
}
break;
@@ -583,8 +478,6 @@ void MidiTrackInfo::heartBeat()
void MidiTrackInfo::configChanged()
{
- //printf("MidiTrackInfo::configChanged\n");
-
//if (MusEGlobal::config.canvasBgPixmap.isEmpty()) {
// canvas->setBg(MusEGlobal::config.partCanvasBg);
// canvas->setBg(QPixmap());
@@ -629,7 +522,6 @@ void MidiTrackInfo::setLabelText()
{
QPalette pal;
QColor c;
- //pal.setColor(trackNameLabel->backgroundRole(), QColor(0, 160, 255)); // Med blue
if(track->type() == MusECore::Track::DRUM)
c = MusEGlobal::config.drumTrackLabelBg;
else if (track->type() == MusECore::Track::MIDI)
@@ -640,14 +532,9 @@ void MidiTrackInfo::setLabelText()
printf("THIS SHOULD NEVER HAPPEN: track is not a MIDI track in MidiTrackInfo::setLabelText()!\n");
QLinearGradient gradient(trackNameLabel->geometry().topLeft(), trackNameLabel->geometry().bottomLeft());
- //gradient.setColorAt(0, c.darker());
- //gradient.setColorAt(0, c);
- //gradient.setColorAt(1, c.darker());
gradient.setColorAt(0, c);
gradient.setColorAt(0.5, c.lighter());
gradient.setColorAt(1, c);
- //palette.setBrush(QPalette::Button, gradient);
- //palette.setBrush(QPalette::Window, gradient);
pal.setBrush(trackNameLabel->backgroundRole(), gradient);
trackNameLabel->setPalette(pal);
}
@@ -659,10 +546,6 @@ void MidiTrackInfo::setLabelText()
void MidiTrackInfo::setLabelFont()
{
- //if(!selected)
- // return;
- //MusECore::MidiTrack* track = (MusECore::MidiTrack*)selected;
-
// Use the new font #6 I created just for these labels (so far).
// Set the label's font.
trackNameLabel->setFont(MusEGlobal::config.fonts[6]);
@@ -686,8 +569,8 @@ void MidiTrackInfo::iOutputChannelChanged(int channel)
track->setOutChanAndUpdate(channel);
MusEGlobal::audio->msgIdle(false);
- MusEGlobal::audio->msgUpdateSoloStates(); // p4.0.14
- MusEGlobal::song->update(SC_MIDI_TRACK_PROP); //
+ MusEGlobal::audio->msgUpdateSoloStates();
+ MusEGlobal::song->update(SC_MIDI_TRACK_PROP);
--_blockHeartbeatCount;
}
}
@@ -711,8 +594,8 @@ void MidiTrackInfo::iOutputPortChanged(int index)
track->setOutPortAndUpdate(port_num);
MusEGlobal::audio->msgIdle(false);
- MusEGlobal::audio->msgUpdateSoloStates(); // p4.0.14
- MusEGlobal::song->update(SC_MIDI_TRACK_PROP); //
+ MusEGlobal::audio->msgUpdateSoloStates();
+ MusEGlobal::song->update(SC_MIDI_TRACK_PROP);
--_blockHeartbeatCount;
}
@@ -727,7 +610,6 @@ void MidiTrackInfo::inRoutesPressed()
if(!selected->isMidiTrack())
return;
- //RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu();
RoutePopupMenu* pup = new RoutePopupMenu();
pup->exec(QCursor::pos(), selected, false);
delete pup;
@@ -745,7 +627,6 @@ void MidiTrackInfo::outRoutesPressed()
if(!selected->isMidiTrack())
return;
- //RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu();
RoutePopupMenu* pup = new RoutePopupMenu();
pup->exec(QCursor::pos(), selected, true);
delete pup;
@@ -1128,13 +1009,11 @@ void MidiTrackInfo::iPanChanged(int val)
}
//---------------------------------------------------------
-// instrPopupActivated
+// patchPopupActivated
//---------------------------------------------------------
-void MidiTrackInfo::instrPopupActivated(QAction* act)
+void MidiTrackInfo::patchPopupActivated(QAction* act)
{
- //printf("MidiTrackInfo::instrPopupActivated\n");
-
if(act && selected)
{
int rv = act->data().toInt();
@@ -1160,6 +1039,46 @@ void MidiTrackInfo::instrPopup()
{
if(!selected)
return;
+ MusECore::MidiTrack* track = static_cast<MusECore::MidiTrack*>(selected);
+ int port = track->outPort();
+ MusECore::MidiInstrument* instr = MusEGlobal::midiPorts[port].instrument();
+ PopupMenu* pup = new PopupMenu(false);
+
+ MusECore::MidiInstrument::populateInstrPopup(pup, instr, false);
+
+ if(pup->actions().count() == 0)
+ {
+ delete pup;
+ return;
+ }
+
+ QAction *act = pup->exec(instrPushButton->mapToGlobal(QPoint(10,5)));
+ if(act)
+ {
+ QString s = act->text();
+ for (MusECore::iMidiInstrument i = MusECore::midiInstruments.begin(); i != MusECore::midiInstruments.end(); ++i)
+ {
+ if((*i)->iname() == s)
+ {
+ MusEGlobal::midiPorts[port].setInstrument(*i);
+ // Make sure device initializations are sent if necessary.
+ MusEGlobal::audio->msgInitMidiDevices(false); // false = Don't force
+ MusEGlobal::song->update();
+ break;
+ }
+ }
+ }
+ delete pup;
+ }
+
+//---------------------------------------------------------
+// patchPopup
+//---------------------------------------------------------
+
+void MidiTrackInfo::patchPopup()
+ {
+ if(!selected)
+ return;
MusECore::MidiTrack* track = (MusECore::MidiTrack*)selected;
int channel = track->outChannel();
int port = track->outPort();
@@ -1174,8 +1093,7 @@ void MidiTrackInfo::instrPopup()
return;
}
- connect(pup, SIGNAL(triggered(QAction*)), SLOT(instrPopupActivated(QAction*)));
- //connect(pup, SIGNAL(hovered(QAction*)), SLOT(instrPopupActivated(QAction*)));
+ connect(pup, SIGNAL(triggered(QAction*)), SLOT(patchPopupActivated(QAction*)));
QAction *act = pup->exec(iPatch->mapToGlobal(QPoint(10,5)));
if(act)
@@ -1234,20 +1152,10 @@ void MidiTrackInfo::iProgHBankDoubleCLicked()
if(lastv == MusECore::CTRL_VAL_UNKNOWN)
{
int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
if(kiv == MusECore::CTRL_VAL_UNKNOWN)
kiv = 0;
- //else
- //{
- //if(kiv < mctrl->minVal())
- // kiv = mctrl->minVal();
- //if(kiv > mctrl->maxVal())
- // kiv = mctrl->maxVal();
- //kiv += mctrl->bias();
- //}
++_blockHeartbeatCount;
- //MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, num, kiv);
MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, kiv);
MusEGlobal::audio->msgPlayMidiEvent(&ev);
--_blockHeartbeatCount;
@@ -1290,8 +1198,6 @@ void MidiTrackInfo::iProgHBankDoubleCLicked()
MusEGlobal::audio->msgSetHwCtrlState(mp, chan, MusECore::CTRL_PROGRAM, MusECore::CTRL_VAL_UNKNOWN);
--_blockHeartbeatCount;
}
-// MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, curv);
-// MusEGlobal::audio->msgPlayMidiEvent(&ev);
}
MusEGlobal::song->update(SC_MIDI_CONTROLLER);
@@ -1324,17 +1230,8 @@ void MidiTrackInfo::iProgLBankDoubleCLicked()
if(lastv == MusECore::CTRL_VAL_UNKNOWN)
{
int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
if(kiv == MusECore::CTRL_VAL_UNKNOWN)
kiv = 0xff0000;
- //else
- //{
- //if(kiv < mctrl->minVal())
- // kiv = mctrl->minVal();
- //if(kiv > mctrl->maxVal())
- // kiv = mctrl->maxVal();
- //kiv += mctrl->bias();
- //}
//MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, num, kiv);
MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, kiv);
@@ -1420,19 +1317,9 @@ void MidiTrackInfo::iProgramDoubleClicked()
if(lastv == MusECore::CTRL_VAL_UNKNOWN)
{
int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
if(kiv == MusECore::CTRL_VAL_UNKNOWN)
kiv = 0xffff00;
- //else
- //{
- //if(kiv < mctrl->minVal())
- // kiv = mctrl->minVal();
- //if(kiv > mctrl->maxVal())
- // kiv = mctrl->maxVal();
- //kiv += mctrl->bias();
- //}
- //MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, num, kiv);
MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, kiv);
MusEGlobal::audio->msgPlayMidiEvent(&ev);
}
@@ -1478,7 +1365,6 @@ void MidiTrackInfo::iLautstDoubleClicked()
if(lastv == MusECore::CTRL_VAL_UNKNOWN)
{
int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
if(kiv == MusECore::CTRL_VAL_UNKNOWN)
// Set volume to 78% of range, so that if range is 0 - 127, then value is 100.
kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.7874);
@@ -1536,7 +1422,6 @@ void MidiTrackInfo::iPanDoubleClicked()
if(lastv == MusECore::CTRL_VAL_UNKNOWN)
{
int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
if(kiv == MusECore::CTRL_VAL_UNKNOWN)
// Set volume to 50% of range, so that if range is 0 - 127, then value is 64.
kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.5);
@@ -1608,22 +1493,17 @@ void MidiTrackInfo::updateTrackInfo(MusECore::SongChangedFlags_t flags)
iKompr->blockSignals(false);
int outChannel = track->outChannel();
- ///int inChannel = track->inChannelMask();
int outPort = track->outPort();
- //int inPort = track->inPortMask();
- ///unsigned int inPort = track->inPortMask();
iOutput->blockSignals(true);
- //iInput->clear();
iOutput->clear();
int item_idx = 0;
for (int i = 0; i < MIDI_PORTS; ++i) {
MusECore::MidiDevice* md = MusEGlobal::midiPorts[i].device();
- if(!md) // In the case of this combo box, don't bother listing empty ports. p4.0.41
+ if(!md) // In the case of this combo box, don't bother listing empty ports.
continue;
- //if(!(md->rwFlags() & 1 || md->isSynti()) && (i != outPort))
- if(!(md->rwFlags() & 1) && (i != outPort)) // Only writeable ports, or current one. p4.0.41
+ if(!(md->rwFlags() & 1) && (i != outPort)) // Only writeable ports, or current one.
continue;
QString name;
name.sprintf("%d:%s", i+1, MusEGlobal::midiPorts[i].portname().toLatin1().constData());
@@ -1634,21 +1514,21 @@ void MidiTrackInfo::updateTrackInfo(MusECore::SongChangedFlags_t flags)
}
iOutput->blockSignals(false);
- //iInput->setText(bitmap2String(inPort));
- ///iInput->setText(u32bitmap2String(inPort));
-
- //iInputChannel->setText(bitmap2String(inChannel));
-
- // Removed by Tim. p3.3.9
- //if (iName->text() != selected->name()) {
- // iName->setText(selected->name());
- // iName->home(false);
- // }
+ MusECore::MidiInstrument* minstr = MusEGlobal::midiPorts[outPort].instrument();
+ if(minstr)
+ {
+ instrPushButton->setText(minstr->iname());
+ if(minstr->isSynti())
+ instrPushButton->setEnabled(false);
+ else
+ instrPushButton->setEnabled(true);
+ }
+ else
+ instrPushButton->setText(tr("<unknown>"));
iOutputChannel->blockSignals(true);
iOutputChannel->setValue(outChannel+1);
iOutputChannel->blockSignals(false);
- ///iInputChannel->setText(bitmap2String(inChannel));
// Set record echo.
if(recEchoButton->isChecked() != track->recEcho())
@@ -1658,112 +1538,91 @@ void MidiTrackInfo::updateTrackInfo(MusECore::SongChangedFlags_t flags)
recEchoButton->blockSignals(false);
}
recEchoButton->setIcon(track->recEcho() ? QIcon(*midiThruOnIcon) : QIcon(*midiThruOffIcon));
- //recEchoButton->setIconSize(midiThruOnIcon->size());
}
- int outChannel = track->outChannel();
- int outPort = track->outPort();
- MusECore::MidiPort* mp = &MusEGlobal::midiPorts[outPort];
- int nprogram = mp->hwCtrlState(outChannel, MusECore::CTRL_PROGRAM);
+ int outChannel = track->outChannel();
+ int outPort = track->outPort();
+ MusECore::MidiPort* mp = &MusEGlobal::midiPorts[outPort];
+ int nprogram = mp->hwCtrlState(outChannel, MusECore::CTRL_PROGRAM);
+ if(nprogram == MusECore::CTRL_VAL_UNKNOWN)
+ {
+ iHBank->blockSignals(true);
+ iLBank->blockSignals(true);
+ iProgram->blockSignals(true);
+ iHBank->setValue(0);
+ iLBank->setValue(0);
+ iProgram->setValue(0);
+ iHBank->blockSignals(false);
+ iLBank->blockSignals(false);
+ iProgram->blockSignals(false);
+
+ program = MusECore::CTRL_VAL_UNKNOWN;
+ nprogram = mp->lastValidHWCtrlState(outChannel, MusECore::CTRL_PROGRAM);
if(nprogram == MusECore::CTRL_VAL_UNKNOWN)
- {
- iHBank->blockSignals(true);
- iLBank->blockSignals(true);
- iProgram->blockSignals(true);
- iHBank->setValue(0);
- iLBank->setValue(0);
- iProgram->setValue(0);
- iHBank->blockSignals(false);
- iLBank->blockSignals(false);
- iProgram->blockSignals(false);
-
- program = MusECore::CTRL_VAL_UNKNOWN;
- nprogram = mp->lastValidHWCtrlState(outChannel, MusECore::CTRL_PROGRAM);
- if(nprogram == MusECore::CTRL_VAL_UNKNOWN)
- //iPatch->setText(QString("<unknown>"));
- iPatch->setText(tr("<unknown>"));
- else
- {
- MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(outChannel, nprogram, track->isDrumTrack()));
- }
- }
+ iPatch->setText(tr("<unknown>"));
else
- //if (program != nprogram)
{
- program = nprogram;
+ MusECore::MidiInstrument* instr = mp->instrument();
+ iPatch->setText(instr->getPatchName(outChannel, nprogram, track->isDrumTrack()));
+ }
+ }
+ else
+ {
+ program = nprogram;
- //int hb, lb, pr;
- //if (program == MusECore::CTRL_VAL_UNKNOWN) {
- // hb = lb = pr = 0;
- // iPatch->setText("---");
- // }
- //else
- //{
- MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(outChannel, program, track->isDrumTrack()));
-
- int hb = ((program >> 16) & 0xff) + 1;
- if (hb == 0x100)
- hb = 0;
- int lb = ((program >> 8) & 0xff) + 1;
- if (lb == 0x100)
- lb = 0;
- int pr = (program & 0xff) + 1;
- if (pr == 0x100)
- pr = 0;
- //}
- iHBank->blockSignals(true);
- iLBank->blockSignals(true);
- iProgram->blockSignals(true);
-
- iHBank->setValue(hb);
- iLBank->setValue(lb);
- iProgram->setValue(pr);
-
- iHBank->blockSignals(false);
- iLBank->blockSignals(false);
- iProgram->blockSignals(false);
- }
-
- MusECore::MidiController* mc = mp->midiController(MusECore::CTRL_VOLUME);
- int mn = mc->minVal();
- int v = mp->hwCtrlState(outChannel, MusECore::CTRL_VOLUME);
- volume = v;
- if(v == MusECore::CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == MusECore::CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mn - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- iLautst->blockSignals(true);
- iLautst->setRange(mn - 1, mc->maxVal());
- iLautst->setValue(v);
- iLautst->blockSignals(false);
-
- mc = mp->midiController(MusECore::CTRL_PANPOT);
- mn = mc->minVal();
- v = mp->hwCtrlState(outChannel, MusECore::CTRL_PANPOT);
- pan = v;
- if(v == MusECore::CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == MusECore::CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mn - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- iPan->blockSignals(true);
- iPan->setRange(mn - 1, mc->maxVal());
- iPan->setValue(v);
- iPan->blockSignals(false);
- //}
+ MusECore::MidiInstrument* instr = mp->instrument();
+ iPatch->setText(instr->getPatchName(outChannel, program, track->isDrumTrack()));
+
+ int hb = ((program >> 16) & 0xff) + 1;
+ if (hb == 0x100)
+ hb = 0;
+ int lb = ((program >> 8) & 0xff) + 1;
+ if (lb == 0x100)
+ lb = 0;
+ int pr = (program & 0xff) + 1;
+ if (pr == 0x100)
+ pr = 0;
+
+ iHBank->blockSignals(true);
+ iLBank->blockSignals(true);
+ iProgram->blockSignals(true);
+
+ iHBank->setValue(hb);
+ iLBank->setValue(lb);
+ iProgram->setValue(pr);
+
+ iHBank->blockSignals(false);
+ iLBank->blockSignals(false);
+ iProgram->blockSignals(false);
+ }
+
+ MusECore::MidiController* mc = mp->midiController(MusECore::CTRL_VOLUME);
+ int mn = mc->minVal();
+ int v = mp->hwCtrlState(outChannel, MusECore::CTRL_VOLUME);
+ volume = v;
+ if(v == MusECore::CTRL_VAL_UNKNOWN)
+ v = mn - 1;
+ else
+ // Auto bias...
+ v -= mc->bias();
+ iLautst->blockSignals(true);
+ iLautst->setRange(mn - 1, mc->maxVal());
+ iLautst->setValue(v);
+ iLautst->blockSignals(false);
+
+ mc = mp->midiController(MusECore::CTRL_PANPOT);
+ mn = mc->minVal();
+ v = mp->hwCtrlState(outChannel, MusECore::CTRL_PANPOT);
+ pan = v;
+ if(v == MusECore::CTRL_VAL_UNKNOWN)
+ v = mn - 1;
+ else
+ // Auto bias...
+ v -= mc->bias();
+ iPan->blockSignals(true);
+ iPan->setRange(mn - 1, mc->maxVal());
+ iPan->setValue(v);
+ iPan->blockSignals(false);
--_blockHeartbeatCount;
}
@@ -1888,7 +1747,6 @@ void MidiTrackInfo::recordClicked()
void MidiTrackInfo::resizeEvent(QResizeEvent* ev)
{
- //printf("MidiTrackInfo::resizeEvent\n");
QWidget::resizeEvent(ev);
setLabelText();
setLabelFont();
diff --git a/muse2/muse/widgets/mtrackinfo.h b/muse2/muse/widgets/mtrackinfo.h
index bb14423d..7a992a8c 100644
--- a/muse2/muse/widgets/mtrackinfo.h
+++ b/muse2/muse/widgets/mtrackinfo.h
@@ -66,6 +66,7 @@ class MidiTrackInfo : public QWidget, public Ui::MidiTrackInfoBase
void iKomprChanged(int);
void iPanChanged(int);
void iPanDoubleClicked();
+ void patchPopup();
void instrPopup();
void recordClicked();
void progRecClicked();
@@ -74,7 +75,7 @@ class MidiTrackInfo : public QWidget, public Ui::MidiTrackInfoBase
void recEchoToggled(bool);
void inRoutesPressed();
void outRoutesPressed();
- void instrPopupActivated(QAction*);
+ void patchPopupActivated(QAction*);
protected slots:
virtual void heartBeat();
diff --git a/muse2/muse/widgets/mtrackinfobase.ui b/muse2/muse/widgets/mtrackinfobase.ui
index f566d207..94bff6e2 100644
--- a/muse2/muse/widgets/mtrackinfobase.ui
+++ b/muse2/muse/widgets/mtrackinfobase.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>94</width>
- <height>417</height>
+ <width>93</width>
+ <height>437</height>
</rect>
</property>
<property name="sizePolicy">
@@ -59,16 +59,103 @@
<property name="spacing">
<number>0</number>
</property>
- <item row="0" column="0" colspan="2">
- <widget class="QLabel" name="trackNameLabel">
+ <item row="7" column="0">
+ <widget class="MusEGui::SpinBox" name="iTransp">
<property name="sizePolicy">
- <sizepolicy hsizetype="Ignored" vsizetype="Minimum">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="minimum">
+ <number>-127</number>
+ </property>
+ <property name="maximum">
+ <number>127</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ <item row="10" column="0">
+ <widget class="MusEGui::SpinBox" name="iLen">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string>%</string>
+ </property>
+ <property name="minimum">
+ <number>25</number>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="TextLabel2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Out ch</string>
+ </property>
<property name="wordWrap">
- <bool>true</bool>
+ <bool>false</bool>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="indent">
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ <item row="11" column="0">
+ <widget class="MusEGui::SpinBox" name="iAnschl">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>8</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-127</number>
+ </property>
+ <property name="maximum">
+ <number>127</number>
+ </property>
+ <property name="value">
+ <number>0</number>
</property>
</widget>
</item>
@@ -85,54 +172,42 @@
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="MusEGui::SpinBox" name="iOutputChannel">
+ <item row="8" column="0" rowspan="2">
+ <widget class="MusEGui::SpinBox" name="iVerz">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="toolTip">
- <string>output channel</string>
- </property>
- <property name="whatsThis">
- <string>all midi events are sent to this output channel</string>
- </property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
<property name="minimum">
- <number>1</number>
+ <number>-1000</number>
</property>
<property name="maximum">
- <number>16</number>
+ <number>1000</number>
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLabel" name="TextLabel2">
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="trackNameLabel">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <sizepolicy hsizetype="Ignored" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text">
- <string>Out ch</string>
- </property>
<property name="wordWrap">
- <bool>false</bool>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="indent">
- <number>1</number>
+ <bool>true</bool>
</property>
</widget>
</item>
- <item row="3" column="0" colspan="2">
+ <item row="6" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
@@ -251,33 +326,8 @@
</item>
</layout>
</item>
- <item row="4" column="0">
- <widget class="MusEGui::SpinBox" name="iTransp">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="autoFillBackground">
- <bool>false</bool>
- </property>
- <property name="specialValueText">
- <string>off</string>
- </property>
- <property name="minimum">
- <number>-127</number>
- </property>
- <property name="maximum">
- <number>127</number>
- </property>
- <property name="value">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="4" column="1" rowspan="2">
- <widget class="QLabel" name="TextLabel9">
+ <item row="10" column="1">
+ <widget class="QLabel" name="TextLabel11">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -285,10 +335,10 @@
</sizepolicy>
</property>
<property name="toolTip">
- <string>Transpose notes up or down</string>
+ <string>Change note length in percent of actual length</string>
</property>
<property name="text">
- <string>Transp.</string>
+ <string>Length</string>
</property>
<property name="wordWrap">
<bool>false</bool>
@@ -298,30 +348,30 @@
</property>
</widget>
</item>
- <item row="5" column="0" rowspan="2">
- <widget class="MusEGui::SpinBox" name="iVerz">
+ <item row="9" column="1">
+ <widget class="QLabel" name="TextLabel10">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="autoFillBackground">
- <bool>false</bool>
+ <property name="toolTip">
+ <string>Offset playback of notes before or after actual note</string>
</property>
- <property name="specialValueText">
- <string>off</string>
+ <property name="text">
+ <string>Delay</string>
</property>
- <property name="minimum">
- <number>-1000</number>
+ <property name="wordWrap">
+ <bool>false</bool>
</property>
- <property name="maximum">
- <number>1000</number>
+ <property name="indent">
+ <number>2</number>
</property>
</widget>
</item>
- <item row="6" column="1">
- <widget class="QLabel" name="TextLabel10">
+ <item row="7" column="1" rowspan="2">
+ <widget class="QLabel" name="TextLabel9">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -329,10 +379,10 @@
</sizepolicy>
</property>
<property name="toolTip">
- <string>Offset playback of notes before or after actual note</string>
+ <string>Transpose notes up or down</string>
</property>
<property name="text">
- <string>Delay</string>
+ <string>Transp.</string>
</property>
<property name="wordWrap">
<bool>false</bool>
@@ -342,8 +392,8 @@
</property>
</widget>
</item>
- <item row="7" column="0">
- <widget class="MusEGui::SpinBox" name="iLen">
+ <item row="12" column="0">
+ <widget class="MusEGui::SpinBox" name="iKompr">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -356,6 +406,9 @@
<property name="suffix">
<string>%</string>
</property>
+ <property name="prefix">
+ <string/>
+ </property>
<property name="minimum">
<number>25</number>
</property>
@@ -367,8 +420,8 @@
</property>
</widget>
</item>
- <item row="7" column="1">
- <widget class="QLabel" name="TextLabel11">
+ <item row="16" column="0">
+ <widget class="MusEGui::SpinBox" name="iHBank">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -376,99 +429,80 @@
</sizepolicy>
</property>
<property name="toolTip">
- <string>Change note length in percent of actual length</string>
- </property>
- <property name="text">
- <string>Length</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- <property name="indent">
- <number>2</number>
- </property>
- </widget>
- </item>
- <item row="8" column="0">
- <widget class="MusEGui::SpinBox" name="iAnschl">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="baseSize">
- <size>
- <width>8</width>
- <height>5</height>
- </size>
+ <string>Bank Select MSB. Ctrl-double-click on/off.</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
<property name="minimum">
- <number>-127</number>
+ <number>0</number>
</property>
<property name="maximum">
- <number>127</number>
+ <number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
- <item row="8" column="1">
- <widget class="QLabel" name="TextLabel12">
+ <item row="16" column="1">
+ <widget class="QLabel" name="TextLabel4">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="toolTip">
- <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Add or substract velocity to notes on track.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Since the midi note range is 0-127 this &lt;br/&gt;might mean that the notes do not reach &lt;br/&gt;the combined velocity, note + Velocity.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ <property name="lineWidth">
+ <number>1</number>
</property>
<property name="text">
- <string>Velocity</string>
+ <string>H-Bank</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
- <property name="indent">
+ <property name="margin">
<number>0</number>
</property>
+ <property name="indent">
+ <number>2</number>
+ </property>
</widget>
</item>
- <item row="9" column="0">
- <widget class="MusEGui::SpinBox" name="iKompr">
+ <item row="17" column="0">
+ <widget class="MusEGui::SpinBox" name="iLBank">
<property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="toolTip">
+ <string>Bank Select LSB. Ctrl-double-click on/off.</string>
+ </property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
- <property name="suffix">
- <string>%</string>
- </property>
- <property name="prefix">
- <string/>
+ <property name="specialValueText">
+ <string>off</string>
</property>
<property name="minimum">
- <number>25</number>
+ <number>0</number>
</property>
<property name="maximum">
- <number>200</number>
+ <number>128</number>
</property>
<property name="value">
- <number>100</number>
+ <number>0</number>
</property>
</widget>
</item>
- <item row="9" column="1">
- <widget class="QLabel" name="TextLabel13">
+ <item row="3" column="0">
+ <widget class="MusEGui::SpinBox" name="iOutputChannel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -476,67 +510,45 @@
</sizepolicy>
</property>
<property name="toolTip">
- <string>Compress the notes velocity range, in percent of actual velocity</string>
+ <string>output channel</string>
</property>
- <property name="text">
- <string>Compr.</string>
+ <property name="whatsThis">
+ <string>all midi events are sent to this output channel</string>
</property>
- <property name="wordWrap">
+ <property name="autoFillBackground">
<bool>false</bool>
</property>
- <property name="indent">
- <number>2</number>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>16</number>
</property>
</widget>
</item>
- <item row="10" column="0" colspan="2">
- <widget class="QLabel" name="TextLabel1_2">
+ <item row="11" column="1">
+ <widget class="QLabel" name="TextLabel12">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="frameShape">
- <enum>QFrame::WinPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <property name="lineWidth">
- <number>1</number>
- </property>
- <property name="midLineWidth">
- <number>1</number>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Add or substract velocity to notes on track.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Since the midi note range is 0-127 this &lt;br/&gt;might mean that the notes do not reach &lt;br/&gt;the combined velocity, note + Velocity.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
- <string>Channel Info</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
+ <string>Velocity</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
- </widget>
- </item>
- <item row="11" column="0" colspan="2">
- <widget class="QPushButton" name="iPatch">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="toolTip">
- <string>Select instrument patch</string>
- </property>
- <property name="text">
- <string>&lt;unknown&gt;</string>
+ <property name="indent">
+ <number>0</number>
</property>
</widget>
</item>
- <item row="12" column="0">
+ <item row="15" column="0">
<widget class="QLabel" name="textLabel1">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -555,7 +567,7 @@
</property>
</widget>
</item>
- <item row="12" column="1">
+ <item row="15" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>0</number>
@@ -594,61 +606,55 @@
</item>
</layout>
</item>
- <item row="13" column="0">
- <widget class="MusEGui::SpinBox" name="iHBank">
+ <item row="13" column="0" colspan="2">
+ <widget class="QLabel" name="TextLabel1_2">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="toolTip">
- <string>Bank Select MSB. Ctrl-double-click on/off.</string>
+ <property name="frameShape">
+ <enum>QFrame::WinPanel</enum>
</property>
- <property name="autoFillBackground">
- <bool>false</bool>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
</property>
- <property name="specialValueText">
- <string>off</string>
+ <property name="lineWidth">
+ <number>1</number>
</property>
- <property name="minimum">
- <number>0</number>
+ <property name="midLineWidth">
+ <number>1</number>
</property>
- <property name="maximum">
- <number>128</number>
+ <property name="text">
+ <string>Channel Info</string>
</property>
- <property name="value">
- <number>0</number>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>false</bool>
</property>
</widget>
</item>
- <item row="13" column="1">
- <widget class="QLabel" name="TextLabel4">
+ <item row="14" column="0" colspan="2">
+ <widget class="QPushButton" name="iPatch">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="lineWidth">
- <number>1</number>
+ <property name="toolTip">
+ <string>Select instrument patch</string>
</property>
<property name="text">
- <string>H-Bank</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="indent">
- <number>2</number>
+ <string>&lt;unknown&gt;</string>
</property>
</widget>
</item>
- <item row="14" column="0">
- <widget class="MusEGui::SpinBox" name="iLBank">
+ <item row="12" column="1">
+ <widget class="QLabel" name="TextLabel13">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -656,26 +662,20 @@
</sizepolicy>
</property>
<property name="toolTip">
- <string>Bank Select LSB. Ctrl-double-click on/off.</string>
- </property>
- <property name="autoFillBackground">
- <bool>false</bool>
- </property>
- <property name="specialValueText">
- <string>off</string>
+ <string>Compress the notes velocity range, in percent of actual velocity</string>
</property>
- <property name="minimum">
- <number>0</number>
+ <property name="text">
+ <string>Compr.</string>
</property>
- <property name="maximum">
- <number>128</number>
+ <property name="wordWrap">
+ <bool>false</bool>
</property>
- <property name="value">
- <number>0</number>
+ <property name="indent">
+ <number>2</number>
</property>
</widget>
</item>
- <item row="14" column="1">
+ <item row="17" column="1">
<widget class="QLabel" name="TextLabel5">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -700,7 +700,7 @@
</property>
</widget>
</item>
- <item row="15" column="0">
+ <item row="18" column="0">
<widget class="MusEGui::SpinBox" name="iProgram">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -728,7 +728,7 @@
</property>
</widget>
</item>
- <item row="15" column="1">
+ <item row="18" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
<number>0</number>
@@ -767,7 +767,7 @@
</item>
</layout>
</item>
- <item row="16" column="0">
+ <item row="19" column="0">
<widget class="MusEGui::SpinBox" name="iLautst">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -795,7 +795,7 @@
</property>
</widget>
</item>
- <item row="16" column="1">
+ <item row="19" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>0</number>
@@ -834,7 +834,7 @@
</item>
</layout>
</item>
- <item row="17" column="0">
+ <item row="20" column="0">
<widget class="MusEGui::SpinBox" name="iPan">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -865,7 +865,7 @@
</property>
</widget>
</item>
- <item row="17" column="1">
+ <item row="20" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing">
<number>0</number>
@@ -904,7 +904,7 @@
</item>
</layout>
</item>
- <item row="18" column="0">
+ <item row="21" column="0">
<spacer name="spacer5">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -920,6 +920,22 @@
</property>
</spacer>
</item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QPushButton" name="instrPushButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Select instrument</string>
+ </property>
+ <property name="text">
+ <string>&lt;unknown&gt;</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>