summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/muse/instruments/editinstrument.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/muse/instruments/editinstrument.cpp')
-rw-r--r--muse_qt4_evolution/muse/instruments/editinstrument.cpp844
1 files changed, 0 insertions, 844 deletions
diff --git a/muse_qt4_evolution/muse/instruments/editinstrument.cpp b/muse_qt4_evolution/muse/instruments/editinstrument.cpp
deleted file mode 100644
index 823a20e3..00000000
--- a/muse_qt4_evolution/muse/instruments/editinstrument.cpp
+++ /dev/null
@@ -1,844 +0,0 @@
-//=============================================================================
-// 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 "editinstrument.h"
-#include "minstrument.h"
-#include "ctrl.h"
-#include "midictrl.h"
-#include "al/xml.h"
-#include "gconfig.h"
-
-extern int string2sysex(const QString& s, unsigned char** data);
-extern QString sysex2string(int len, unsigned char* data);
-
-//---------------------------------------------------------
-// EditInstrument
-//---------------------------------------------------------
-
-EditInstrument::EditInstrument(QWidget* parent)
- : QMainWindow(parent)
- {
- setupUi(this);
- // populate instrument list
- for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) {
- QListWidgetItem* item = new QListWidgetItem((*i)->iname());
- QVariant v = qVariantFromValue((void*)(*i));
- item->setData(Qt::UserRole, v);
- instrumentList->addItem(item);
- }
- instrumentList->setItemSelected(instrumentList->item(0), true);
- connect(instrumentList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- SLOT(instrumentChanged(QListWidgetItem*,QListWidgetItem*)));
- connect(patchView, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
- SLOT(patchChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
- instrumentChanged(instrumentList->item(0), instrumentList->item(0));
- connect(listController, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- SLOT(controllerChanged(QListWidgetItem*, QListWidgetItem*)));
- connect(sysexList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- SLOT(sysexChanged(QListWidgetItem*, QListWidgetItem*)));
- connect(instrumentName, SIGNAL(textChanged(const QString&)), SLOT(instrumentNameChanged(const QString&)));
- connect(fileSaveAsAction, SIGNAL(triggered()), SLOT(fileSaveAs()));
- connect(fileSaveAction, SIGNAL(triggered()), SLOT(fileSave()));
- connect(fileNewAction, SIGNAL(triggered()), SLOT(fileNew()));
- connect(fileExitAction, SIGNAL(triggered()), SLOT(close()));
-
- connect(deletePatch, SIGNAL(clicked()), SLOT(deletePatchClicked()));
- connect(newPatch, SIGNAL(clicked()), SLOT(newPatchClicked()));
- connect(newGroup, SIGNAL(clicked()), SLOT(newGroupClicked()));
- connect(newCategory, SIGNAL(clicked()), SLOT(newCategoryClicked()));
- connect(deleteController, SIGNAL(clicked()), SLOT(deleteControllerClicked()));
- connect(newController, SIGNAL(clicked()), SLOT(newControllerClicked()));
- connect(deleteSysex, SIGNAL(clicked()), SLOT(deleteSysexClicked()));
- connect(newSysex, SIGNAL(clicked()), SLOT(newSysexClicked()));
-
- connect(ctrlType,SIGNAL(activated(int)), SLOT(ctrlTypeChanged(int)));
- }
-
-//---------------------------------------------------------
-// fileNew
-//---------------------------------------------------------
-
-void EditInstrument::fileNew()
- {
- for (int i = 1;; ++i) {
- QString s = QString("Instrument-%1").arg(i);
- bool found = false;
- for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) {
- if (s == (*i)->iname()) {
- found = true;
- break;
- }
- }
- if (!found) {
- MidiInstrument* ni = new MidiInstrument(s);
- midiInstruments.append(ni);
- QListWidgetItem* item = new QListWidgetItem(ni->iname());
- QVariant v = qVariantFromValue((void*)(ni));
- item->setData(Qt::UserRole, v);
- instrumentList->addItem(item);
- instrumentList->setCurrentItem(item);
- break;
- }
- }
- }
-
-//---------------------------------------------------------
-// fileSave
-//---------------------------------------------------------
-
-void EditInstrument::fileSave()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- if (instrument->filePath().isEmpty())
- fileSaveAs();
- else {
- QFile f(instrument->filePath());
- if (!f.open(QIODevice::WriteOnly)) {
- fileSaveAs();
- }
- else {
- f.close();
- if (fileSave(instrument, instrument->filePath()))
- instrument->setDirty(false);
- }
- }
- }
-
-//---------------------------------------------------------
-// fileSave
-//---------------------------------------------------------
-
-bool EditInstrument::fileSave(MidiInstrument* instrument, const QString& name)
- {
- QFile f(name);
- if (!f.open(QIODevice::WriteOnly)) {
- QString s("Creating file failed: ");
- s += strerror(errno);
- QMessageBox::critical(this,
- tr("MusE: Create file failed"), s);
- return false;
- }
- Xml xml(&f);
- updateInstrument(instrument);
- instrument->write(xml);
- f.close();
- if (f.error()) {
- QString s = QString("Write File\n") + f.fileName() + QString("\nfailed: ")
- + f.errorString();
- QMessageBox::critical(this, tr("MusE: Write File failed"), s);
- return false;
- }
- return true;
- }
-
-//---------------------------------------------------------
-// fileSaveAs
-//---------------------------------------------------------
-
-void EditInstrument::fileSaveAs()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- QString path = QDir::homePath() + "/" + config.instrumentPath;
- if (instrument->filePath().isEmpty())
- path += QString("/%1.idf").arg(instrument->iname());
- else {
- QFileInfo fi(instrument->filePath());
- path += QString("/%1.idf").arg(fi.baseName());
- }
- QString s = QFileDialog::getSaveFileName(this,
- tr("MusE: Save Instrument Definition"),
- path,
- tr("Instrument Definition (*.idf)"));
- if (s.isEmpty())
- return;
- instrument->setFilePath(s);
- if (fileSave(instrument, s))
- instrument->setDirty(false);
- }
-
-//---------------------------------------------------------
-// closeEvent
-//---------------------------------------------------------
-
-void EditInstrument::closeEvent(QCloseEvent* ev)
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item) {
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- if (checkDirty(instrument)) {
- ev->ignore();
- return;
- }
- }
- QMainWindow::closeEvent(ev);
- }
-
-//---------------------------------------------------------
-// instrumentNameChanged
-//---------------------------------------------------------
-
-void EditInstrument::instrumentNameChanged(const QString& s)
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- if (s != item->text()) {
- item->setText(s);
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- instrument->setDirty(true);
- }
- }
-
-//---------------------------------------------------------
-// deletePatchClicked
-//---------------------------------------------------------
-
-void EditInstrument::deletePatchClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- QTreeWidgetItem* pi = patchView->currentItem();
- if (pi == 0)
- return;
- void* p = pi->data(0, Qt::UserRole).value<void*>();
- if (p == 0)
- return;
- Patch* patch = (Patch*)p;
- std::vector<PatchGroup>* pg = instrument->groups();
- for (std::vector<PatchGroup>::iterator g = pg->begin(); g != pg->end(); ++g) {
- for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) {
- if (patch == *p) {
- g->patches.erase(p);
- delete pi;
- instrument->setDirty(true);
- return;
- }
- }
- }
- printf("fatal: patch not found\n");
- }
-
-//---------------------------------------------------------
-// newPatchClicked
-//---------------------------------------------------------
-
-void EditInstrument::newPatchClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- std::vector<PatchGroup>* pg = instrument->groups();
- QString patchName;
- for (int i = 1;; ++i) {
- patchName = QString("Patch-%1").arg(i);
- bool found = false;
-
- for (std::vector<PatchGroup>::iterator g = pg->begin(); g != pg->end(); ++g) {
- for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) {
- if ((*p)->name == patchName) {
- found = true;
- break;
- }
- }
- if (found)
- break;
- }
- if (!found)
- break;
- }
-
- //
- // search current patch group
- //
- PatchGroup* pGroup = 0;
- QTreeWidgetItem* pi = patchView->currentItem();
- if (pi == 0)
- return;
- if (pi->data(0, Qt::UserRole).value<void*>())
- pi = pi->parent();
- for (std::vector<PatchGroup>::iterator g = pg->begin(); g != pg->end(); ++g) {
- if (g->name == pi->text(0)) {
- pGroup = &*g;
- break;
- }
- }
- if (pGroup == 0) {
- printf("group not found\n");
- return;
- }
- Patch* patch = new Patch;
- patch->name = patchName;
- pGroup->patches.push_back(patch);
- QTreeWidgetItem* sitem = new QTreeWidgetItem;
- sitem->setText(0, patch->name);
- QVariant v = QVariant::fromValue((void*)(patch));
- sitem->setData(0, Qt::UserRole, v);
-
- pi->addChild(sitem);
- patchView->setCurrentItem(sitem);
- instrument->setDirty(true);
- }
-
-//---------------------------------------------------------
-// newGroupClicked
-//---------------------------------------------------------
-
-void EditInstrument::newGroupClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- std::vector<PatchGroup>* pg = instrument->groups();
- QString groupName;
- for (int i = 1;; ++i) {
- groupName = QString("Group-%1").arg(i);
- bool found = false;
-
- for (std::vector<PatchGroup>::iterator g = pg->begin(); g != pg->end(); ++g) {
- if (g->name == groupName) {
- found = true;
- break;
- }
- }
- if (!found)
- break;
- }
-
- PatchGroup pGroup;
- pGroup.name = groupName;
- pg->push_back(pGroup);
-
- QTreeWidgetItem* sitem = new QTreeWidgetItem;
- sitem->setText(0, groupName);
- QVariant v = QVariant::fromValue((void*)0);
- sitem->setData(0, Qt::UserRole, v);
- patchView->addTopLevelItem(sitem);
- patchView->setCurrentItem(sitem);
- instrument->setDirty(true);
- }
-
-//---------------------------------------------------------
-// newCategoryClicked
-//---------------------------------------------------------
-
-void EditInstrument::newCategoryClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- bool ok;
- QString cat = QInputDialog::getText(this,
- tr("MusE: Enter new Category"),
- tr("Enter new Category:"),
- QLineEdit::Normal, "", &ok
- );
- if (ok && !cat.isEmpty()) {
- category->addItem(cat);
- instrument->addCategory(cat);
- instrument->setDirty(true);
- }
- }
-
-//---------------------------------------------------------
-// deleteControllerClicked
-//---------------------------------------------------------
-
-void EditInstrument::deleteControllerClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- QListWidgetItem* item2 = listController->currentItem();
- if (item == 0 || item2 == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- MidiController* ctrl = (MidiController*)item2->data(Qt::UserRole).value<void*>();
- MidiControllerList* cl = instrument->controller();
- cl->removeAll(ctrl);
- delete item2;
- instrument->setDirty(true);
- }
-
-//---------------------------------------------------------
-// newControllerClicked
-//---------------------------------------------------------
-
-void EditInstrument::newControllerClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
-
- QString ctrlName;
- MidiControllerList* cl = instrument->controller();
- for (int i = 1;; ++i) {
- ctrlName = QString("Controller-%d").arg(i);
-
- bool found = false;
- for (iMidiController ic = cl->begin(); ic != cl->end(); ++ic) {
- MidiController* c = *ic;
- if (c->name() == ctrlName) {
- found = true;
- break;
- }
- }
- if (!found)
- break;
- }
-
- MidiController* ctrl = new MidiController();
- ctrl->setName(ctrlName);
- item = new QListWidgetItem(ctrlName);
- QVariant v = qVariantFromValue((void*)(ctrl));
- item->setData(Qt::UserRole, v);
- listController->addItem(item);
- listController->setCurrentItem(item);
- instrument->setDirty(true);
- }
-
-//---------------------------------------------------------
-// deleteSysexClicked
-//---------------------------------------------------------
-
-void EditInstrument::deleteSysexClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- QListWidgetItem* item2 = sysexList->currentItem();
- if (item == 0 || item2 == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- SysEx* sysex = (SysEx*)item2->data(Qt::UserRole).value<void*>();
- QList<SysEx*> sl = instrument->sysex();
- instrument->removeSysex(sysex);
- delete item2;
- instrument->setDirty(true);
- }
-
-//---------------------------------------------------------
-// newSysexClicked
-//---------------------------------------------------------
-
-void EditInstrument::newSysexClicked()
- {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
-
- QString sysexName;
- for (int i = 1;; ++i) {
- sysexName = QString("Sysex-%1").arg(i);
-
- bool found = false;
- foreach(const SysEx* s, instrument->sysex()) {
- if (s->name == sysexName) {
- found = true;
- break;
- }
- }
- if (!found)
- break;
- }
- SysEx* nsysex = new SysEx;
- nsysex->name = sysexName;
- instrument->addSysex(nsysex);
-
- item = new QListWidgetItem(sysexName);
- QVariant v = QVariant::fromValue((void*)nsysex);
- item->setData(Qt::UserRole, v);
- sysexList->addItem(item);
- sysexList->setCurrentItem(item);
- instrument->setDirty(true);
- }
-
-//---------------------------------------------------------
-// instrumentChanged
-//---------------------------------------------------------
-
-void EditInstrument::instrumentChanged(QListWidgetItem* sel, QListWidgetItem* old)
- {
- if (sel == 0)
- return;
- if (old) {
- MidiInstrument* oi = (MidiInstrument*)old->data(Qt::UserRole).value<void*>();
- checkDirty(oi);
- oi->setDirty(false);
- }
-
- patchView->clear();
- listController->clear();
- category->clear();
- sysexList->clear();
-
- // populate patch list
-
- MidiInstrument* instrument = (MidiInstrument*)sel->data(Qt::UserRole).value<void*>();
- instrument->setDirty(false);
-
- instrumentName->setText(instrument->iname());
- std::vector<PatchGroup>* pg = instrument->groups();
- for (std::vector<PatchGroup>::iterator g = pg->begin(); g != pg->end(); ++g) {
- QTreeWidgetItem* item = new QTreeWidgetItem;
- item->setText(0, g->name);
- QVariant v = QVariant::fromValue((void*)0);
- item->setData(0, Qt::UserRole, v);
- patchView->addTopLevelItem(item);
- for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) {
- Patch* patch = *p;
- QTreeWidgetItem* sitem = new QTreeWidgetItem;
- sitem->setText(0, patch->name);
- QVariant v = QVariant::fromValue((void*)patch);
- sitem->setData(0, Qt::UserRole, v);
- item->addChild(sitem);
- }
- }
- MidiControllerList* cl = instrument->controller();
- for (iMidiController ic = cl->begin(); ic != cl->end(); ++ic) {
- MidiController* c = *ic;
- QListWidgetItem* item = new QListWidgetItem(c->name());
- QVariant v = QVariant::fromValue((void*)c);
- item->setData(Qt::UserRole, v);
- listController->addItem(item);
- }
- listController->setItemSelected(listController->item(0), true);
- controllerChanged(listController->item(0), 0);
-
- category->addItems(instrument->categories());
-
- foreach(const SysEx* s, instrument->sysex()) {
- QListWidgetItem* item = new QListWidgetItem(s->name);
- QVariant v = QVariant::fromValue((void*)s);
- item->setData(Qt::UserRole, v);
- sysexList->addItem(item);
- }
-
- sysexList->setItemSelected(sysexList->item(0), true);
- sysexChanged(sysexList->item(0), 0);
-
- if (!cl->empty()) {
- listController->setItemSelected(listController->item(0), true);
- controllerChanged(listController->item(0), 0);
- }
- }
-
-//---------------------------------------------------------
-// updatePatch
-//---------------------------------------------------------
-
-void EditInstrument::updatePatch(MidiInstrument* instrument, Patch* p)
- {
- if (p->name != patchNameEdit->text()) {
- p->name = patchNameEdit->text();
- instrument->setDirty(true);
- }
- if (p->hbank != spinBoxHBank->value()) {
- p->hbank = spinBoxHBank->value();
- instrument->setDirty(true);
- }
- if (p->lbank != spinBoxLBank->value()) {
- p->hbank = spinBoxHBank->value();
- instrument->setDirty(true);
- }
- if (p->prog != spinBoxProgram->value()) {
- p->prog = spinBoxProgram->value();
- instrument->setDirty(true);
- }
- // there is no logical xor in c++
- bool a = p->typ & 1;
- bool b = p->typ & 2;
- bool c = p->typ & 4;
- bool aa = checkBoxGM->isChecked();
- bool bb = checkBoxGS->isChecked();
- bool cc = checkBoxXG->isChecked();
- if ((a ^ aa) || (b ^ bb) || (c ^ cc)) {
- int value = 0;
- if (checkBoxGM->isChecked())
- value |= 1;
- if (checkBoxGS->isChecked())
- value |= 2;
- if (checkBoxXG->isChecked())
- value |= 4;
- p->typ = value;
- instrument->setDirty(true);
- }
- if (p->categorie != category->currentIndex()) {
- p->categorie = category->currentIndex();
- instrument->setDirty(true);
- }
- }
-
-//---------------------------------------------------------
-// patchChanged
-//---------------------------------------------------------
-
-void EditInstrument::patchChanged(QTreeWidgetItem* sel, QTreeWidgetItem* old)
- {
- if (old && old->data(0, Qt::UserRole).value<void*>()) {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- Patch* p = (Patch*)old->data(0, Qt::UserRole).value<void*>();
- updatePatch(instrument, p);
- }
- if (sel == 0 || sel->data(0, Qt::UserRole).value<void*>() == 0) {
- patchNameEdit->setText("");
- return;
- }
- Patch* p = (Patch*)sel->data(0, Qt::UserRole).value<void*>();
- patchNameEdit->setText(p->name);
- spinBoxHBank->setValue(p->hbank);
- spinBoxLBank->setValue(p->lbank);
- spinBoxProgram->setValue(p->prog);
- checkBoxDrum->setChecked(p->drumMap);
- checkBoxGM->setChecked(p->typ & 1);
- checkBoxGS->setChecked(p->typ & 2);
- checkBoxXG->setChecked(p->typ & 4);
- category->setCurrentIndex(p->categorie);
- }
-
-//---------------------------------------------------------
-// updateController
-//---------------------------------------------------------
-
-void EditInstrument::updateController(MidiInstrument* instrument, MidiController* oc)
- {
- int ctrlH = spinBoxHCtrlNo->value();
- int ctrlL = spinBoxLCtrlNo->value();
- MidiController::ControllerType type = (MidiController::ControllerType)ctrlType->currentIndex();
- int num = MidiController::genNum(type, ctrlH, ctrlL);
-
- if (num != oc->num()) {
- oc->setNum(num);
- instrument->setDirty(true);
- }
- if (spinBoxMin->value() != oc->minVal()) {
- oc->setMinVal(spinBoxMin->value());
- instrument->setDirty(true);
- }
- if (spinBoxMax->value() != oc->maxVal()) {
- oc->setMaxVal(spinBoxMax->value());
- instrument->setDirty(true);
- }
- if (spinBoxDefault->value() != oc->initVal()) {
- oc->setInitVal(spinBoxDefault->value());
- instrument->setDirty(true);
- }
- if (moveWithPart->isChecked() ^ oc->moveWithPart()) {
- oc->setMoveWithPart(moveWithPart->isChecked());
- instrument->setDirty(true);
- }
- if (ctrlName->text() != oc->name()) {
- oc->setName(ctrlName->text());
- instrument->setDirty(true);
- }
- if (ctrlComment->toPlainText() != oc->comment()) {
- oc->setComment(ctrlComment->toPlainText());
- instrument->setDirty(true);
- }
- }
-
-//---------------------------------------------------------
-// controllerChanged
-//---------------------------------------------------------
-
-void EditInstrument::controllerChanged(QListWidgetItem* sel, QListWidgetItem* old)
- {
- if (old) {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- MidiController* oc = (MidiController*)old->data(Qt::UserRole).value<void*>();
- updateController(instrument, oc);
- }
- if (sel == 0 || sel->data(Qt::UserRole).value<void*>() == 0) {
- ctrlName->setText("");
- ctrlComment->setText("");
- return;
- }
- MidiController* c = (MidiController*)sel->data(Qt::UserRole).value<void*>();
- ctrlName->setText(c->name());
- ctrlComment->setText(c->comment());
- int ctrlH = (c->num() >> 8) & 0x7f;
- int ctrlL = c->num() & 0x7f;
- int type = int(c->type());
- ctrlType->setCurrentIndex(type);
- ctrlTypeChanged(type);
- spinBoxHCtrlNo->setValue(ctrlH);
- spinBoxLCtrlNo->setValue(ctrlL);
- spinBoxMin->setValue(c->minVal());
- spinBoxMax->setValue(c->maxVal());
- spinBoxDefault->setRange(c->minVal()-1, c->maxVal());
- spinBoxDefault->setValue(c->initVal());
- moveWithPart->setChecked(c->moveWithPart());
- }
-
-//---------------------------------------------------------
-// updateSysex
-//---------------------------------------------------------
-
-void EditInstrument::updateSysex(MidiInstrument* instrument, SysEx* so)
- {
- if (sysexName->text() != so->name) {
- so->name = sysexName->text();
- instrument->setDirty(true);
- }
- if (sysexComment->toPlainText() != so->comment) {
- so->comment = sysexComment->toPlainText();
- instrument->setDirty(true);
- }
- unsigned char* data;
- int len = string2sysex(sysexData->toPlainText(), &data);
- if (so->dataLen != len || !memcmp(data, so->data, len)) {
- delete so->data;
- so->data = data;
- so->dataLen = len;
- }
- }
-
-//---------------------------------------------------------
-// sysexChanged
-//---------------------------------------------------------
-
-void EditInstrument::sysexChanged(QListWidgetItem* sel, QListWidgetItem* old)
- {
- if (old) {
- QListWidgetItem* item = instrumentList->currentItem();
- if (item == 0)
- return;
- MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value<void*>();
- SysEx* so = (SysEx*)item->data(Qt::UserRole).value<void*>();
- updateSysex(instrument, so);
- }
- if (sel == 0) {
- sysexName->setText("");
- sysexComment->setText("");
- sysexData->setText("");
- sysexName->setEnabled(false);
- sysexComment->setEnabled(false);
- sysexData->setEnabled(false);
- return;
- }
- sysexName->setEnabled(true);
- sysexComment->setEnabled(true);
- sysexData->setEnabled(true);
-
- SysEx* sx = (SysEx*)sel->data(Qt::UserRole).value<void*>();
- sysexName->setText(sx->name);
- sysexComment->setText(sx->comment);
- sysexData->setText(sysex2string(sx->dataLen, sx->data));
- }
-
-//---------------------------------------------------------
-// checkDirty
-// return true on Abort
-//---------------------------------------------------------
-
-bool EditInstrument::checkDirty(MidiInstrument* i)
- {
- updateInstrument(i);
- if (!i->dirty())
- return false;
- int n = QMessageBox::warning(this, tr("MusE"),
- tr("The current Instrument contains unsaved data\n"
- "Save Current Instrument?"),
- tr("&Save"), tr("&Nosave"), tr("&Abort"), 0, 2);
- if (n == 0) {
- if (i->filePath().isEmpty())
- fileSaveAs();
- else {
- QFile f(i->filePath());
- if (!f.open(QIODevice::WriteOnly))
- fileSaveAs();
- else {
- f.close();
- if (fileSave(i, i->filePath()))
- i->setDirty(false);
- }
- }
- return false;
- }
- return n == 2;
- }
-
-//---------------------------------------------------------
-// ctrlTypeChanged
-//---------------------------------------------------------
-
-void EditInstrument::ctrlTypeChanged(int idx)
- {
- MidiController::ControllerType t = (MidiController::ControllerType)idx;
- switch (t) {
- case MidiController::RPN:
- case MidiController::NRPN:
- case MidiController::Controller7:
- spinBoxHCtrlNo->setEnabled(false);
- spinBoxLCtrlNo->setEnabled(true);
- break;
- case MidiController::Controller14:
- case MidiController::RPN14:
- case MidiController::NRPN14:
- spinBoxHCtrlNo->setEnabled(true);
- spinBoxLCtrlNo->setEnabled(true);
- break;
- case MidiController::Pitch:
- case MidiController::Program:
- spinBoxHCtrlNo->setEnabled(false);
- spinBoxLCtrlNo->setEnabled(false);
- break;
- default:
- break;
- }
- }
-
-//---------------------------------------------------------
-// updateInstrument
-//---------------------------------------------------------
-
-void EditInstrument::updateInstrument(MidiInstrument* instrument)
- {
- QListWidgetItem* sysexItem = sysexList->currentItem();
- if (sysexItem) {
- SysEx* so = (SysEx*)sysexItem->data(Qt::UserRole).value<void*>();
- updateSysex(instrument, so);
- }
- QListWidgetItem* ctrlItem = listController->currentItem();
- if (ctrlItem) {
- MidiController* ctrl = (MidiController*)ctrlItem->data(Qt::UserRole).value<void*>();
- updateController(instrument, ctrl);
- }
- QTreeWidgetItem* patchItem = patchView->currentItem();
- if (patchItem) {
- Patch* p = (Patch*)patchItem->data(0, Qt::UserRole).value<void*>();
- updatePatch(instrument, p);
- }
- }
-