From 1973e6ec937a59c74dbef38829e22c484389112d Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 7 Jan 2016 22:55:08 +0100 Subject: lxvst preset name display (user presets only) --- libs/ardour/lxvst_plugin.cc | 66 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'libs/ardour/lxvst_plugin.cc') diff --git a/libs/ardour/lxvst_plugin.cc b/libs/ardour/lxvst_plugin.cc index 4bf6fca914..ac868cd565 100644 --- a/libs/ardour/lxvst_plugin.cc +++ b/libs/ardour/lxvst_plugin.cc @@ -17,6 +17,10 @@ */ +#include +#include + +#include "ardour/filesystem_paths.h" #include "ardour/linux_vst_support.h" #include "ardour/session.h" #include "ardour/lxvst_plugin.h" @@ -94,6 +98,68 @@ LXVSTPluginInfo::load (Session& session) } } +std::vector +LXVSTPluginInfo::get_presets(Session&) +{ + std::vector p; +#ifndef NO_PLUGIN_STATE + if (!Config->get_use_lxvst()) { + return p; + } + +#if 0 // TODO - cache, instantiating the plugin can be heavy + /* Built-in presets */ + VSTHandle* handle = vstfx_load(path.c_str()); + Session::vst_current_loading_id = atoi (unique_id); + AEffect* plugin = handle->main_entry (Session::vst_callback); + Session::vst_current_loading_id = 0; + + plugin->dispatcher (plugin, effOpen, 0, 0, 0, 0); // :( + int const vst_version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, NULL, 0); + + for (int i = 0; i < plugin->numPrograms; ++i) { + Plugin::PresetRecord r (string_compose (X_("VST:%1:%2"), unique_id, i), "", false); + if (vst_version >= 2) { + char buf[256]; + if (plugin->dispatcher (plugin, 29, i, 0, buf, 0) == 1) { + r.label = buf; + } else { + r.label = string_compose (_("Preset %1"), i); + } + } else { + r.label = string_compose (_("Preset %1"), i); + } + p.push_back (r); + } + + plugin->dispatcher (plugin, effMainsChanged, 0, 0, 0, 0); + plugin->dispatcher (plugin, effClose, 0, 0, 0, 0); // :( + + if (handle->plugincnt) { + handle->plugincnt--; + } + vstfx_unload (handle); +#endif + /* user presets */ + XMLTree* t = new XMLTree; + std::string pf = Glib::build_filename (ARDOUR::user_config_directory (), "presets", string_compose ("vst-%1", unique_id)); + if (Glib::file_test (pf, Glib::FILE_TEST_EXISTS)) { + t->set_filename (pf); + if (t->read ()) { + XMLNode* root = t->root (); + for (XMLNodeList::const_iterator i = root->children().begin(); i != root->children().end(); ++i) { + XMLProperty* uri = (*i)->property (X_("uri")); + XMLProperty* label = (*i)->property (X_("label")); + p.push_back (Plugin::PresetRecord (uri->value(), label->value(), true)); + } + } + } + delete t; +#endif + + return p; +} + LXVSTPluginInfo::LXVSTPluginInfo() { type = ARDOUR::LXVST; -- cgit v1.2.3