BindFunction (BtnATouch, released, button_automation, ARDOUR::Touch);
BindFunction (BtnARead, released, button_automation, ARDOUR::Play);
BindFunction (BtnAWrite, released, button_automation, ARDOUR::Write);
+ BindFunction (BtnALatch, released, button_automation, ARDOUR::Latch);
_ctrls.button (FP8Controls::BtnEncoder).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_encoder, this));
_ctrls.button (FP8Controls::BtnParam).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_parameter, this));
FaderPort8::button_solo_clear ()
{
bool soloing = session->soloing() || session->listening();
+#ifdef MIXBUS
+ soloing |= session->mixbus_soloed();
+#endif
if (soloing) {
StripableList all;
session->get_stripables (all);
if ((*i)->is_master() || (*i)->is_auditioner() || (*i)->is_monitor()) {
continue;
}
- boost::shared_ptr<AutomationControl> ac = (*i)->solo_control();
- if (ac && ac->get_value () > 0) {
- _solo_state.push_back (boost::weak_ptr<AutomationControl>(ac));
+ boost::shared_ptr<SoloControl> sc = (*i)->solo_control();
+ if (sc && sc->self_soloed ()) {
+ _solo_state.push_back (boost::weak_ptr<AutomationControl>(sc));
}
}
- AccessAction ("Main", "cancel-solo");
+ cancel_all_solo (); // AccessAction ("Main", "cancel-solo");
} else {
/* restore solo */
boost::shared_ptr<ControlList> cl (new ControlList);
if (!ac) {
continue;
}
- if (ac->automation_state() == Touch && !ac->touching ()) {
- ac->start_touch (ac->session().transport_frame());
- }
+ ac->start_touch (ac->session().transport_frame());
cl->push_back (ac);
}
if (!cl->empty()) {
continue;
}
cl->push_back (ac);
- if (ac->automation_state() == Touch && !ac->touching ()) {
- ac->start_touch (ac->session().transport_frame());
- }
+ ac->start_touch (ac->session().transport_frame());
}
if (!cl->empty()) {
session->set_controls (cl, 1.0, PBD::Controllable::NoGroup);
ac = s->pan_azimuth_control ();
}
if (ac) {
- if (ac->automation_state() == Touch && !ac->touching ()) {
- ac->start_touch (ac->session().transport_frame());
- }
+ ac->start_touch (ac->session().transport_frame());
if (steps == 0) {
ac->set_value (ac->normal(), PBD::Controllable::UseGroup);
} else {
}
double v = ac->internal_to_interface (ac->get_value());
- if (ac->automation_state() == Touch && !ac->touching ()) {
- ac->start_touch (ac->session().transport_frame());
- }
+ ac->start_touch (ac->session().transport_frame());
if (steps == 0) {
ac->set_value (ac->normal(), PBD::Controllable::UseGroup);
ac = session->master_out()->gain_control ();
}
if (ac) {
- if (ac->automation_state() == Touch && !ac->touching ()) {
- ac->start_touch (ac->session().transport_frame());
- }
+ ac->start_touch (ac->session().transport_frame());
ac->set_value (ac->normal(), PBD::Controllable::NoGroup);
}
}
if (ac) {
double v = ac->internal_to_interface (ac->get_value());
v = std::max (0.0, std::min (1.0, v + steps * (neg ? -.01 : .01)));
- if (ac->automation_state() == Touch && !ac->touching ()) {
- ac->start_touch (ac->session().transport_frame());
- }
+ ac->start_touch (ac->session().transport_frame());
ac->set_value (ac->interface_to_internal(v), PBD::Controllable::NoGroup);
}
}