#include "pbd/cartesian.h"
+#include "ardour/libardour_visibility.h"
#include "ardour/types.h"
#include "ardour/session_object.h"
namespace ARDOUR {
class Session;
+class Route;
class Panner;
class BufferSet;
class AudioBuffer;
class Pannable;
/** Class to manage panning by instantiating and controlling
- * the appropriate specific PannerBase objects for a given
- * in/out configuration.
+ * 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);
- bool can_support_io_configuration (const ChanCount& /*in*/, ChanCount& /*out*/) const { return true; };
+ bool can_support_io_configuration (const ChanCount& /*in*/, ChanCount& /*out*/) { return true; };
void configure_io (ChanCount in, ChanCount out);
/// The fundamental Panner function
void run (BufferSet& src, BufferSet& dest, framepos_t start_frame, framepos_t end_frames, pframes_t nframes);
-
- XMLNode& get_state (void);
- XMLNode& state (bool full);
+ XMLNode& get_state ();
int set_state (const XMLNode&, int version);
- PBD::Signal0<void> Changed; /* panner and/or outputs count changed */
+ 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 _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);
- boost::shared_ptr<Panner> panner() const { return _panner; }
- boost::shared_ptr<Pannable> pannable() const { return _pannable; }
+ 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:
void distribute_no_automation (BufferSet& src, BufferSet& dest, pframes_t nframes, gain_t gain_coeff);
- boost::shared_ptr<Panner> _panner;
- boost::shared_ptr<Pannable> _pannable;
-
- static float current_automation_version_number;
+ bool set_user_selected_panner_uri (std::string const uri);
+
+ boost::shared_ptr<Panner> _panner;
+
+ boost::shared_ptr<Pannable> _pannable_internal;
+ boost::shared_ptr<Pannable> _pannable_route;
+ bool _is_send;
+ bool _panlinked;
+ bool _bypassed;
+
+ std::string _current_panner_uri;
+ std::string _user_selected_panner_uri;
+ std::string _panner_gui_uri;
+ bool _force_reselect;
};
} // namespace ARDOUR