diff options
Diffstat (limited to 'muse_qt4_evolution/muse/plugingui.cpp')
-rw-r--r-- | muse_qt4_evolution/muse/plugingui.cpp | 770 |
1 files changed, 0 insertions, 770 deletions
diff --git a/muse_qt4_evolution/muse/plugingui.cpp b/muse_qt4_evolution/muse/plugingui.cpp deleted file mode 100644 index 9f0d1d32..00000000 --- a/muse_qt4_evolution/muse/plugingui.cpp +++ /dev/null @@ -1,770 +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 "song.h" -#include "fastlog.h" -#include "widgets/filedialog.h" -#include "plugin.h" -#include "plugingui.h" -#include "icons.h" -#include "al/xml.h" -#include "gui.h" - -#include "awl/floatentry.h" -#include "awl/slider.h" -#include "awl/checkbox.h" -#include "awl/combobox.h" - -using Awl::FloatEntry; -using Awl::Slider; -using Awl::CheckBox; -using Awl::ComboBox; - -static const char* preset_file_pattern[] = { - QT_TR_NOOP("presets (*.pre *.pre.gz *.pre.bz2)"), - QT_TR_NOOP("All Files (*)"), - 0 - }; - -int PluginDialog::selectedPlugType = SEL_SM; -QStringList PluginDialog::sortItems = QStringList(); - -//--------------------------------------------------------- -// PluginDialog -// select Plugin dialog -//--------------------------------------------------------- - -PluginDialog::PluginDialog(QWidget* parent) - : QDialog(parent) - { - setWindowTitle(tr("MusE: select plugin")); - QVBoxLayout* layout = new QVBoxLayout(this); - - pList = new QTreeWidget(this); - pList->setColumnCount(11); - pList->setSortingEnabled(true); - QStringList headerLabels; - headerLabels << tr("Lib"); - headerLabels << tr("Label"); - headerLabels << tr("Name"); - headerLabels << tr("AI"); - headerLabels << tr("AO"); - headerLabels << tr("CI"); - headerLabels << tr("CO"); - headerLabels << tr("IP"); - headerLabels << tr("id"); - headerLabels << tr("Maker"); - headerLabels << tr("Copyright"); - - int sizes[] = { 110, 110, 0, 30, 30, 30, 30, 30, 40, 110, 110 }; - for (int i = 0; i < 11; ++i) { - if (sizes[i] == 0) { - pList->header()->setResizeMode(i, QHeaderView::Stretch); - } - else { - if (sizes[i] <= 40) // hack alert! - pList->header()->setResizeMode(i, QHeaderView::Custom); - pList->header()->resizeSection(i, sizes[i]); - } - } - - pList->setHeaderLabels(headerLabels); - - pList->setSelectionBehavior(QAbstractItemView::SelectRows); - pList->setSelectionMode(QAbstractItemView::SingleSelection); - pList->setAlternatingRowColors(true); - - fillPlugs(selectedPlugType); - layout->addWidget(pList); - - //--------------------------------------------------- - // Ok/Cancel Buttons - //--------------------------------------------------- - - QBoxLayout* w5 = new QHBoxLayout; - layout->addLayout(w5); - - QPushButton* okB = new QPushButton(tr("Ok"), this); - okB->setDefault(true); - QPushButton* cancelB = new QPushButton(tr("Cancel"), this); - okB->setFixedWidth(80); - cancelB->setFixedWidth(80); - w5->addWidget(okB); - w5->addSpacing(12); - w5->addWidget(cancelB); - - QGroupBox* plugSelGroup = new QGroupBox; - plugSelGroup->setTitle("Show plugs:"); - QHBoxLayout* psl = new QHBoxLayout; - plugSelGroup->setLayout(psl); - - QButtonGroup* plugSel = new QButtonGroup(plugSelGroup); - onlySM = new QRadioButton; - onlySM->setText(tr("Mono and Stereo")); - onlySM->setCheckable(true); - plugSel->addButton(onlySM); - psl->addWidget(onlySM); - onlyS = new QRadioButton; - onlyS->setText(tr("Stereo")); - onlyS->setCheckable(true); - plugSel->addButton(onlyS); - psl->addWidget(onlyS); - onlyM = new QRadioButton; - onlyM->setText(tr("Mono")); - onlyM->setCheckable(true); - plugSel->addButton(onlyM); - psl->addWidget(onlyM); - allPlug = new QRadioButton; - allPlug->setText(tr("Show All")); - allPlug->setCheckable(true); - plugSel->addButton(allPlug); - psl->addWidget(allPlug); - plugSel->setExclusive(true); - - switch(selectedPlugType) { - case SEL_SM: onlySM->setChecked(true); break; - case SEL_S: onlyS->setChecked(true); break; - case SEL_M: onlyM->setChecked(true); break; - case SEL_ALL: allPlug->setChecked(true); break; - } - - plugSelGroup->setToolTip(tr("Select which types of plugins should be visible in the list.<br>" - "Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>" - "Also beware that the 'all' alternative includes plugins that probably not are usable by MusE.")); - - w5->addSpacing(12); - w5->addWidget(plugSelGroup); - w5->addSpacing(12); - - QLabel *sortLabel = new QLabel; - sortLabel->setText(tr("Search in 'Label' and 'Name':")); - w5->addWidget(sortLabel); - w5->addSpacing(2); - - sortBox = new QComboBox(this); - sortBox->setEditable(true); - if (!sortItems.empty()) - sortBox->addItems(sortItems); - - sortBox->setMinimumSize(100, 10); - w5->addWidget(sortBox); - w5->addStretch(-1); - - if (!sortBox->currentText().isEmpty()) - fillPlugs(sortBox->currentText()); - else - fillPlugs(selectedPlugType); - - - connect(pList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(accept())); - connect(cancelB, SIGNAL(clicked()), SLOT(reject())); - connect(okB, SIGNAL(clicked()), SLOT(accept())); - connect(plugSel, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(fillPlugs(QAbstractButton*))); - connect(sortBox, SIGNAL(editTextChanged(const QString&)),SLOT(fillPlugs(const QString&))); - } - -//--------------------------------------------------------- -// accept -//--------------------------------------------------------- - -void PluginDialog::accept() - { - if (!sortBox->currentText().isEmpty()) { - foreach (QString item, sortItems) - if(item == sortBox->currentText()) { - QDialog::accept(); - return; - } - sortItems.push_front(sortBox->currentText()); - } - QDialog::accept(); - } - -//--------------------------------------------------------- -// value -//--------------------------------------------------------- - -Plugin* PluginDialog::value() - { - QTreeWidgetItem* item = pList->selectedItems().at(0); - if (item) - return plugins.find(item->text(0), item->text(1)); -printf("plugin not found\n"); - return 0; - } - -//--------------------------------------------------------- -// fillPlugs -//--------------------------------------------------------- - -void PluginDialog::fillPlugs(QAbstractButton* ab) - { - if (ab == allPlug) - fillPlugs(SEL_ALL); - else if (ab == onlyM) - fillPlugs(SEL_M); - else if (ab == onlyS) - fillPlugs(SEL_S); - else if (ab == onlySM) - fillPlugs(SEL_SM); - } - -//--------------------------------------------------------- -// fillPlugs int -//--------------------------------------------------------- - -void PluginDialog::fillPlugs(int nbr) - { - pList->clear(); - for (iPlugin i = plugins.begin(); i != plugins.end(); ++i) { - int ai = (*i)->inports(); - int ao = (*i)->outports(); - int ci = (*i)->parameter(); - int co = 0; - bool addFlag = false; - switch (nbr) { - case SEL_SM: // stereo & mono - if ((ai == 1 || ai == 2) && (ao == 1 || ao ==2)) { - addFlag = true; - } - break; - case SEL_S: // stereo - if ((ai == 1 || ai == 2) && ao ==2) { - addFlag = true; - } - break; - case SEL_M: // mono - if (ai == 1 && ao == 1) { - addFlag = true; - } - break; - case SEL_ALL: // all - addFlag = true; - break; - } - if (addFlag) { - QTreeWidgetItem* item = new QTreeWidgetItem; - item->setText(0, (*i)->lib()); - item->setText(1, (*i)->label()); - item->setText(2, (*i)->name()); - item->setText(3, QString().setNum(ai)); - item->setText(4, QString().setNum(ao)); - item->setText(5, QString().setNum(ci)); - item->setText(6, QString().setNum(co)); - item->setText(7, QString().setNum((*i)->inPlaceCapable())); - item->setText(8, QString().setNum((*i)->id())); - item->setText(9, (*i)->maker()); - item->setText(10, (*i)->copyright()); - pList->addTopLevelItem(item); - } - } - selectedPlugType = nbr; - } - -//--------------------------------------------------------- -// fillPlugs QString -//--------------------------------------------------------- - -void PluginDialog::fillPlugs(const QString &sortValue) - { - pList->clear(); - for (iPlugin i = plugins.begin(); i != plugins.end(); ++i) { - int ai = (*i)->inports(); - int ao = (*i)->outports(); - int ci = (*i)->parameter(); - int co = 0; - - bool addFlag = false; - - if ((*i)->label().toLower().contains(sortValue.toLower())) - addFlag = true; - else if ((*i)->name().toLower().contains(sortValue.toLower())) - addFlag = true; - if (addFlag) { - QTreeWidgetItem* item = new QTreeWidgetItem; - item->setText(0, (*i)->lib()); - item->setText(1, (*i)->label()); - item->setText(2, (*i)->name()); - item->setText(3, QString().setNum(ai)); - item->setText(4, QString().setNum(ao)); - item->setText(5, QString().setNum(ci)); - item->setText(6, QString().setNum(co)); - item->setText(7, QString().setNum((*i)->inPlaceCapable())); - item->setText(8, QString().setNum((*i)->id())); - item->setText(9, (*i)->maker()); - item->setText(10, (*i)->copyright()); - pList->addTopLevelItem(item); - } - } - } - -//--------------------------------------------------------- -// getPlugin -//--------------------------------------------------------- - -Plugin* PluginDialog::getPlugin(QWidget* parent) - { - PluginDialog* dialog = new PluginDialog(parent); - if (dialog->exec()) - return dialog->value(); - return 0; - } - -static const char* presetOpenText = "<img source=\"fileopen\"> " - "Click this button to load a saved <em>preset</em>."; -static const char* presetSaveText = "Click this button to save curent parameter " - "settings as a <em>preset</em>. You will be prompted for a file name."; -static const char* presetBypassText = "Click this button to bypass effect unit"; - -//--------------------------------------------------------- -// PluginGui -//--------------------------------------------------------- - -PluginGui::PluginGui(PluginI* p) - : QMainWindow(0) - { - setIconSize(ICON_SIZE); - plugin = p; - setWindowTitle(plugin->name()); - - QToolBar* tools = addToolBar(tr("File Buttons")); - - QAction* fileOpen = tools->addAction(QIcon(*openIcon), tr("Load Preset"), - this, SLOT(load())); - fileOpen->setWhatsThis(tr(presetOpenText)); - QAction* fileSave = tools->addAction(QIcon(*saveIcon), tr("Save Preset"), - this, SLOT(save())); - fileSave->setWhatsThis(tr(presetSaveText)); - - tools->addAction(QWhatsThis::createAction(this)); - - onOff = tools->addAction(*onOffIcon, tr("bypass plugin")); - onOff->setCheckable(true); - onOff->setChecked(plugin->on()); - onOff->setWhatsThis(tr(presetBypassText)); - connect(onOff, SIGNAL(triggered(bool)), SLOT(bypassToggled(bool))); - - QString id; - id.setNum(plugin->plugin()->id()); - QString name(museGlobalShare + QString("/plugins/") + id + QString(".ui")); - - QWidget* mw; // main widget - QFile uifile(name); - if (uifile.exists()) { - // - // construct GUI from *.ui file - // - QFormBuilder builder; - // - // HACK: - // - QString path(museGlobalLib + "/designer"); -printf("build gui from ui <path><%s>\n", path.toLatin1().data()); - builder.addPluginPath(path); - - uifile.open(QFile::ReadOnly); - mw = builder.load(&uifile, this); - uifile.close(); - - setCentralWidget(mw); - connectPrebuiltGui(mw); - } - else { - mw = new QWidget(this); - setCentralWidget(mw); - QGridLayout* grid = new QGridLayout; - mw->setLayout(grid); - grid->setSpacing(2); - - int n = plugin->plugin()->parameter(); - resize(280, n*20+30); - - QFontMetrics fm = fontMetrics(); - int h = fm.height() + 4; - - for (int i = 0; i < n; ++i) { - double lower; - double upper; - double dlower; - double dupper; - double val = plugin->param(i); - double dval = val; - - plugin->range(i, &lower, &upper); - dlower = lower; - dupper = upper; - - if (plugin->isLog(i)) { - if (lower == 0.0) - lower = 0.001; - dlower = fast_log10(lower)*20.0; - dupper = fast_log10(upper)*20.0; - if (val == 0.0f) - dval = dlower; - else - dval = fast_log10(val) * 20.0; - } - if (plugin->isBool(i)) { - CheckBox* cb = new CheckBox(mw); - cb->setId(i); - cb->setText(QString(plugin->getParameterName(i))); - cb->setChecked(plugin->param(i) > 0.0); - cb->setFixedHeight(h); - cb->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); - - GuiWidget w; - w.widget = cb; - w.parameter = i; - w.type = GuiWidget::CHECKBOX; - gw.push_back(w); - grid->addWidget(cb, i, 0, 1, 3); - connect(cb, SIGNAL(valueChanged(double,int)), SLOT(setController(double, int))); - } - else { - QLabel* label = new QLabel(QString(plugin->getParameterName(i)), mw); - label->setFixedHeight(20); - label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); - FloatEntry* e = new FloatEntry(mw); - e->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); - e->setRange(lower, upper); - e->setId(i); - e->setFixedHeight(h); - e->setFrame(true); - GuiWidget w; - w.widget = e; - w.parameter = i; - w.type = GuiWidget::FLOAT_ENTRY; - gw.push_back(w); - - Slider* s = new Slider(mw); - s->setId(i); - s->setLog(plugin->isLog(i)); - s->setOrientation(Qt::Horizontal); - s->setFixedHeight(h); - s->setRange(dlower, dupper); - s->setLineStep((dupper-dlower)/100.0); - s->setPageStep((dupper-dlower)/10.0); - s->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); - w.widget = s; - w.parameter = i; - w.type = GuiWidget::SLIDER; - gw.push_back(w); - grid->addWidget(label, i, 0); - grid->addWidget(e, i, 1); - const char* p = plugin->getParameterLabel(i); - if (p) { - QLabel* l = new QLabel(mw); - l->setFixedHeight(h); - l->setText(p); - grid->addWidget(l, i, 2); - } - grid->addWidget(s, i, 3); - connect(s, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); - connect(e, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); - } - updateValue(i, val); - } - grid->setColumnStretch(3, 10); - } - connect(plugin->track(), SIGNAL(autoReadChanged(bool)), SLOT(autoChanged())); - connect(plugin->track(), SIGNAL(autoWriteChanged(bool)), SLOT(autoChanged())); - connect(plugin->track(), SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); - autoChanged(); - } - - - -void PluginGui::connectPrebuiltGui(QWidget* wContainer) - { - QObjectList l = wContainer->children(); - for (int i = 0; i < l.size(); ++i) { - - QObject* obj = l.at(i); - - const char* name = obj->objectName().toLatin1().data(); - - if (strcmp(obj->metaObject()->className(), "QFrame") == 0) { - connectPrebuiltGui((QWidget *)obj); - } - if (*name !='P') - continue; - GuiWidget w; - w.widget = (QWidget*)obj; - if (strcmp(obj->metaObject()->className(), "Awl::Slider") == 0) { - connect((Slider*)obj, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); - w.type = GuiWidget::SLIDER; - w.parameter = ((Slider*)obj)->id(); - } - else if (strcmp(obj->metaObject()->className(), "Awl::FloatEntry") == 0) { - connect((FloatEntry*)obj, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); - w.type = GuiWidget::FLOAT_ENTRY; - w.parameter = ((FloatEntry*)obj)->id(); - } - else if (strcmp(obj->metaObject()->className(), "Awl::CheckBox") == 0) { - w.type = GuiWidget::CHECKBOX; - w.parameter = ((CheckBox*)obj)->id(); - connect(obj, SIGNAL(valueChanged(double, int)), SLOT(setController(double, int))); - } - else if (strcmp(obj->metaObject()->className(), "Awl::ComboBox") == 0) { - w.type = GuiWidget::COMBOBOX; - w.parameter = ((ComboBox*)obj)->id(); - connect(obj, SIGNAL(valueChanged(double, int)), SLOT(setController(double,int))); - } - else { - printf("PluginGui::unknown widget class %s\n", obj->metaObject()->className()); - continue; - } - gw.push_back(w); - } -} - - -//--------------------------------------------------------- -// PluginGui -//--------------------------------------------------------- - -PluginGui::~PluginGui() - { - } - -//--------------------------------------------------------- -// setController -//--------------------------------------------------------- - -void PluginGui::setController(double val, int param) - { - if (plugin->isInt(param)) - val = rint(val); - CVal cval; - cval.f = val; - song->setControllerVal(plugin->track(), plugin->controller(param), cval); - } - -//--------------------------------------------------------- -// load -//--------------------------------------------------------- - -void PluginGui::load() - { - QString s("presets/plugins/"); - s += plugin->plugin()->label(); - s += "/"; - - QStringList pattern; - const char** p = preset_file_pattern; - while (*p) - pattern << *p++; - QString fn = getOpenFileName(s, pattern, this, tr("MusE: load preset")); - if (fn.isEmpty()) - return; - QFile* qf = fileOpen(this, fn, QString(".pre"), QIODevice::ReadOnly, true); - if (qf == 0) - return; - - QDomDocument doc; - int line, column; - QString err; - if (!doc.setContent(qf, false, &err, &line, &column)) { - QString col, ln, error; - col.setNum(column); - ln.setNum(line); - error = err + "\n at line: " + ln + " col: " + col; - printf("error reading med file: %s\n", error.toLatin1().data()); - delete qf; - return; - } - QDomNode node = doc.documentElement(); - - while (!node.isNull()) { - QDomElement e = node.toElement(); - if (e.isNull()) - continue; - if (e.tagName() == "muse") { - // QString version = e.attribute(QString("version")); - node = node.firstChild(); - while (!node.isNull()) { - QDomElement e = node.toElement(); - bool prefader; - if (e.tagName() == "plugin") - plugin->readConfiguration(node.firstChild(), &prefader); - else - printf("MusE:PluginGui: unknown tag %s\n", e.tagName().toLatin1().data()); - node = node.nextSibling(); - } - } - else - printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); - node = node.nextSibling(); - } - qf->close(); - delete qf; - } - -//--------------------------------------------------------- -// save -//--------------------------------------------------------- - -void PluginGui::save() - { - QString s("presets/plugins/"); - s += plugin->plugin()->label(); - s += "/"; - - QStringList pattern; - const char** p = preset_file_pattern; - while (*p) - pattern << *p++; - QString fn = getSaveFileName(s, pattern, this, - tr("MusE: save preset")); - if (fn.isEmpty()) - return; - QFile* f = fileOpen(this, fn, QString(".pre"), QIODevice::WriteOnly, true); - if (f == 0) - return; - Xml xml(f); - xml.header(); - xml.stag("muse version=\"1.0\""); - plugin->writeConfiguration(xml, true); - xml.etag("muse"); - f->close(); - delete f; - } - -//--------------------------------------------------------- -// bypassToggled -//--------------------------------------------------------- - -void PluginGui::bypassToggled(bool val) - { - plugin->setOn(val); - song->update(SC_ROUTE); - } - -//--------------------------------------------------------- -// setOn -//--------------------------------------------------------- - -void PluginGui::setOn(bool val) - { -// onOff->blockSignals(true); - onOff->setChecked(val); -// onOff->blockSignals(false); - } - -//--------------------------------------------------------- -// updateValue -//--------------------------------------------------------- - -void PluginGui::updateValue(int parameter, double value) - { - for (std::vector<GuiWidget>::iterator i = gw.begin(); i != gw.end(); ++i) { - int idx = i->parameter; - if (idx != parameter) - continue; - switch (i->type) { - case GuiWidget::SLIDER: - ((Slider*)(i->widget))->setValue(value); - break; - case GuiWidget::FLOAT_ENTRY: - { - const char* p = plugin->getParameterDisplay(idx, value); - if (p) - ((FloatEntry*)(i->widget))->setText(QString(p)); - else - ((FloatEntry*)(i->widget))->setValue(value); - } - break; - case GuiWidget::CHECKBOX: - ((CheckBox*)(i->widget))->setValue(value); - break; - case GuiWidget::COMBOBOX: - ((ComboBox*)(i->widget))->setValue(value); - break; - } - } - } - -//--------------------------------------------------------- -// updateValues -//--------------------------------------------------------- - -void PluginGui::updateValues() - { - int n = plugin->plugin()->parameter(); - for (int i = 0; i < n; ++i) { - double val = plugin->param(i); - updateValue(i, val); - } - } - -//--------------------------------------------------------- -// controllerChanged -//--------------------------------------------------------- - -void PluginGui::controllerChanged(int id) - { - double value = plugin->track()->ctrlVal(id).f; - for (std::vector<GuiWidget>::iterator i = gw.begin(); i != gw.end(); ++i) { - int idx = i->parameter; - if (plugin->controller(idx)->id() != id) - continue; - switch (i->type) { - case GuiWidget::SLIDER: - ((Slider*)(i->widget))->setValue(value); - break; - case GuiWidget::FLOAT_ENTRY: - { - const char* p = plugin->getParameterDisplay(idx, value); - if (p) - ((FloatEntry*)(i->widget))->setText(QString(p)); - else - ((FloatEntry*)(i->widget))->setValue(value); - } - break; - case GuiWidget::CHECKBOX: - ((CheckBox*)(i->widget))->setValue(value); - break; - case GuiWidget::COMBOBOX: - ((ComboBox*)(i->widget))->setValue(value); - break; - } - } - } - -//--------------------------------------------------------- -// autoChanged -//--------------------------------------------------------- - -void PluginGui::autoChanged() - { - bool ar = plugin->track()->autoRead(); - bool aw = plugin->track()->autoWrite(); - - // controller are enabled if - // autoRead is off - // autoRead and autoWrite are on (touch mode) - - bool ec = !ar || (ar && aw); - - for (std::vector<GuiWidget>::iterator i = gw.begin(); i != gw.end(); ++i) - i->widget->setEnabled(ec); - } - - |