From 1c0c9b40b73180537da7630b6a219baf85886da6 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 9 Mar 2016 13:11:53 -0500 Subject: new API for route solo/mute state mgmt Route now calls back into Session when solo/mute/listen state changes. All other interested parties must use the Route::{solo,mute,...}_control()->Changed() to be notified of changes. The Session requires more information than the Changed signal can provide, in order to propagate solo/mute changes across the entire Session correctly. Note that this uses an experimental use of CRTP to isolate a public API within Session --- libs/ardour/ardour/session.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'libs/ardour/ardour/session.h') diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 2976fec8f3..b3852b631d 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -67,6 +67,7 @@ #include "ardour/rc_configuration.h" #include "ardour/session_configuration.h" #include "ardour/session_event.h" +#include "ardour/session_solo_notifications.h" #include "ardour/interpolation.h" #include "ardour/plugin.h" #include "ardour/route.h" @@ -165,7 +166,7 @@ private: }; /** Ardour Session */ -class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionList, public SessionEventManager +class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionList, public SessionEventManager, public SessionSoloNotifications { public: enum RecordState { @@ -1683,12 +1684,14 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void reassign_track_numbers (); uint32_t _track_number_decimals; - /* mixer stuff */ + /* solo/mute/notifications (see SessionSoloNotifications object) */ + + friend class SessionSoloNotifications; + void _route_listen_changed (PBD::Controllable::GroupControlDisposition, boost::shared_ptr); + void _route_mute_changed (); + void _route_solo_changed (bool self_solo_change, PBD::Controllable::GroupControlDisposition group_override, boost::shared_ptr); + void _route_solo_isolated_changed (boost::shared_ptr); - void route_listen_changed (PBD::Controllable::GroupControlDisposition, boost::weak_ptr); - void route_mute_changed (); - void route_solo_changed (bool self_solo_change, PBD::Controllable::GroupControlDisposition group_override, boost::weak_ptr); - void route_solo_isolated_changed (boost::weak_ptr); void update_route_solo_state (boost::shared_ptr r = boost::shared_ptr()); void listen_position_changed (); -- cgit v1.2.3