fix issue with solo-in-place
[ardour.git] / libs / ardour / ardour / panner_shell.h
index 76df20489f45483e506d418a45d9cb4e7943b657..f344afd54a5569e734b35d592132a0e13d4837c7 100644 (file)
@@ -50,7 +50,7 @@ class Pannable;
 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);
@@ -64,25 +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: */
+       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;