Fixes to bundle manager to make it vaguely usable.
[ardour.git] / libs / ardour / ardour / plugin_manager.h
index 64b871104bb3b6c8e77576d0f579fdbd8ee0a8d5..858decd0e5faf819e931b92b710f3b9d43ac16ee 100644 (file)
 #include <list>
 #include <map>
 #include <string>
+#include <set>
 
 #include <ardour/types.h>
 #include <ardour/plugin.h>
 
+#ifdef HAVE_SLV2
+#include <ardour/lv2_plugin.h>
+#endif
+
 namespace ARDOUR {
 
 class Plugin;
-class Session;
-class AudioEngine;
 
 class PluginManager {
   public:
        PluginManager ();
        ~PluginManager ();
 
-       ARDOUR::PluginInfoList &vst_plugin_info () { return _vst_plugin_info; }
+       /* realtime plugin APIs */
+
+       ARDOUR::PluginInfoList &vst_plugin_info ()    { return _vst_plugin_info; }
        ARDOUR::PluginInfoList &ladspa_plugin_info () { return _ladspa_plugin_info; }
-       ARDOUR::PluginInfoList &au_plugin_info () { return _au_plugin_info; }
+       ARDOUR::PluginInfoList &lv2_plugin_info ()    { return _lv2_plugin_info; }
+       ARDOUR::PluginInfoList &au_plugin_info ()     { return _au_plugin_info; }
 
        void refresh ();
 
@@ -49,10 +55,39 @@ class PluginManager {
 
        static PluginManager* the_manager() { return _manager; }
 
+       void load_favorites ();
+       void save_favorites ();
+       void add_favorite (ARDOUR::PluginType type, std::string unique_id);
+       void remove_favorite (ARDOUR::PluginType type, std::string unique_id);
+       bool is_a_favorite_plugin (const PluginInfoPtr&);
+       
   private:
+       struct FavoritePlugin {
+           ARDOUR::PluginType type;
+           std::string unique_id;
+
+           FavoritePlugin (ARDOUR::PluginType t, std::string id) 
+           : type (t), unique_id (id) {}
+           
+           bool operator==(const FavoritePlugin& other) const {
+                   return other.type == type && other.unique_id == unique_id;
+           }
+
+           bool operator<(const FavoritePlugin& other) const {
+                   return other.type < type || other.unique_id < unique_id;
+           }
+       };
+       typedef std::set<FavoritePlugin> FavoritePluginList;
+       FavoritePluginList favorites;
+
        ARDOUR::PluginInfoList _vst_plugin_info;
        ARDOUR::PluginInfoList _ladspa_plugin_info;
+       ARDOUR::PluginInfoList _lv2_plugin_info;
        ARDOUR::PluginInfoList _au_plugin_info;
+
+#ifdef HAVE_SLV2
+       LV2World* _lv2_world;
+#endif
        
        std::map<uint32_t, std::string> rdf_type;
 
@@ -69,6 +104,9 @@ class PluginManager {
 
        int au_discover ();
        void au_refresh ();
+       
+       int lv2_discover ();
+       void lv2_refresh ();
 
        int vst_discover_from_path (std::string path);
        int vst_discover (std::string path);