// // 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(); }
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
PluginPtr LadspaPluginInfo::createPlugin (nframes_t sampleRate) const { return PluginPtr(new LadspaPlugin(m_descriptor, sampleRate ) ); }