Move method exclusive/momentary-solo setup to libardour

This allows to re-use the method in various places, outside of
RouteUI (e.g. control surfaces, recorder page)
This commit is contained in:
Robin Gareus
2021-02-05 00:35:57 +01:00
parent f2d2ea4baa
commit 2556f47c2b
2 changed files with 33 additions and 0 deletions

View File

@@ -164,6 +164,7 @@ class SceneChanger;
class SessionDirectory;
class SessionMetadata;
class SessionPlaylists;
class SoloMuteRelease;
class Source;
class Speakers;
class TempoMap;
@@ -935,6 +936,7 @@ public:
static const SessionEvent::RTeventCallback rt_cleanup;
void clear_all_solo_state (boost::shared_ptr<RouteList>);
void prepare_momentary_solo (SoloMuteRelease* smr = NULL, bool exclusive = false, boost::shared_ptr<Route> route = boost::shared_ptr<Route> ());
/* Control-based methods */

View File

@@ -23,9 +23,11 @@
#include "pbd/error.h"
#include "pbd/compose.h"
#include "ardour/audioengine.h"
#include "ardour/monitor_control.h"
#include "ardour/route.h"
#include "ardour/session.h"
#include "ardour/solo_mute_release.h"
#include "ardour/track.h"
#include "ardour/vca_manager.h"
@@ -90,6 +92,35 @@ Session::rt_set_controls (boost::shared_ptr<ControlList> cl, double val, Control
}
}
void
Session::prepare_momentary_solo (SoloMuteRelease* smr, bool exclusive, boost::shared_ptr<Route> route)
{
boost::shared_ptr<RouteList> routes_on (new RouteList);
boost::shared_ptr<RouteList> routes_off (new RouteList);
boost::shared_ptr<RouteList> routes = get_routes();
for (RouteList::const_iterator i = routes->begin(); i != routes->end(); ++i) {
#ifdef MIXBUS
if ((0 == route->mixbus()) != (0 == (*i)->mixbus ())) {
continue;
}
#endif
if ((*i)->soloed ()) {
routes_on->push_back (*i);
} else if (smr) {
routes_off->push_back (*i);
}
}
if (exclusive) {
set_controls (route_list_to_control_list (routes_on, &Stripable::solo_control), false, Controllable::UseGroup);
}
if (smr) {
smr->set (routes_on, routes_off);
}
}
void
Session::clear_all_solo_state (boost::shared_ptr<RouteList> rl)
{