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 &current){    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 + -
显示快捷键?