From 2ac7108ccbcf873128fef7977edfdcd90d243104 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 27 May 2016 16:11:47 -0400 Subject: use new record safe control in libardour --- libs/ardour/ardour/stripable.h | 4 +++ libs/ardour/ardour/track.h | 2 ++ libs/ardour/ardour/utils.h | 14 +------- libs/ardour/ardour/vca.h | 75 ++++++++++++++++++++---------------------- libs/ardour/session.cc | 4 +-- libs/ardour/track.cc | 27 ++++----------- libs/ardour/vca.cc | 3 -- libs/ardour/wscript | 1 + 8 files changed, 53 insertions(+), 77 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/stripable.h b/libs/ardour/ardour/stripable.h index 0ebd1f55ad..b21b98f2bb 100644 --- a/libs/ardour/ardour/stripable.h +++ b/libs/ardour/ardour/stripable.h @@ -44,6 +44,8 @@ class SoloIsolateControl; class SoloSafeControl; class MonitorControl; class MonitorProcessor; +class RecordEnableControl; +class RecordSafeControl; /* This is a virtual base class for any object that needs to be potentially * represented by a control-centric user interface using the general model of a @@ -104,7 +106,9 @@ class LIBARDOUR_API Stripable : public SessionObject { virtual boost::shared_ptr trim_control() const = 0; virtual boost::shared_ptr monitoring_control() const = 0; + virtual boost::shared_ptr rec_enable_control() const { return boost::shared_ptr(); } + virtual boost::shared_ptr rec_safe_control() const { return boost::shared_ptr(); } /* "well-known" controls for panning. Any or all of these may return * null. diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index d57e0a2b5a..243d40faf0 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -36,6 +36,8 @@ class Region; class Diskstream; class IO; class MonitorControl; +class RecordEnableControl; +class RecordSafeControl; /** A track is an route (bus) with a recordable diskstream and * related objects relevant to tracking, playback and editing. diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h index 1dc7c2baf4..4edf9fb446 100644 --- a/libs/ardour/ardour/utils.h +++ b/libs/ardour/ardour/utils.h @@ -176,7 +176,7 @@ LIBARDOUR_API bool matching_unsuffixed_filename_exists_in (const std::string& di LIBARDOUR_API uint32_t how_many_dsp_threads (); -template boost::shared_ptr route_list_to_control_list (boost::shared_ptr rl, boost::shared_ptr (Route::*get_control)() const) { +template boost::shared_ptr route_list_to_control_list (boost::shared_ptr rl, boost::shared_ptr (Stripable::*get_control)() const) { boost::shared_ptr cl (new ControlList); for (RouteList::const_iterator r = rl->begin(); r != rl->end(); ++r) { boost::shared_ptr ac = ((*r).get()->*get_control)(); @@ -187,18 +187,6 @@ template boost::shared_ptr route_list_to_control_list ( return cl; } -template boost::shared_ptr route_list_to_control_list (boost::shared_ptr rl, boost::shared_ptr (Track::*get_control)() const) { - boost::shared_ptr cl (new ControlList); - for (RouteList::const_iterator r = rl->begin(); r != rl->end(); ++r) { - boost::shared_ptr t = boost::dynamic_pointer_cast (*r); - boost::shared_ptr ac = (t.get()->*get_control)(); - if (ac) { - cl->push_back (ac); - } - } - return cl; -} - #if __APPLE__ LIBARDOUR_API std::string CFStringRefToStdString(CFStringRef stringRef); #endif // __APPLE__ diff --git a/libs/ardour/ardour/vca.h b/libs/ardour/ardour/vca.h index 1583e453fc..de0117ae8c 100644 --- a/libs/ardour/ardour/vca.h +++ b/libs/ardour/ardour/vca.h @@ -101,46 +101,45 @@ class LIBARDOUR_API VCA : public Stripable, static uint32_t get_next_vca_number (); static void set_next_vca_number (uint32_t); - virtual boost::shared_ptr gain_control() const { return _gain_control; } - virtual boost::shared_ptr solo_control() const { return _solo_control; } - virtual boost::shared_ptr mute_control() const { return _mute_control; } - virtual boost::shared_ptr rec_enable_control() const { return _recenable_control; } - virtual boost::shared_ptr monitoring_control() const { return _monitor_control; } + boost::shared_ptr gain_control() const { return _gain_control; } + boost::shared_ptr solo_control() const { return _solo_control; } + boost::shared_ptr mute_control() const { return _mute_control; } /* null Stripable API, because VCAs don't have any of this */ - virtual boost::shared_ptr solo_isolate_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr solo_safe_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr peak_meter() { return boost::shared_ptr(); } - virtual boost::shared_ptr peak_meter() const { return boost::shared_ptr(); } - virtual boost::shared_ptr phase_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr trim_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr pan_azimuth_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr pan_elevation_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr pan_width_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr pan_frontback_control() const { return boost::shared_ptr(); } - virtual boost::shared_ptr pan_lfe_control() const { return boost::shared_ptr(); } - virtual uint32_t eq_band_cnt () const { return 0; } - virtual std::string eq_band_name (uint32_t) const { return std::string(); } - virtual boost::shared_ptr eq_gain_controllable (uint32_t band) const { return boost::shared_ptr(); } - virtual boost::shared_ptr eq_freq_controllable (uint32_t band) const { return boost::shared_ptr(); } - virtual boost::shared_ptr eq_q_controllable (uint32_t band) const { return boost::shared_ptr(); } - virtual boost::shared_ptr eq_shape_controllable (uint32_t band) const { return boost::shared_ptr(); } - virtual boost::shared_ptr eq_enable_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr eq_hpf_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr comp_enable_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr comp_threshold_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr comp_speed_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr comp_mode_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr comp_makeup_controllable () const { return boost::shared_ptr(); } - virtual boost::shared_ptr comp_redux_controllable () const { return boost::shared_ptr(); } - virtual std::string comp_mode_name (uint32_t mode) const { return std::string(); } - virtual std::string comp_speed_name (uint32_t mode) const { return std::string(); } - virtual boost::shared_ptr send_level_controllable (uint32_t n) const { return boost::shared_ptr(); } - virtual boost::shared_ptr send_enable_controllable (uint32_t n) const { return boost::shared_ptr(); } - virtual std::string send_name (uint32_t n) const { return std::string(); } - virtual boost::shared_ptr master_send_enable_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr solo_isolate_control() const { return boost::shared_ptr(); } + boost::shared_ptr solo_safe_control() const { return boost::shared_ptr(); } + boost::shared_ptr peak_meter() { return boost::shared_ptr(); } + boost::shared_ptr peak_meter() const { return boost::shared_ptr(); } + boost::shared_ptr phase_control() const { return boost::shared_ptr(); } + boost::shared_ptr trim_control() const { return boost::shared_ptr(); } + boost::shared_ptr pan_azimuth_control() const { return boost::shared_ptr(); } + boost::shared_ptr pan_elevation_control() const { return boost::shared_ptr(); } + boost::shared_ptr pan_width_control() const { return boost::shared_ptr(); } + boost::shared_ptr pan_frontback_control() const { return boost::shared_ptr(); } + boost::shared_ptr pan_lfe_control() const { return boost::shared_ptr(); } + uint32_t eq_band_cnt () const { return 0; } + std::string eq_band_name (uint32_t) const { return std::string(); } + boost::shared_ptr eq_gain_controllable (uint32_t band) const { return boost::shared_ptr(); } + boost::shared_ptr eq_freq_controllable (uint32_t band) const { return boost::shared_ptr(); } + boost::shared_ptr eq_q_controllable (uint32_t band) const { return boost::shared_ptr(); } + boost::shared_ptr eq_shape_controllable (uint32_t band) const { return boost::shared_ptr(); } + boost::shared_ptr eq_enable_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr eq_hpf_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr comp_enable_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr comp_threshold_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr comp_speed_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr comp_mode_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr comp_makeup_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr comp_redux_controllable () const { return boost::shared_ptr(); } + std::string comp_mode_name (uint32_t mode) const { return std::string(); } + std::string comp_speed_name (uint32_t mode) const { return std::string(); } + boost::shared_ptr send_level_controllable (uint32_t n) const { return boost::shared_ptr(); } + boost::shared_ptr send_enable_controllable (uint32_t n) const { return boost::shared_ptr(); } + std::string send_name (uint32_t n) const { return std::string(); } + boost::shared_ptr master_send_enable_controllable () const { return boost::shared_ptr(); } boost::shared_ptr monitor_control() const { return boost::shared_ptr(); } + boost::shared_ptr monitoring_control() const { return boost::shared_ptr(); } private: uint32_t _number; @@ -148,9 +147,7 @@ class LIBARDOUR_API VCA : public Stripable, boost::shared_ptr _gain_control; boost::shared_ptr _solo_control; boost::shared_ptr _mute_control; - boost::shared_ptr _recenable_control; - // boost::shared_ptr _record_safe_control; - boost::shared_ptr _monitor_control; + static uint32_t next_number; static Glib::Threads::Mutex number_lock; diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 6caa41e9ed..1d285d6611 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -1942,7 +1942,7 @@ void Session::set_all_tracks_record_enabled (bool enable ) { boost::shared_ptr rl = routes.reader(); - set_controls (route_list_to_control_list (rl, &Track::rec_enable_control), enable, Controllable::NoGroup); + set_controls (route_list_to_control_list (rl, &Stripable::rec_enable_control), enable, Controllable::NoGroup); } void @@ -6182,7 +6182,7 @@ Session::solo_control_mode_changed () the session's saved solo state). So just explicitly turn them all off. */ - set_controls (route_list_to_control_list (get_routes(), &Route::solo_control), 0.0, Controllable::NoGroup); + set_controls (route_list_to_control_list (get_routes(), &Stripable::solo_control), 0.0, Controllable::NoGroup); } } diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 17a7c13295..75cb689441 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -28,6 +28,7 @@ #include "ardour/port.h" #include "ardour/processor.h" #include "ardour/record_enable_control.h" +#include "ardour/record_safe_control.h" #include "ardour/route_group_specialized.h" #include "ardour/session.h" #include "ardour/session_playlists.h" @@ -67,9 +68,7 @@ Track::init () _record_enable_control.reset (new RecordEnableControl (_session, X_("recenable"), *this)); add_control (_record_enable_control); - _record_safe_control.reset (new AutomationControl (_session, RecSafeAutomation, ParameterDescriptor (RecSafeAutomation), - boost::shared_ptr (new AutomationList (Evoral::Parameter (RecSafeAutomation))), - X_("recsafe"))); + _record_safe_control.reset (new RecordSafeControl (_session, X_("recsafe"), *this)); add_control (_record_safe_control); _monitoring_control.reset (new MonitorControl (_session, X_("monitoring"), *this)); @@ -241,27 +240,15 @@ Track::record_safe_changed (bool, Controllable::GroupControlDisposition) } bool -Track::record_safe () const +Track::can_be_record_safe () { - return _diskstream && _diskstream->record_safe (); + return !_record_enable_control->get_value() && _diskstream && _session.writable() && (_freeze_record.state != Frozen); } -void -Track::set_record_safe (bool yn, Controllable::GroupControlDisposition group_override) +bool +Track::can_be_record_enabled () { - if (!_session.writable()) { - return; - } - - if (_freeze_record.state == Frozen) { - return; - } - - if (record_enabled ()) { - return; - } - - _rec_safe_control->set_value (yn, group_override); + return !_record_safe_control->get_value() && _diskstream && !_diskstream->record_safe() && _session.writable() && (_freeze_record.state != Frozen); } void diff --git a/libs/ardour/vca.cc b/libs/ardour/vca.cc index 27ecec7910..2c87a80db4 100644 --- a/libs/ardour/vca.cc +++ b/libs/ardour/vca.cc @@ -23,7 +23,6 @@ #include "ardour/gain_control.h" #include "ardour/monitor_control.h" #include "ardour/rc_configuration.h" -#include "ardour/record_enable_control.h" #include "ardour/route.h" #include "ardour/session.h" #include "ardour/vca.h" @@ -82,8 +81,6 @@ VCA::init () { _solo_control.reset (new SoloControl (_session, X_("solo"), *this, *this)); _mute_control.reset (new MuteControl (_session, X_("mute"), *this)); - _recenable_control.reset (new RecordEnableControl (_session, X_("recenable"), *this)); - _monitor_control.reset (new MonitorControl (_session, X_("monitoring"), *this)); add_control (_gain_control); add_control (_solo_control); diff --git a/libs/ardour/wscript b/libs/ardour/wscript index 44e2f21c65..d85e6a4d4a 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -178,6 +178,7 @@ libardour_sources = [ 'rc_configuration.cc', 'recent_sessions.cc', 'record_enable_control.cc', + 'record_safe_control.cc', 'region_factory.cc', 'resampled_source.cc', 'region.cc', -- cgit v1.2.3