diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index 8563a23c4e..ceff8f944c 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -511,6 +511,8 @@ class MackieControlProtocol Mackie::LedState view_release (Mackie::Button&); Mackie::LedState bank_release (Mackie::Button&, uint32_t bank_num); + Mackie::LedState master_press(Mackie::Button &); + Mackie::LedState master_release(Mackie::Button &); Mackie::LedState redo_press(Mackie::Button &); Mackie::LedState redo_release(Mackie::Button &); Mackie::LedState prev_marker_press(Mackie::Button &); diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc index 248783ee86..6409ce32c3 100644 --- a/libs/surfaces/mackie/mcp_buttons.cc +++ b/libs/surfaces/mackie/mcp_buttons.cc @@ -560,6 +560,19 @@ MackieControlProtocol::flip_window_release (Button &) return off; } +LedState +MackieControlProtocol::master_press (Button &) +{ + _master_surface->toggle_master_monitor (); + return on; +} + +LedState +MackieControlProtocol::master_release (Button &) +{ + return off; +} + ///////////////////////////////////// // Transport Buttons ///////////////////////////////////// diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 5de3bda690..6b5bf7beed 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -410,6 +410,33 @@ Surface::master_monitor_may_have_changed () } } +bool +Surface::master_stripable_is_master_monitor () +{ + if (_master_stripable == _mcp.get_session().monitor_out()) + { + return true; + } + return false; +} + +void +Surface::toggle_master_monitor () +{ + if(master_stripable_is_master_monitor()) + { + _master_stripable = _mcp.get_session().master_out(); + } else if (_mcp.get_session().monitor_out() != 0) + { + _master_stripable = _mcp.get_session().monitor_out(); + } else { return; } + + _master_fader->set_control (_master_stripable->gain_control()); + _master_stripable->gain_control()->Changed.connect (master_connection, MISSING_INVALIDATOR, boost::bind (&Surface::master_gain_changed, this), ui_context()); + _last_master_gain_written = FLT_MAX; + master_gain_changed (); +} + void Surface::setup_master () { diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index e3b7c5dc33..4580c77d20 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -198,6 +198,9 @@ public: bool get_qcon_flag() { return is_qcon; } + void toggle_master_monitor (); + bool master_stripable_is_master_monitor (); + private: MackieControlProtocol& _mcp; SurfacePort* _port;