Forward "owner" from Processor to Plugin
authorRobin Gareus <robin@gareus.org>
Mon, 10 Oct 2016 14:58:38 +0000 (16:58 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 10 Oct 2016 15:34:18 +0000 (17:34 +0200)
libs/ardour/ardour/plugin.h
libs/ardour/ardour/plugin_insert.h
libs/ardour/ardour/processor.h
libs/ardour/plugin_insert.cc

index 09cd066527ea00801f1ae8baed44f2d71b2ed067..612091191e54c95558f9a13e56e77cca6084997c 100644 (file)
@@ -51,6 +51,7 @@ class PluginInsert;
 class Plugin;
 class PluginInfo;
 class AutomationControl;
+class SessionObject;
 
 typedef boost::shared_ptr<Plugin> PluginPtr;
 typedef boost::shared_ptr<PluginInfo> PluginInfoPtr;
@@ -262,6 +263,9 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
        PluginInfoPtr get_info() const { return _info; }
        virtual void set_info (const PluginInfoPtr inf);
 
+       virtual void set_owner (SessionObject* o) { _owner = o; }
+       SessionObject* owner() const { return _owner; }
+
        ARDOUR::AudioEngine& engine() const { return _engine; }
        ARDOUR::Session& session() const { return _session; }
 
@@ -335,6 +339,8 @@ protected:
        uint32_t                 _cycles;
        std::map<std::string, PresetRecord> _presets;
 
+       SessionObject*           _owner;
+
 private:
 
        /** Fill _presets with our presets */
index a9a2ce62735fd7ce710649de6fbfa57aafd4906b..474df73e41d6550bf253f85c51b22e136ed5b07b 100644 (file)
@@ -59,6 +59,7 @@ class LIBARDOUR_API PluginInsert : public Processor
        XMLNode& get_state(void);
        int set_state(const XMLNode&, int version);
        void update_id (PBD::ID);
+       void set_owner (SessionObject*);
        void set_state_dir (const std::string& d = "");
 
        void run (BufferSet& in, framepos_t start_frame, framepos_t end_frame, double speed, pframes_t nframes, bool);
index 1a4863ff2d85eef2a53d208078968c37437f7204..32e8b7c7e521dec67cf6a345159594172cd77cbc 100644 (file)
@@ -127,7 +127,7 @@ class LIBARDOUR_API Processor : public SessionObject, public Automatable, public
        PluginPinWindowProxy * pinmgr_proxy () const { return _pinmgr_proxy; }
        void set_pingmgr_proxy (PluginPinWindowProxy* wp) { _pinmgr_proxy = wp ; }
 
-       void set_owner (SessionObject*);
+       virtual void set_owner (SessionObject*);
        SessionObject* owner() const;
 
 protected:
index c3dae8b71f184edd1c4ee838c0eac3d5a6b34e86..2283f99e4bf0a4cf045e8590808277ae1efdfd02 100644 (file)
@@ -2617,6 +2617,15 @@ PluginInsert::update_id (PBD::ID id)
        }
 }
 
+void
+PluginInsert::set_owner (SessionObject* o)
+{
+       Processor::set_owner (o);
+       for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+               (*i)->set_owner (o);
+       }
+}
+
 void
 PluginInsert::set_state_dir (const std::string& d)
 {
@@ -2907,6 +2916,7 @@ void
 PluginInsert::add_plugin (boost::shared_ptr<Plugin> plugin)
 {
        plugin->set_insert_id (this->id());
+       plugin->set_owner (_owner);
 
        if (_plugins.empty()) {
                /* first (and probably only) plugin instance - connect to relevant signals */