diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-03-09 13:11:53 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:40 -0400 |
commit | 1c0c9b40b73180537da7630b6a219baf85886da6 (patch) | |
tree | d9aa061e6fbfaa560c4c3640f4727568427f2502 /libs/ardour/ardour/session.h | |
parent | 8eb45c518dd61594ca059c3751ca9de0f71ecb15 (diff) |
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
Diffstat (limited to 'libs/ardour/ardour/session.h')
-rw-r--r-- | libs/ardour/ardour/session.h | 15 |
1 files changed, 9 insertions, 6 deletions
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<Session> { 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<Route>); + void _route_mute_changed (); + void _route_solo_changed (bool self_solo_change, PBD::Controllable::GroupControlDisposition group_override, boost::shared_ptr<Route>); + void _route_solo_isolated_changed (boost::shared_ptr<Route>); - void route_listen_changed (PBD::Controllable::GroupControlDisposition, boost::weak_ptr<Route>); - void route_mute_changed (); - void route_solo_changed (bool self_solo_change, PBD::Controllable::GroupControlDisposition group_override, boost::weak_ptr<Route>); - void route_solo_isolated_changed (boost::weak_ptr<Route>); void update_route_solo_state (boost::shared_ptr<RouteList> r = boost::shared_ptr<RouteList>()); void listen_position_changed (); |