diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index 26537b0e46..6ce6e4290c 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -124,6 +124,14 @@ public: AutomationControlList grouped_controls () const; + void add_visually_linked_control (std::shared_ptr ctrl) { + _visually_linked_ctrls.push_back (ctrl); + } + + WeakAutomationControlList visually_linked_controls () const { + return _visually_linked_ctrls; + } + protected: std::shared_ptr _group; std::shared_ptr _pushed_group; @@ -150,6 +158,8 @@ protected: void session_going_away (); + WeakAutomationControlList _visually_linked_ctrls; + private: /* I am unclear on why we have to make ControlGroup a friend in order to get access to the ::set_group() method when it is already diff --git a/libs/ardour/pannable.cc b/libs/ardour/pannable.cc index e35a33dd74..429e864fd1 100644 --- a/libs/ardour/pannable.cc +++ b/libs/ardour/pannable.cc @@ -74,6 +74,13 @@ Pannable::Pannable (Session& s, Temporal::TimeDomainProvider const & tdp) pan_width_control->Changed.connect_same_thread (*this, boost::bind (&Pannable::value_changed, this)); pan_frontback_control->Changed.connect_same_thread (*this, boost::bind (&Pannable::value_changed, this)); pan_lfe_control->Changed.connect_same_thread (*this, boost::bind (&Pannable::value_changed, this)); + + pan_azimuth_control->add_visually_linked_control (pan_width_control); + pan_azimuth_control->add_visually_linked_control (pan_elevation_control); + pan_width_control->add_visually_linked_control (pan_azimuth_control); + pan_width_control->add_visually_linked_control (pan_elevation_control); + pan_elevation_control->add_visually_linked_control (pan_azimuth_control); + pan_elevation_control->add_visually_linked_control (pan_width_control); } Pannable::~Pannable () diff --git a/libs/ardour/surround_pannable.cc b/libs/ardour/surround_pannable.cc index fe2545f007..0e9a33b519 100644 --- a/libs/ardour/surround_pannable.cc +++ b/libs/ardour/surround_pannable.cc @@ -94,6 +94,14 @@ SurroundPannable::SurroundPannable (Session& s, uint32_t chn, Temporal::TimeDoma pan_pos_z->Changed.connect_same_thread (*this, boost::bind (&SurroundPannable::value_changed, this)); pan_size->Changed.connect_same_thread (*this, boost::bind (&SurroundPannable::value_changed, this)); pan_snap->Changed.connect_same_thread (*this, boost::bind (&SurroundPannable::value_changed, this)); + + /* all controls are visible together */ + pan_pos_x->add_visually_linked_control (pan_pos_y); + pan_pos_x->add_visually_linked_control (pan_pos_z); + pan_pos_y->add_visually_linked_control (pan_pos_x); + pan_pos_y->add_visually_linked_control (pan_pos_z); + pan_pos_z->add_visually_linked_control (pan_pos_x); + pan_pos_z->add_visually_linked_control (pan_pos_y); } SurroundPannable::~SurroundPannable ()