diff options
-rw-r--r-- | libs/ardour/ardour/plugin.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_insert.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/processor.h | 2 | ||||
-rw-r--r-- | libs/ardour/plugin_insert.cc | 10 |
4 files changed, 18 insertions, 1 deletions
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index 09cd066527..612091191e 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -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 */ diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index a9a2ce6273..474df73e41 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -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); diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h index 1a4863ff2d..32e8b7c7e5 100644 --- a/libs/ardour/ardour/processor.h +++ b/libs/ardour/ardour/processor.h @@ -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: diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index c3dae8b71f..2283f99e4b 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -2618,6 +2618,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) { // state() only saves the state of the first plugin @@ -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 */ |