VSTPluginLib *CSelectPluginDlg::ScanPlugins(const mpt::PathString &path, CWnd *parent) //------------------------------------------------------------------------------------ { CVstPluginManager *pManager = theApp.GetPluginManager(); VSTPluginLib *plugLib = nullptr; bool update = false; CDialog pluginScanDlg; pluginScanDlg.Create(IDD_SCANPLUGINS, parent); pluginScanDlg.CenterWindow(parent); pluginScanDlg.ModifyStyle(0, WS_SYSMENU, WS_SYSMENU); pluginScanDlg.ShowWindow(SW_SHOW); FolderScanner scan(path, true); mpt::PathString fileName; int files = 0; while(scan.NextFile(fileName) && pluginScanDlg.IsWindowVisible()) { if(!mpt::PathString::CompareNoCase(fileName.GetFileExt(), MPT_PATHSTRING(".dll"))) { CWnd *text = pluginScanDlg.GetDlgItem(IDC_SCANTEXT); std::wstring scanStr = L"Scanning Plugin...\n" + fileName.ToWide(); ::SetWindowTextW(text->m_hWnd, scanStr.c_str()); MSG msg; while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } VSTPluginLib *lib = pManager->AddPlugin(fileName, mpt::ustring(), false); if(lib) { update = true; if(!VerifyPlug(lib, parent)) { pManager->RemovePlugin(lib); } else { plugLib = lib; files++; } } } } if(update) { // Force selection to last added plug. Reporting::Information(mpt::String::Print("Found %1 plugin%2.", files, files == 1 ? "" : "s").c_str(), parent); return plugLib; } else { Reporting::Error("Could not find any valid VST plugins."); return nullptr; } }
void CSelectPluginDlg::OnRemovePlugin() //------------------------------------- { const HTREEITEM pluginToDelete = m_treePlugins.GetSelectedItem(); VSTPluginLib *pPlug = GetSelectedPlugin(); CVstPluginManager *pManager = theApp.GetPluginManager(); if ((pManager) && (pPlug)) { if(pManager->RemovePlugin(pPlug)) { m_treePlugins.DeleteItem(pluginToDelete); } } }
void CSelectPluginDlg::OnAddPlugin() //---------------------------------- { FileDialog dlg = OpenFileDialog() .AllowMultiSelect() .DefaultExtension("dll") .ExtensionFilter("VST Plugins (*.dll)|*.dll||") .WorkingDirectory(TrackerSettings::Instance().PathPlugins.GetWorkingDir()); if(!dlg.Show(this)) return; TrackerSettings::Instance().PathPlugins.SetWorkingDir(dlg.GetWorkingDirectory()); CVstPluginManager *pManager = theApp.GetPluginManager(); VSTPluginLib *plugLib = nullptr; bool update = false; const FileDialog::PathList &files = dlg.GetFilenames(); for(size_t counter = 0; counter < files.size(); counter++) { if (pManager) { VSTPluginLib *lib = pManager->AddPlugin(files[counter], mpt::ustring(), false); if(lib != nullptr) { update = true; if(!VerifyPlug(lib, this)) { pManager->RemovePlugin(lib); } else { plugLib = lib; // If this plugin was missing anywhere, try loading it ReloadMissingPlugins(lib); } } } } if(update) { // Force selection to last added plug. UpdatePluginsList(plugLib ? plugLib->pluginId2 : 0); } else { Reporting::Error("At least one selected file was not a valid VST Plugin."); } }