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:
@@ -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 */
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user