diff options
author | Robert Jonsson <spamatica@gmail.com> | 2011-03-07 19:01:11 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2011-03-07 19:01:11 +0000 |
commit | e40fc849149dd97c248866a4a1d026dda5e57b62 (patch) | |
tree | b12b358f3b3a0608001d30403358f8443118ec5f /attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp | |
parent | 1bd4f2e8d9745cabb667b043171cad22c8577768 (diff) |
clean3
Diffstat (limited to 'attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp')
-rw-r--r-- | attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp new file mode 100644 index 00000000..395518a8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp @@ -0,0 +1,202 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "configmidictrl.h" +#include "definemidictrl.h" +#include "miditrack.h" +#include "midioutport.h" +#include "midictrl.h" +#include "midiout.h" +#include "instruments/minstrument.h" + +//--------------------------------------------------------- +// ConfigMidiCtrl +//--------------------------------------------------------- + +ConfigMidiCtrl::ConfigMidiCtrl(MidiTrack* t) + { + setupUi(this); + track = t; + + //--------------------------------------------------- + // populate list of managed controllers + //--------------------------------------------------- + + ControllerNameList* cn = track->controllerNames(); + for (iControllerName i = cn->begin(); i != cn->end(); ++i) + managedController->addItem(i->name); + + //--------------------------------------------------- + // populate list of available controllers + //--------------------------------------------------- + + if (track->type() == Track::MIDI) { + MidiTrack* mc = (MidiTrack*)track; + portName->setText(track->name()); + instrumentName->setText(mc->instrument()->iname()); + // + // populate popup with all controllers available for + // current instrument + // + MidiControllerList* mcl = mc->instrument()->controller(); + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + iControllerName i; + for (i = cn->begin(); i != cn->end(); ++i) { + if (i->name == (*ci)->name()) + break; + } + if (i == cn->end()) + availableController->addItem((*ci)->name()); + } + } + + delete cn; + buttonAdd->setEnabled(false); + buttonRemove->setEnabled(false); + + connect(buttonAdd, SIGNAL(clicked()), SLOT(addClicked())); + connect(buttonRemove, SIGNAL(clicked()), SLOT(removeClicked())); + connect(availableController, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(availableSelected(QListWidgetItem*))); + connect(managedController, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(managedSelected(QListWidgetItem*))); + connect(defineButton, SIGNAL(clicked()), SLOT(defineClicked())); + } + +//--------------------------------------------------------- +// addClicked +//--------------------------------------------------------- + +void ConfigMidiCtrl::addClicked() + { + QListWidgetItem* n = availableController->currentItem(); + if (n == 0) + return; + QString s(n->text()); + for (int i = 0; i < managedController->count(); ++i) { + if (s == managedController->item(i)->text()) + return; + } + managedController->addItem(s); + managedController->setCurrentItem(managedController->item(managedController->count()-1)); + delete n; + buttonAdd->setEnabled(false); + } + +//--------------------------------------------------------- +// removeClicked +//--------------------------------------------------------- + +void ConfigMidiCtrl::removeClicked() + { + QListWidgetItem* n = managedController->currentItem(); + if (n == 0) + return; + availableController->addItem(n->text()); + delete n; + buttonRemove->setEnabled(false); + } + +//--------------------------------------------------------- +// availableSelected +//--------------------------------------------------------- + +void ConfigMidiCtrl::availableSelected(QListWidgetItem* item) + { + buttonAdd->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// managedSelected +//--------------------------------------------------------- + +void ConfigMidiCtrl::managedSelected(QListWidgetItem* item) + { + buttonRemove->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// done +//--------------------------------------------------------- + +void ConfigMidiCtrl::done(int code) + { + if (!code) { + QDialog::done(code); + return; + } + if (track->type() == Track::MIDI) { + ControllerNameList* cn = track->controllerNames(); + MidiInstrument* instr = track->instrument(); + MidiControllerList* mcl = instr->controller(); + + // + // search for new, added controller + // + int n = managedController->count(); + for (int i = 0; i < n; ++i) { + QString name(managedController->item(i)->text()); + iControllerName ii = cn->begin(); + for (; ii != cn->end(); ++ii) { + if (ii->name == name) + break; + } + if (ii == cn->end()) { + // add controller "name" to list of managed controller + // + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + if ((*ci)->name() == name) { + Ctrl* ctrl = new Ctrl(*ci); + track->addController(ctrl); + break; + } + } + } + } + + // + // search for removed controller + // + for (iControllerName ii = cn->begin(); ii != cn->end(); ++ii) { + int i; + for (i = 0; i < n; ++i) { + if (managedController->item(i)->text() == ii->name) + break; + } + if (i == n) + track->removeController(ii->id); + } + delete cn; + } + QDialog::done(code); + } + +//--------------------------------------------------------- +// defineClicked +//--------------------------------------------------------- + +void ConfigMidiCtrl::defineClicked() + { + DefineMidiCtrl dc(track, this); + if (dc.exec()) { + Ctrl* ctrl = new Ctrl(dc.midiController()); + track->addController(ctrl); + QDialog::done(0); + } + } + |