The Plugin Browser is a new UI component that displays all available LV2 plugins in a hierarchical tree view, organized by category. This component is now integrated into the main window.
- Hierarchical Organization: Plugins are grouped by category (Effect, Generator, Analyzer, Utility, etc.)
- Plugin Information: Each plugin shows:
- Plugin name
- Author name (in parentheses)
- Audio port configuration [inputs/outputs]
- Example: "Delay Plugin (Author Name) [2in/2out]"
- Real-time Search: Type in the search box to filter plugins
- Multi-field Search: Searches both plugin name and author
- Case-insensitive: Search is not case-sensitive
- Placeholder Text: Search box shows "Search plugins..." hint
- Left Panel: Plugin browser occupies 250px on the left side of the window
- Resizable: Automatically adjusts height when window is resized
- Category Expansion: All categories are expanded by default for easy browsing
- Selection: Click to select a plugin (highlighted in tree view)
- Double-click Ready: Infrastructure in place for double-click to load plugins
include/violet/plugin_browser.h- Header file with class definitionsrc/ui/plugin_browser.cpp- Implementation file
- Integrated into
MainWindowclass - Connected to
PluginManagerfor plugin enumeration - Automatically populated with available LV2 plugins on startup
// Create the browser
bool Create(HWND parent, HINSTANCE hInstance, int x, int y, int width, int height);
// Set plugin manager
void SetPluginManager(PluginManager* manager);
// Refresh plugin list
void RefreshPluginList();
// Search
void SetSearchFilter(const std::string& filter);
void ClearSearchFilter();
// Get selected plugin
std::string GetSelectedPluginUri() const;The Plugin Browser is automatically created when the main window is initialized:
- Initialization: Plugin manager scans for available LV2 plugins
- Display: Plugins are automatically populated in the tree view
- Search: User can type in search box to filter plugins
- Selection: User can click on a plugin to select it
- Integration Ready: Selected plugin URI can be retrieved for loading
- Drag-and-Drop: Drag plugins from browser to active plugins panel
- Context Menu: Right-click menu for plugin actions
- Plugin Details: Show detailed plugin information on selection
- Custom Categories: Allow user to create custom category filters
- Favorites: Mark plugins as favorites for quick access
- Recent: Show recently used plugins
- Plugin Loading: Double-click to load plugin into processing chain
// In MainWindow
if (pluginBrowser_) {
// Get selected plugin
std::string pluginUri = pluginBrowser_->GetSelectedPluginUri();
if (!pluginUri.empty()) {
// Load plugin into processing chain
if (processingChain_) {
uint32_t nodeId = processingChain_->AddPlugin(pluginUri);
// Display plugin in active plugins panel
}
}
}The Plugin Browser appears on the left side of the window:
+-------------------+----------------------------------+
| Violet - LV2 Plugin Host |
+-------------------+----------------------------------+
| File Audio Help | |
+-------------------+----------------------------------+
| [Search plugins...] | |
| ├─ Effect | |
| │ ├─ Delay (Auth)| |
| │ ├─ Reverb (...)| |
| │ └─ ... | |
| ├─ Generator | Active Plugins Panel |
| │ └─ ... | (To Be Implemented) |
| ├─ Analyzer | |
| └─ ... | |
+-------------------+----------------------------------+
| Ready | Audio: Stopped | CPU: 0% | Plugins: 42 |
+------------------------------------------------------+
The plugin browser is automatically built as part of the Violet project:
meson setup build --cross-file cross-mingw64.txt
ninja -C buildThe implementation successfully compiles with MinGW-w64 for Windows target.