add Slavable API for VCA assign/unassign

This commit is contained in:
Paul Davis 2016-04-24 21:47:52 -04:00
parent 69f67b6198
commit 83e51ee69b
5 changed files with 53 additions and 13 deletions

View File

@ -57,6 +57,7 @@
#include "ardour/soloable.h"
#include "ardour/solo_control.h"
#include "ardour/solo_safe_control.h"
#include "ardour/slavable.h"
class RoutePinWindowProxy;
@ -83,13 +84,14 @@ class SoloIsolateControl;
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:
@ -599,8 +601,6 @@ 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;
@ -611,8 +611,11 @@ public:
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);

View File

@ -29,6 +29,7 @@
#include "ardour/automatable.h"
#include "ardour/muteable.h"
#include "ardour/soloable.h"
#include "ardour/slavable.h"
#include "ardour/stripable.h"
namespace ARDOUR {
@ -39,7 +40,7 @@ class SoloControl;
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();
@ -108,6 +109,10 @@ class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, pu
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;

View File

@ -86,10 +86,10 @@ PBD::Signal3<int,boost::shared_ptr<Route>, boost::shared_ptr<PluginInsert>, Rout
/** 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)
@ -5447,16 +5447,18 @@ Route::slaved_to (boost::shared_ptr<VCA> vca) const
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 */
@ -5468,6 +5470,8 @@ Route::vca_unassign (boost::shared_ptr<VCA> vca)
_solo_control->remove_master (vca->solo_control());
_mute_control->remove_master (vca->mute_control());
}
return 0;
}
bool

View File

@ -152,3 +152,30 @@ VCA::clear_all_solo_state ()
{
_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;
}

View File

@ -211,6 +211,7 @@ libardour_sources = [
'session_transport.cc',
'sidechain.cc',
'slave.cc',
'slavable.cc',
'slavable_automation_control.cc',
'smf_source.cc',
'sndfile_helpers.cc',