void PionPlugin::openFile(const std::string& plugin_file) { releaseData(); // make sure we're not already pointing to something // use a temporary object first since openPlugin() may throw PionPluginData plugin_data(getPluginName(plugin_file)); // check to see if we already have a matching shared library boost::mutex::scoped_lock plugin_lock(m_plugin_mutex); PluginMap::iterator itr = m_plugin_map.find(plugin_data.m_plugin_name); if (itr == m_plugin_map.end()) { // no plug-ins found with the same name // open up the shared library using our temporary data object openPlugin(plugin_file, plugin_data); // may throw // all is good -> insert it into the plug-in map m_plugin_data = new PionPluginData(plugin_data); m_plugin_map.insert( std::make_pair(m_plugin_data->m_plugin_name, m_plugin_data) ); } else { // found an existing plug-in with the same name m_plugin_data = itr->second; } // increment the number of references ++ m_plugin_data->m_references; }
VstEffect::VstEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &vsteffect_plugin_descriptor, _parent, _key ), m_plugin( NULL ), m_pluginMutex(), m_key( *_key ), m_vstControls( this ) { if( !m_key.attributes["file"].isEmpty() ) { openPlugin( m_key.attributes["file"] ); } setDisplayName( m_key.attributes["file"].section( ".dll", 0, 0 ).isEmpty() ? m_key.name : m_key.attributes["file"].section( ".dll", 0, 0 ) ); }
bool Scripting::reloadPlugin(const QString &pluginName, bool isQuiet) { auto actionStr = "reload"; if (!closePlugin(pluginName, isQuiet)) { return pluginActionError(actionStr, pluginName, "close failed", isQuiet); } if (isPluginImported(pluginName)) { if (!evalScript(QString("reload(%1) != None").arg(getImportInContainerStr(pluginName)), Py_eval_input).toBool()) { return pluginActionError(actionStr, pluginName, "reload failed", isQuiet); } } if (!openPlugin(pluginName, isQuiet)) { return pluginActionError(actionStr, pluginName, "open failed", isQuiet); } return true; }
int loadPlugins(CONFIGBUTTON *c) { DIR *dir; struct dirent *file; PLUGIN_STRUCT tmp; struct PLUGIN_ENTRY *entry; int i, j; dir = opendir("."); do { file = readdir(dir); if (file == NULL) break; openPlugin(c, file->d_name); } while (1); /* This is a bit ugly, but I was unable to get sorting with linked lists working */ if (c->plugin != NULL) free(c->plugin); if ((c->plugin = malloc(sizeof(PLUGIN_STRUCT)*c->plugins)) == NULL) { c->plugins = 0; return -1; } entry = c->entry; for (i = 0; i < c->plugins; i++) { c->plugin[i].library = entry->library; c->plugin[i].getinfo = entry->getinfo; c->plugin[i].activate = entry->activate; c->plugin[i].item = entry->item; c->plugin[i].info = &entry->info; entry = entry->next; } for (i = 0; i < c->plugins; i++) for (j = i; j > 0 && c->plugin[j].info->sort_pos < c->plugin[j-1].info->sort_pos; j--) { tmp = c->plugin[j]; c->plugin[j] = c->plugin[j-1]; c->plugin[j-1] = tmp; } return 0; }
void PluginManager::loadPlugins(void) { struct dirent **nameList = NULL; int fileAmount = scandir(m_dir.c_str(), &nameList, pluginFilter, alphasort); if (fileAmount < 0) { UNUSED int err = errno; LOGE("Couldn't scan for plugins in <%s> : <%s>", m_dir.c_str(), strerror(err)); return; } std::unique_ptr<dirent*, std::function<void(dirent**)>> direntPtr(nameList, [fileAmount](dirent** dirs) { for (int i = 0; i < fileAmount; i++) { free(dirs[i]); } free(dirs); }); for (int i = 0; i < fileAmount; i++) { openPlugin(m_dir + nameList[i]->d_name); } }
VestigeInstrumentView::VestigeInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ), lastPosInMenu (0) { if( s_artwork == NULL ) { s_artwork = new QPixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) ); } m_openPluginButton = new pixmapButton( this, "" ); m_openPluginButton->setCheckable( false ); m_openPluginButton->setCursor( Qt::PointingHandCursor ); m_openPluginButton->move( 216, 81 ); m_openPluginButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file_active" ) ); m_openPluginButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file" ) ); connect( m_openPluginButton, SIGNAL( clicked() ), this, SLOT( openPlugin() ) ); toolTip::add( m_openPluginButton, tr( "Open other VST-plugin" ) ); m_openPluginButton->setWhatsThis( tr( "Click here, if you want to open another VST-plugin. After " "clicking on this button, a file-open-dialog appears " "and you can select your file." ) ); m_managePluginButton = new pixmapButton( this, "" ); m_managePluginButton->setCheckable( false ); m_managePluginButton->setCursor( Qt::PointingHandCursor ); m_managePluginButton->move( 216, 101 ); m_managePluginButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "track_op_menu_active" ) ); m_managePluginButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "track_op_menu" ) ); connect( m_managePluginButton, SIGNAL( clicked() ), this, SLOT( managePlugin() ) ); toolTip::add( m_managePluginButton, tr( "Control VST-plugin from LMMS host" ) ); m_managePluginButton->setWhatsThis( tr( "Click here, if you want to control VST-plugin from host." ) ); m_openPresetButton = new pixmapButton( this, "" ); m_openPresetButton->setCheckable( false ); m_openPresetButton->setCursor( Qt::PointingHandCursor ); m_openPresetButton->move( 200, 224 ); m_openPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "project_open", 20, 20 ) ); m_openPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "project_open", 20, 20 ) ); connect( m_openPresetButton, SIGNAL( clicked() ), this, SLOT( openPreset() ) ); toolTip::add( m_openPresetButton, tr( "Open VST-plugin preset" ) ); m_openPresetButton->setWhatsThis( tr( "Click here, if you want to open another *.fxp, *.fxb VST-plugin preset." ) ); m_rolLPresetButton = new pixmapButton( this, "" ); m_rolLPresetButton->setCheckable( false ); m_rolLPresetButton->setCursor( Qt::PointingHandCursor ); m_rolLPresetButton->move( 190, 201 ); m_rolLPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-left-press" ) ); m_rolLPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-left" ) ); connect( m_rolLPresetButton, SIGNAL( clicked() ), this, SLOT( previousProgram() ) ); toolTip::add( m_rolLPresetButton, tr( "Previous (-)" ) ); m_rolLPresetButton->setShortcut( Qt::Key_Minus ); m_rolLPresetButton->setWhatsThis( tr( "Click here, if you want to switch to another VST-plugin preset program." ) ); m_savePresetButton = new pixmapButton( this, "" ); m_savePresetButton->setCheckable( false ); m_savePresetButton->setCursor( Qt::PointingHandCursor ); m_savePresetButton->move( 224, 224 ); m_savePresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "project_save", 20, 20 ) ); m_savePresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "project_save", 20, 20 ) ); connect( m_savePresetButton, SIGNAL( clicked() ), this, SLOT( savePreset() ) ); toolTip::add( m_savePresetButton, tr( "Save preset" ) ); m_savePresetButton->setWhatsThis( tr( "Click here, if you want to save current VST-plugin preset program." ) ); m_rolRPresetButton = new pixmapButton( this, "" ); m_rolRPresetButton->setCheckable( false ); m_rolRPresetButton->setCursor( Qt::PointingHandCursor ); m_rolRPresetButton->move( 209, 201 ); m_rolRPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-right-press" ) ); m_rolRPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-right" ) ); connect( m_rolRPresetButton, SIGNAL( clicked() ), this, SLOT( nextProgram() ) ); toolTip::add( m_rolRPresetButton, tr( "Next (+)" ) ); m_rolRPresetButton->setShortcut( Qt::Key_Plus ); m_rolRPresetButton->setWhatsThis( tr( "Click here, if you want to switch to another VST-plugin preset program." ) ); m_selPresetButton = new QPushButton( tr( "" ), this ); m_selPresetButton->setGeometry( 228, 201, 16, 16 ); QMenu *menu = new QMenu; connect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); m_selPresetButton->setIcon( PLUGIN_NAME::getIconPixmap( "stepper-down" ) ); m_selPresetButton->setWhatsThis( tr( "Click here to select presets that are currently loaded in VST." ) ); m_selPresetButton->setMenu(menu); m_toggleGUIButton = new QPushButton( tr( "Show/hide GUI" ), this ); m_toggleGUIButton->setGeometry( 20, 130, 200, 24 ); m_toggleGUIButton->setIcon( embed::getIconPixmap( "zoom" ) ); m_toggleGUIButton->setFont( pointSize<8>( m_toggleGUIButton->font() ) ); connect( m_toggleGUIButton, SIGNAL( clicked() ), this, SLOT( toggleGUI() ) ); m_toggleGUIButton->setWhatsThis( tr( "Click here to show or hide the graphical user interface " "(GUI) of your VST-plugin." ) ); QPushButton * note_off_all_btn = new QPushButton( tr( "Turn off all " "notes" ), this ); note_off_all_btn->setGeometry( 20, 160, 200, 24 ); note_off_all_btn->setIcon( embed::getIconPixmap( "state_stop" ) ); note_off_all_btn->setFont( pointSize<8>( note_off_all_btn->font() ) ); connect( note_off_all_btn, SIGNAL( clicked() ), this, SLOT( noteOffAll() ) ); setAcceptDrops( true ); _instrument2 = _instrument; _parent2 = _parent; }