audioplugindialog.cpp
来自「LINUX下的混音软件」· C++ 代码 · 共 899 行 · 第 1/2 页
CPP
899 行
((*it)->getType() & PluginPort::Input)) { // Check for port existence and create with default value // if it doesn't exist. Modification occurs through the // slotPluginPortChanged signal. // if (inst->getPort(count) == 0) { inst->addPort(count, (float)(*it)->getDefaultValue()); std::cerr << "Plugin port name " << (*it)->getName() << ", default: " << (*it)->getDefaultValue() << std::endl; } } else if ((*it)->getType() & PluginPort::Audio) { if ((*it)->getType() & PluginPort::Input) ++ins; else if ((*it)->getType() & PluginPort::Output) ++outs; } ++count; } if (ins == 1 && outs == 1) m_insOuts->setText(i18n("mono")); else if (ins == 2 && outs == 2) m_insOuts->setText(i18n("stereo")); else m_insOuts->setText(i18n("%1 in, %2 out").arg(ins).arg(outs)); QString shortName(plugin->getName()); int parenIdx = shortName.find(" ("); if (parenIdx > 0) { shortName = shortName.left(parenIdx); if (shortName == "Null") shortName = "Plugin"; } } adjustSize(); setFixedSize(minimumSizeHint()); // tell the sequencer emit pluginSelected(m_containerId, m_index, number - 1); if (plugin) { int current = -1; QStringList programs = getProgramsForInstance(inst, current); if (programs.count() > 0) { m_programLabel = new QLabel(i18n("Program: "), m_pluginParamsBox); m_programCombo = new KComboBox(m_pluginParamsBox); m_programCombo->setSizeLimit(20); m_programCombo->insertItem(i18n("<none selected>")); m_gridLayout->addMultiCellWidget(m_programLabel, 0, 0, 0, 0, Qt::AlignRight); m_gridLayout->addMultiCellWidget(m_programCombo, 0, 0, 1, m_gridLayout->numCols() - 1, Qt::AlignLeft); connect(m_programCombo, SIGNAL(activated(const QString &)), this, SLOT(slotPluginProgramChanged(const QString &))); m_programCombo->clear(); m_programCombo->insertItem(i18n("<none selected>")); m_programCombo->insertStringList(programs); m_programCombo->setCurrentItem(current + 1); m_programCombo->adjustSize(); m_programLabel->show(); m_programCombo->show(); } AudioPlugin::PortIterator it = plugin->begin(); int count = 0; for (; it != plugin->end(); ++it) { if (((*it)->getType() & PluginPort::Control) && ((*it)->getType() & PluginPort::Input)) { PluginControl *control = new PluginControl(m_pluginParamsBox, m_gridLayout, PluginControl::Rotary, *it, m_pluginManager, count, inst->getPort(count)->value, showBounds, portCount > tooManyPorts); connect(control, SIGNAL(valueChanged(float)), this, SLOT(slotPluginPortChanged(float))); m_pluginWidgets.push_back(control); } ++count; } m_pluginParamsBox->show(); } if (guiWasShown) { emit showPluginGUI(m_containerId, m_index); m_guiShown = true; }#ifdef HAVE_LIBLO bool gui = m_pluginGUIManager->hasGUI(m_containerId, m_index); actionButton(Details)->setEnabled(gui);#endif}QStringListAudioPluginDialog::getProgramsForInstance(AudioPluginInstance *inst, int ¤t){ QStringList list; int mappedId = inst->getMappedId(); QString currentProgram = strtoqstr(inst->getProgram()); MappedObjectPropertyList propertyList = StudioControl::getStudioObjectProperty (mappedId, MappedPluginSlot::Programs); current = -1; for (MappedObjectPropertyList::iterator i = propertyList.begin(); i != propertyList.end(); ++i) { if (*i == currentProgram) current = list.count(); list.append(*i); } return list;}voidAudioPluginDialog::slotPluginPortChanged(float value){ const QObject* object = sender(); const PluginControl* control = dynamic_cast<const PluginControl*>(object); if (!control) return ; // store the new value AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); inst->getPort(control->getIndex())->setValue(value); emit pluginPortChanged(m_containerId, m_index, control->getIndex());}voidAudioPluginDialog::slotPluginProgramChanged(const QString &value){ // store the new value AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (m_programCombo && value == m_programCombo->text(0)) { // "<none set>" inst->setProgram(""); } else { inst->setProgram(qstrtostr(value)); emit pluginProgramChanged(m_containerId, m_index); }}voidAudioPluginDialog::updatePlugin(int number){ for (unsigned int i = 0; i < m_pluginsInList.size(); ++i) { if (m_pluginsInList[i] == number + 1) { blockSignals(true); m_pluginList->setCurrentItem(i); blockSignals(false); return ; } }}voidAudioPluginDialog::updatePluginPortControl(int port){ AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (inst) { PluginPortInstance *pti = inst->getPort(port); if (pti) { for (std::vector<PluginControl *>::iterator i = m_pluginWidgets.begin(); i != m_pluginWidgets.end(); ++i) { if ((*i)->getIndex() == port) { (*i)->setValue(pti->value, false); // don't emit return ; } } } }}voidAudioPluginDialog::updatePluginProgramControl(){ AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (inst) { std::string program = inst->getProgram(); if (m_programCombo) { m_programCombo->blockSignals(true); m_programCombo->setCurrentText(strtoqstr(program)); m_programCombo->blockSignals(false); } for (std::vector<PluginControl *>::iterator i = m_pluginWidgets.begin(); i != m_pluginWidgets.end(); ++i) { PluginPortInstance *pti = inst->getPort((*i)->getIndex()); if (pti) { (*i)->setValue(pti->value, false); // don't emit } } }}voidAudioPluginDialog::updatePluginProgramList(){ if (!m_programLabel) return ; AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (!inst) return ; if (!m_programCombo) { int current = -1; QStringList programs = getProgramsForInstance(inst, current); if (programs.count() > 0) { m_programLabel = new QLabel(i18n("Program: "), m_pluginParamsBox); m_programCombo = new KComboBox(m_pluginParamsBox); m_programCombo->setSizeLimit(20); m_programCombo->insertItem(i18n("<none selected>")); m_gridLayout->addMultiCellWidget(m_programLabel, 0, 0, 0, 0, Qt::AlignRight); m_gridLayout->addMultiCellWidget(m_programCombo, 0, 0, 1, m_gridLayout->numCols() - 1, Qt::AlignLeft); m_programCombo->clear(); m_programCombo->insertItem(i18n("<none selected>")); m_programCombo->insertStringList(programs); m_programCombo->setCurrentItem(current + 1); m_programCombo->adjustSize(); m_programLabel->show(); m_programCombo->show(); m_programCombo->blockSignals(true); connect(m_programCombo, SIGNAL(activated(const QString &)), this, SLOT(slotPluginProgramChanged(const QString &))); } else { return ; } } else { } while (m_programCombo->count() > 0) { m_programCombo->removeItem(0); } int current = -1; QStringList programs = getProgramsForInstance(inst, current); if (programs.count() > 0) { m_programCombo->show(); m_programLabel->show(); m_programCombo->clear(); m_programCombo->insertItem(i18n("<none selected>")); m_programCombo->insertStringList(programs); m_programCombo->setCurrentItem(current + 1); } else { m_programLabel->hide(); m_programCombo->hide(); } m_programCombo->blockSignals(false);}voidAudioPluginDialog::slotBypassChanged(bool bp){ AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (inst) inst->setBypass(bp); emit bypassed(m_containerId, m_index, bp);}voidAudioPluginDialog::windowActivationChange(bool oldState){ if (isActiveWindow()) { emit windowActivated(); }}voidAudioPluginDialog::closeEvent(QCloseEvent *e){ e->accept(); emit destroyed(m_containerId, m_index);}voidAudioPluginDialog::slotClose(){ emit destroyed(m_containerId, m_index); reject();}voidAudioPluginDialog::slotCopy(){ int item = m_pluginList->currentItem(); int number = m_pluginsInList[item] - 1; if (number >= 0) { AudioPluginClipboard *clipboard = m_pluginManager->getPluginClipboard(); clipboard->m_pluginNumber = number; AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (inst) { clipboard->m_configuration = inst->getConfiguration(); } else { clipboard->m_configuration.clear(); } std::cout << "AudioPluginDialog::slotCopy - plugin number = " << number << std::endl; if (m_programCombo && m_programCombo->currentItem() > 0) { clipboard->m_program = qstrtostr(m_programCombo->currentText()); } else { clipboard->m_program = ""; } clipboard->m_controlValues.clear(); std::vector<PluginControl*>::iterator it; for (it = m_pluginWidgets.begin(); it != m_pluginWidgets.end(); ++it) { std::cout << "AudioPluginDialog::slotCopy - " << "value = " << (*it)->getValue() << std::endl; clipboard->m_controlValues.push_back((*it)->getValue()); } }}voidAudioPluginDialog::slotPaste(){ AudioPluginClipboard *clipboard = m_pluginManager->getPluginClipboard(); std::cout << "AudioPluginDialog::slotPaste - paste plugin id " << clipboard->m_pluginNumber << std::endl; if (clipboard->m_pluginNumber != -1) { int count = 0; for (std::vector<int>::iterator it = m_pluginsInList.begin(); it != m_pluginsInList.end(); ++it) { if ((*it) == clipboard->m_pluginNumber + 1) break; count++; } if (count >= int(m_pluginsInList.size())) return ; // now select the plugin // m_pluginList->setCurrentItem(count); slotPluginSelected(count); // set configuration data // for (std::map<std::string, std::string>::const_iterator i = clipboard->m_configuration.begin(); i != clipboard->m_configuration.end(); ++i) { emit changePluginConfiguration(m_containerId, m_index, false, strtoqstr(i->first), strtoqstr(i->second)); } // and set the program // if (m_programCombo && clipboard->m_program != "") { m_programCombo->setCurrentText(strtoqstr(clipboard->m_program)); slotPluginProgramChanged(strtoqstr(clipboard->m_program)); } // and ports // count = 0; for (std::vector<PluginControl *>::iterator i = m_pluginWidgets.begin(); i != m_pluginWidgets.end(); ++i) { if (count < clipboard->m_controlValues.size()) { (*i)->setValue(clipboard->m_controlValues[count], true); } ++count; } }}voidAudioPluginDialog::slotDefault(){ AudioPluginInstance *inst = m_pluginContainer->getPlugin(m_index); if (!inst) return ; int i = m_pluginList->currentItem(); int n = m_pluginsInList[i]; if (n == 0) return ; AudioPlugin *plugin = m_pluginManager->getPlugin(n - 1); if (!plugin) return ; for (std::vector<PluginControl *>::iterator i = m_pluginWidgets.begin(); i != m_pluginWidgets.end(); ++i) { for (AudioPlugin::PortIterator pi = plugin->begin(); pi != plugin->end(); ++pi) { if ((*pi)->getNumber() == (*i)->getIndex()) { (*i)->setValue((*pi)->getDefaultValue(), true); // and emit break; } } }}}#include "AudioPluginDialog.moc"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?