Beispiel #1
0
//
// only used for Natron internal plugins (ViewerGroup, Dot, DiskCache, BackDrop, Roto)
// see also AppManager::getPluginBinary(), OFX::Host::PluginCache::getPluginById()
//
PluginPtr
AppManagerPrivate::findPluginById(const std::string& newId,
                                  int major,
                                  int minor) const
{
    for (PluginsMap::const_iterator it = _plugins.begin(); it != _plugins.end(); ++it) {
        for (PluginVersionsOrdered::const_reverse_iterator itver = it->second.rbegin();
             itver != it->second.rend();
             ++itver) {
            if ( ( (*itver)->getPluginID() == newId ) &&
                   (major == -1 ||
                    (*itver)->getPropertyUnsafe<unsigned int>(kNatronPluginPropVersion, 0) == (unsigned int)major) &&
                   (minor == -1 ||
                    (*itver)->getPropertyUnsafe<unsigned int>(kNatronPluginPropVersion, 1) == (unsigned int)minor ) ) {
                return (*itver);
            }
        }
    }

    return PluginPtr();
}
Beispiel #2
0
PluginPtr
NodeCreationDialog::getPlugin(QString* presetName) const
{
    QString lineEditText = _imp->textEdit->text();

    const CompleterLineEdit::PluginsNamesMap& names = _imp->textEdit->getPluginNamesMap();
    for (CompleterLineEdit::PluginsNamesMap::const_iterator it = names.begin(); it!=names.end(); ++it) {
        if (it->second.comboLabel == lineEditText) {
            if (presetName) {
                *presetName = it->second.presetName;
            }
            PluginPtr ret = it->second.plugin.lock();
            if (ret) {
                incrementPluginWeight(QString::fromUtf8(ret->getPluginID().c_str()),
                                      it->second.presetName,
                                      ret->getMajorVersion());
            }
            return ret;
        }
    }

    return PluginPtr();
}
PluginGroupNodePtr
GuiApplicationManagerPrivate::findPluginToolButtonOrCreateInternal(const std::list<PluginGroupNodePtr>& children,
                                                                   const PluginGroupNodePtr& parent,
                                                                   const PluginPtr& plugin,
                                                                   const QStringList& grouping,
                                                                   const QStringList& groupingIcon)
{
    assert(plugin);
    assert(groupingIcon.size() == grouping.size() || groupingIcon.isEmpty() );

    // On first call of this function, children are top-level toolbuttons
    // Otherwise this tree node has children
    // We ensure that the path in the tree leading to the plugin in parameter is created by recursing on the children
    // If there are no children that means we reached the wanted PluginGroupNode
    QString nodeIDToFind;
    if (grouping.empty()) {
        // Look for plugin ID
        nodeIDToFind = QString::fromUtf8(plugin->getPluginID().c_str());
    } else {
        // Look for grouping menu item
        nodeIDToFind = grouping[0];
    }

    for (std::list<PluginGroupNodePtr>::const_iterator it = children.begin(); it != children.end(); ++it) {

        // If we find a node with the same ID, then we found it already.
        if ( (*it)->getTreeNodeID() == nodeIDToFind ) {
            if (grouping.empty()) {
                // This is a leaf (plug-in), return it
                return *it;
            } else {

                // This is an intermidiate menu item, recurse
                QStringList newGrouping, newIconsGrouping;
                for (int i = 1; i < grouping.size(); ++i) {
                    newGrouping.push_back(grouping[i]);
                }
                for (int i = 1; i < groupingIcon.size(); ++i) {
                    newIconsGrouping.push_back(groupingIcon[i]);
                }

                return findPluginToolButtonOrCreateInternal( (*it)->getChildren(), *it, plugin, newGrouping, newIconsGrouping);
            }
        }
    }

    // Ok the PluginGroupNode does not exist yet, create it
    QString treeNodeName, iconFilePath;
    if (grouping.empty()) {
        // This is a leaf (plug-in), take the plug-in label and icon
        treeNodeName = QString::fromUtf8(plugin->getLabelWithoutSuffix().c_str());
        iconFilePath = QString::fromUtf8(plugin->getProperty<std::string>(kNatronPluginPropIconFilePath).c_str());
    } else {
        // For menu items, take from grouping
        treeNodeName = grouping[0];
        iconFilePath = groupingIcon.isEmpty() ? QString() : groupingIcon[0];
    }
    PluginGroupNodePtr ret(new PluginGroupNode(grouping.empty() ? plugin : PluginPtr(), treeNodeName, iconFilePath));

    // If there is a parent, add it as a child
    if (parent) {
        parent->tryAddChild(ret);
        ret->setParent(parent);
    } else {
        // No parent, this is a top-level toolbutton
        _topLevelToolButtons.push_back(ret);
    }

    // If we still did not reach the desired tree node, find it, advancing (removing the first item) in the grouping
    if (!grouping.empty()) {
        QStringList newGrouping, newIconsGrouping;
        for (int i = 1; i < grouping.size(); ++i) {
            newGrouping.push_back(grouping[i]);
        }
        for (int i = 1; i < groupingIcon.size(); ++i) {
            newIconsGrouping.push_back(groupingIcon[i]);
        }

        return findPluginToolButtonOrCreateInternal(ret->getChildren(), ret, plugin, newGrouping, newIconsGrouping);
    }

    return ret;
} // GuiApplicationManagerPrivate::findPluginToolButtonOrCreateInternal
Beispiel #4
0
PluginPtr LadspaPluginInfo::createPlugin (nframes_t sampleRate) const
{
  return PluginPtr(new LadspaPlugin(m_descriptor, sampleRate ) );
}