#include "ardour/soloable.h"
#include "ardour/solo_control.h"
#include "ardour/solo_safe_control.h"
+#include "ardour/slavable.h"
class RoutePinWindowProxy;
class PhaseControl;
class MonitorControl;
-class LIBARDOUR_API Route : public Stripable,
+class LIBARDOUR_API Route : public GraphNode,
+ public Stripable,
public Soloable,
public Muteable,
public Monitorable,
public Automatable,
public RouteGroupMember,
- public GraphNode,
+ public Slavable,
public boost::enable_shared_from_this<Route>
{
public:
pframes_t nframes, int declick);
bool slaved_to (boost::shared_ptr<VCA>) const;
- void vca_assign (boost::shared_ptr<VCA>);
- void vca_unassign (boost::shared_ptr<VCA>);
protected:
friend class Session;
void curve_reallocate ();
virtual void set_block_size (pframes_t nframes);
-protected:
- virtual framecnt_t check_initial_delay (framecnt_t nframes, framepos_t&) { return nframes; }
+ protected:
+ int assign_controls (boost::shared_ptr<VCA>);
+ int unassign_controls (boost::shared_ptr<VCA>);
+
+ virtual framecnt_t check_initial_delay (framecnt_t nframes, framepos_t&) { return nframes; }
void fill_buffers_with_input (BufferSet& bufs, boost::shared_ptr<IO> io, pframes_t nframes);
#include "ardour/automatable.h"
#include "ardour/muteable.h"
#include "ardour/soloable.h"
+#include "ardour/slavable.h"
#include "ardour/stripable.h"
namespace ARDOUR {
class MuteControl;
class MonitorControl;
-class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, public Automatable, public boost::enable_shared_from_this<VCA> {
+class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, public Automatable, public Slavable, public boost::enable_shared_from_this<VCA> {
public:
VCA (Session& session, uint32_t num, const std::string& name);
~VCA();
virtual std::string send_name (uint32_t n) const { return std::string(); }
virtual boost::shared_ptr<AutomationControl> master_send_enable_controllable () const { return boost::shared_ptr<AutomationControl>(); }
+ protected:
+ int assign_controls (boost::shared_ptr<VCA>);
+ int unassign_controls (boost::shared_ptr<VCA>);
+
private:
uint32_t _number;
/** Base class for all routable/mixable objects (tracks and busses) */
Route::Route (Session& sess, string name, Flag flg, DataType default_type)
- : Stripable (sess, name)
+ : GraphNode (sess._process_graph)
+ , Stripable (sess, name)
, Muteable (sess, name)
, Automatable (sess)
- , GraphNode (sess._process_graph)
, _active (true)
, _signal_latency (0)
, _signal_latency_at_amp_position (0)
return _gain_control->slaved_to (vca->gain_control());
}
-void
-Route::vca_assign (boost::shared_ptr<VCA> vca)
+int
+Route::assign_controls (boost::shared_ptr<VCA> vca)
{
_gain_control->add_master (vca->gain_control());
_solo_control->add_master (vca->solo_control());
_mute_control->add_master (vca->mute_control());
+
+ return 0;
}
-void
-Route::vca_unassign (boost::shared_ptr<VCA> vca)
+int
+Route::unassign_controls (boost::shared_ptr<VCA> vca)
{
if (!vca) {
/* unassign from all */
_solo_control->remove_master (vca->solo_control());
_mute_control->remove_master (vca->mute_control());
}
+
+ return 0;
}
bool
{
_solo_control->clear_all_solo_state ();
}
+
+int
+VCA::assign_controls (boost::shared_ptr<VCA> vca)
+{
+ _gain_control->add_master (vca->gain_control());
+ _solo_control->add_master (vca->solo_control());
+ _mute_control->add_master (vca->mute_control());
+
+ return 0;
+}
+
+int
+VCA::unassign_controls (boost::shared_ptr<VCA> vca)
+{
+ if (!vca) {
+ /* unassign from all */
+ _gain_control->clear_masters ();
+ _solo_control->clear_masters ();
+ _mute_control->clear_masters ();
+ } else {
+ _gain_control->remove_master (vca->gain_control());
+ _solo_control->remove_master (vca->solo_control());
+ _mute_control->remove_master (vca->mute_control());
+ }
+
+ return 0;
+}
'session_transport.cc',
'sidechain.cc',
'slave.cc',
+ 'slavable.cc',
'slavable_automation_control.cc',
'smf_source.cc',
'sndfile_helpers.cc',