change name of a Session method to makes its intended function clear
[ardour.git] / libs / ardour / ardour / panner_shell.h
index 765acad16a08b3047f4e560dd7b1b82e38c85f53..f344afd54a5569e734b35d592132a0e13d4837c7 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "pbd/cartesian.h"
 
+#include "ardour/libardour_visibility.h"
 #include "ardour/types.h"
 #include "ardour/session_object.h"
 
@@ -46,10 +47,10 @@ class Pannable;
 /** Class to manage panning by instantiating and controlling
  *  an appropriate Panner object for a given in/out configuration.
  */
-class PannerShell : public SessionObject
+class LIBARDOUR_API PannerShell : public SessionObject
 {
 public:
-       PannerShell (std::string name, Session&, boost::shared_ptr<Pannable>);
+       PannerShell (std::string name, Session&, boost::shared_ptr<Pannable>, bool is_send = false);
        virtual ~PannerShell ();
 
        std::string describe_parameter (Evoral::Parameter param);
@@ -63,28 +64,37 @@ public:
        XMLNode& get_state ();
        int      set_state (const XMLNode&, int version);
 
+       PBD::Signal0<void> PannableChanged; /* Pannable changed -- l*/
        PBD::Signal0<void> Changed; /* panner and/or outputs count and/or bypass state changed */
 
        boost::shared_ptr<Panner> panner() const { return _panner; }
-       boost::shared_ptr<Pannable> pannable() const { return _pannable; }
+       boost::shared_ptr<Pannable> pannable() const { return _panlinked ? _pannable_route : _pannable_internal; }
 
        bool bypassed () const;
        void set_bypassed (bool);
 
+       bool is_send () const { return (_is_send); }
+       bool is_linked_to_route () const { return (_is_send && _panlinked); }
+       /* this function takes the process lock: */
+       void set_linked_to_route (bool);
+
        std::string current_panner_uri() const { return _current_panner_uri; }
        std::string user_selected_panner_uri() const { return _user_selected_panner_uri; }
        std::string panner_gui_uri() const { return _panner_gui_uri; }
 
-       /* this function takes the process lock */
+       /* this function takes the process lock: */
        bool select_panner_by_uri (std::string const uri);
 
   private:
-       friend class Route;
        void distribute_no_automation (BufferSet& src, BufferSet& dest, pframes_t nframes, gain_t gain_coeff);
        bool set_user_selected_panner_uri (std::string const uri);
 
        boost::shared_ptr<Panner> _panner;
-       boost::shared_ptr<Pannable> _pannable;
+
+       boost::shared_ptr<Pannable> _pannable_internal;
+       boost::shared_ptr<Pannable> _pannable_route;
+       bool _is_send;
+       bool _panlinked;
        bool _bypassed;
 
        std::string _current_panner_uri;