Heavy-duty abstraction work to split type-specific classes into
[ardour.git] / libs / ardour / ardour / plugin_manager.h
1 #ifndef __ardour_plugin_manager_h__
2 #define __ardour_plugin_manager_h__
3
4 #include <list>
5 #include <map>
6 #include <string>
7
8 #include <boost/shared_ptr.hpp>
9
10 #include <ardour/types.h>
11
12 namespace ARDOUR {
13
14 class PluginInfo;
15 class Plugin;
16 class Session;
17 class AudioEngine;
18
19 class PluginManager {
20   public:
21         PluginManager (ARDOUR::AudioEngine&);
22         ~PluginManager ();
23
24         std::list<PluginInfo*> &vst_plugin_info () { return _vst_plugin_info; }
25         std::list<PluginInfo*> &ladspa_plugin_info () { return _ladspa_plugin_info; }
26         std::list<PluginInfo*> &au_plugin_info () { return _au_plugin_info; }
27
28         void refresh ();
29
30         int add_ladspa_directory (std::string dirpath);
31         int add_vst_directory (std::string dirpath);
32
33         boost::shared_ptr<Plugin> load (ARDOUR::Session& s, PluginInfo* info);
34
35         static PluginManager* the_manager() { return _manager; }
36
37   private:
38         ARDOUR::AudioEngine&   _engine;
39         std::list<PluginInfo*> _vst_plugin_info;
40         std::list<PluginInfo*> _ladspa_plugin_info;
41         std::list<PluginInfo*> _au_plugin_info;
42         std::map<uint32_t, std::string> rdf_type;
43
44         std::string ladspa_path;
45         std::string vst_path;
46
47         void ladspa_refresh ();
48         void vst_refresh ();
49
50         void add_lrdf_data (const std::string &path);
51         void add_ladspa_presets ();
52         void add_vst_presets ();
53         void add_presets (std::string domain);
54
55         int vst_discover_from_path (std::string path);
56         int vst_discover (std::string path);
57
58         int ladspa_discover_from_path (std::string path);
59         int ladspa_discover (std::string path);
60
61         int au_discover ();
62
63         std::string get_ladspa_category (uint32_t id);
64
65         static PluginManager* _manager; // singleton
66 };
67
68 } /* namespace ARDOUR */
69
70 #endif /* __ardour_plugin_manager_h__ */
71