Update RouteUI, use ARDOUR::SoloMuteRelease
This commit is contained in:
parent
78c5537639
commit
3b96c28310
|
@ -57,6 +57,7 @@
|
|||
#include "ardour/route.h"
|
||||
#include "ardour/session.h"
|
||||
#include "ardour/session_playlists.h"
|
||||
#include "ardour/solo_mute_release.h"
|
||||
#include "ardour/template_utils.h"
|
||||
|
||||
#include "gtkmm2ext/gtk_ui.h"
|
||||
|
@ -497,7 +498,7 @@ RouteUI::mute_press (GdkEventButton* ev)
|
|||
}
|
||||
|
||||
if (_mute_release) {
|
||||
_mute_release->routes = copy;
|
||||
_mute_release->set (copy);
|
||||
}
|
||||
|
||||
_session->set_controls (route_list_to_control_list (copy, &Stripable::mute_control), _route->muted_by_self() ? 0.0 : 1.0, Controllable::UseGroup);
|
||||
|
@ -525,7 +526,7 @@ RouteUI::mute_press (GdkEventButton* ev)
|
|||
rl->push_back (_route);
|
||||
|
||||
if (_mute_release) {
|
||||
_mute_release->routes = rl;
|
||||
_mute_release->set (rl);
|
||||
}
|
||||
|
||||
boost::shared_ptr<MuteControl> mc = _route->mute_control();
|
||||
|
@ -541,7 +542,7 @@ RouteUI::mute_press (GdkEventButton* ev)
|
|||
rl->push_back (_route);
|
||||
|
||||
if (_mute_release) {
|
||||
_mute_release->routes = rl;
|
||||
_mute_release->set (rl);
|
||||
}
|
||||
|
||||
boost::shared_ptr<MuteControl> mc = _route->mute_control();
|
||||
|
@ -557,8 +558,8 @@ RouteUI::mute_press (GdkEventButton* ev)
|
|||
bool
|
||||
RouteUI::mute_release (GdkEventButton* /*ev*/)
|
||||
{
|
||||
if (_mute_release){
|
||||
_session->set_controls (route_list_to_control_list (_mute_release->routes, &Stripable::mute_control), _mute_release->active, Controllable::UseGroup);
|
||||
if (_mute_release) {
|
||||
_mute_release->release (_session, true);
|
||||
delete _mute_release;
|
||||
_mute_release = 0;
|
||||
}
|
||||
|
@ -653,50 +654,22 @@ RouteUI::solo_press(GdkEventButton* ev)
|
|||
/* Primary-Tertiary-click applies change to all routes */
|
||||
|
||||
if (_solo_release) {
|
||||
_solo_release->routes = _session->get_routes ();
|
||||
_solo_release->set (_session->get_routes ());
|
||||
}
|
||||
|
||||
_session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::solo_control), !_route->solo_control()->get_value(), Controllable::UseGroup);
|
||||
|
||||
} else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
|
||||
} else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) || (!_route->self_soloed() && Config->get_exclusive_solo ())) {
|
||||
|
||||
/* Primary-Secondary-click: exclusively solo this track */
|
||||
|
||||
if (_solo_release) {
|
||||
_solo_release->exclusive = true;
|
||||
|
||||
_solo_release->routes_on.reset (new RouteList);
|
||||
_solo_release->routes_off.reset (new RouteList);
|
||||
|
||||
boost::shared_ptr<RouteList> routes = _session->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 ()) {
|
||||
_solo_release->routes_on->push_back (*i);
|
||||
} else {
|
||||
_solo_release->routes_off->push_back (*i);
|
||||
}
|
||||
}
|
||||
_session->prepare_momentary_solo (_solo_release, true, _route);
|
||||
} else {
|
||||
/* clear solo state */
|
||||
_session->prepare_momentary_solo (0, true, _route);
|
||||
}
|
||||
|
||||
boost::shared_ptr<RouteList> rl (new RouteList);
|
||||
boost::shared_ptr<RouteList> routes = _session->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 ()) {
|
||||
rl->push_back (*i);
|
||||
}
|
||||
}
|
||||
_session->set_controls (route_list_to_control_list (rl, &Stripable::solo_control), false, Controllable::UseGroup);
|
||||
|
||||
if (Config->get_solo_control_is_listen_control()) {
|
||||
/* ??? we need a just_one_listen() method */
|
||||
} else {
|
||||
|
@ -742,9 +715,11 @@ RouteUI::solo_press(GdkEventButton* ev)
|
|||
rl.reset (new RouteList);
|
||||
rl->push_back (_route);
|
||||
|
||||
#if 0 // XX why? _solo_release is deleted below
|
||||
if (_solo_release) {
|
||||
_solo_release->routes = rl;
|
||||
_solo_release->set (rl);
|
||||
}
|
||||
#endif
|
||||
|
||||
_session->set_controls (route_list_to_control_list (rl, &Stripable::solo_control), !_route->self_soloed(), Controllable::InverseGroup);
|
||||
}
|
||||
|
@ -760,7 +735,7 @@ RouteUI::solo_press(GdkEventButton* ev)
|
|||
rl->push_back (route());
|
||||
|
||||
if (_solo_release) {
|
||||
_solo_release->routes = rl;
|
||||
_solo_release->set (rl);
|
||||
}
|
||||
|
||||
_session->set_controls (route_list_to_control_list (rl, &Stripable::solo_control), !_route->self_soloed(), Controllable::UseGroup);
|
||||
|
@ -775,13 +750,7 @@ bool
|
|||
RouteUI::solo_release (GdkEventButton* /*ev*/)
|
||||
{
|
||||
if (_solo_release) {
|
||||
if (_solo_release->exclusive) {
|
||||
_session->set_controls (route_list_to_control_list (_solo_release->routes_off, &Stripable::solo_control), 0.0, Controllable::NoGroup);
|
||||
_session->set_controls (route_list_to_control_list (_solo_release->routes_on, &Stripable::solo_control), 1.0, Controllable::NoGroup);
|
||||
} else {
|
||||
_session->set_controls (route_list_to_control_list (_solo_release->routes, &Stripable::solo_control), _solo_release->active ? 1.0 : 0.0, Controllable::UseGroup);
|
||||
}
|
||||
|
||||
_solo_release->release (_session, false);
|
||||
delete _solo_release;
|
||||
_solo_release = 0;
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
namespace ARDOUR {
|
||||
class AudioTrack;
|
||||
class MidiTrack;
|
||||
class SoloMuteRelease;
|
||||
}
|
||||
|
||||
namespace Gtk {
|
||||
|
@ -325,22 +326,8 @@ private:
|
|||
std::string route_state_id () const;
|
||||
|
||||
protected:
|
||||
struct SoloMuteRelease {
|
||||
SoloMuteRelease (bool was_active)
|
||||
: active (was_active)
|
||||
, exclusive (false)
|
||||
{}
|
||||
|
||||
boost::shared_ptr<ARDOUR::RouteList> routes;
|
||||
boost::shared_ptr<ARDOUR::RouteList> routes_on;
|
||||
boost::shared_ptr<ARDOUR::RouteList> routes_off;
|
||||
boost::shared_ptr<ARDOUR::Route> route;
|
||||
bool active;
|
||||
bool exclusive;
|
||||
};
|
||||
|
||||
SoloMuteRelease* _solo_release;
|
||||
SoloMuteRelease* _mute_release;
|
||||
ARDOUR::SoloMuteRelease* _solo_release;
|
||||
ARDOUR::SoloMuteRelease* _mute_release;
|
||||
|
||||
ControlSlaveUI* csu;
|
||||
|
||||
|
|
Loading…
Reference in New Issue