std::string PluginManagerImpl::open_gui_plugin_main(const app_PluginRef &plugin, const grt::BaseListRef &args, GUIPluginFlags flags) { NativeHandle handle; grt::Module *module= _grtm->get_grt()->get_module(_plugin_source_module[plugin->name()]); std::string open_plugin_id= make_open_plugin_id(module, plugin->moduleFunctionName(), args); if (_open_gui_plugins.find(open_plugin_id) != _open_gui_plugins.end()) { handle= _open_gui_plugins[open_plugin_id]; _show_gui_plugin_slot(handle); } else { grt::Module *module= _grtm->get_grt()->get_module(_plugin_source_module[plugin->name()]); // open the editor and get a handle for the GUI object to pass to the frontend NativeHandle handle= _open_gui_plugin_slot(_grtm, module, *plugin->moduleName(), *plugin->moduleFunctionName(), args, flags); if (handle) { _open_gui_plugins[open_plugin_id]= handle; _show_gui_plugin_slot(handle); } } return open_plugin_id; }
void PluginManagerImpl::open_standalone_plugin_main(const app_PluginRef &plugin, const grt::BaseListRef &args) { grt::Module *module= _grtm->get_grt()->get_module(plugin->moduleName()); if (!module) throw grt::grt_runtime_error("Cannot execute plugin "+*plugin->name(), "Called module "+*plugin->moduleName()+" not found"); module->call_function(*plugin->moduleFunctionName(), args); }
bool PluginManagerImpl::check_plugin_validity(const app_PluginRef &plugin, grt::Module *module) { if (plugin->pluginType() == GUI_PLUGIN_TYPE) { // not much that can be tested here, maybe check if the dll actually exists return true; } else if (plugin->pluginType() == STANDALONE_GUI_PLUGIN_TYPE || plugin->pluginType() == NORMAL_PLUGIN_TYPE) { // check if the module matches and the function exists if (plugin->moduleName() != module->name()) { g_warning("Plugin '%s' from module %s declares moduleName() as '%s', which doesn't match the module it belongs to", plugin->name().c_str(), module->name().c_str(), plugin->moduleName().c_str()); return false; } { std::string f= plugin->moduleFunctionName(); if (!module->has_function(f)) { g_warning("Plugin '%s' from module %s has invalid moduleFunctionName '%s'", plugin->name().c_str(), module->name().c_str(), f.c_str()); return false; } } return true; } else if (plugin->pluginType() == INTERNAL_PLUGIN_TYPE) { return true; } else if (0 == (*plugin->pluginType()).find(CUSTOM_PLUGIN_TYPE)) { return true; } else { g_warning("Plugin '%s' from module %s has invalid type '%s'", plugin->name().c_str(), module->name().c_str(), plugin->pluginType().c_str()); } return false; }
grt::ValueRef PluginManagerImpl::open_normal_plugin_grt(grt::GRT *grt, const app_PluginRef &plugin, const grt::BaseListRef &args) { grt::Module *module= _grtm->get_grt()->get_module(plugin->moduleName()); if (!module) throw grt::grt_runtime_error("Cannot execute plugin "+*plugin->name(), "Called module "+*plugin->moduleName()+" not found"); return module->call_function(*plugin->moduleFunctionName(), args); }