From: Paul Davis Date: Thu, 28 Jan 2016 00:00:21 +0000 (-0500) Subject: mackie: clean up (some) interactions between subview mode and selection X-Git-Tag: 4.7~253 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=e63c805fe2000b31207598c3c43b6bb6b383b0a5;p=ardour.git mackie: clean up (some) interactions between subview mode and selection Also, stop Plugin button from doing anything, since it has nothing to do yet --- diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 8ac54e6446..a6ac44b2ba 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -1624,7 +1624,43 @@ MackieControlProtocol::notify_subview_route_deleted () set_view_mode (Mixer); } -void +bool +MackieControlProtocol::subview_mode_would_be_ok (SubViewMode mode, boost::shared_ptr r) +{ + + if (!r) { + /* no selected track? no subview mode */ + return false; + } + + switch (mode) { + case None: + return true; + break; + + case Sends: + if (r->send_level_controllable (0)) { + return true; + } + break; + + case EQ: + if (r->eq_band_cnt() > 0) { + return true; + } + break; + + case Dynamics: + if (r->comp_enable_controllable()) { + return true; + } + break; + } + + return false; +} + +int MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr r) { SubViewMode old_mode = _subview_mode; @@ -1637,6 +1673,35 @@ MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptrdisplay_message_for (msg, 1000); + } + } + + return -1; + } + if ((_subview_mode != old_mode) || (_subview_route != old_route)) { if (r != old_route) { @@ -1699,6 +1764,8 @@ MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr()); + _pot_mode = m; { @@ -1859,8 +1930,12 @@ MackieControlProtocol::_gui_track_selection_changed (ARDOUR::RouteNotificationLi } if (gui_selection_did_change) { - /* actual GUI selection changed */ - set_subview_mode (_subview_mode, first_selected_route()); + + /* actual GUI selection changed, which may affect subview state */ + + if (set_subview_mode (_subview_mode, first_selected_route())) { + set_subview_mode (None, boost::shared_ptr()); + } } } diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index d418871d6a..680d3c2819 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -152,6 +152,7 @@ class MackieControlProtocol FlipMode flip_mode () const { return _flip_mode; } ViewMode view_mode () const { return _view_mode; } SubViewMode subview_mode () const { return _subview_mode; } + static bool subview_mode_would_be_ok (SubViewMode, boost::shared_ptr); boost::shared_ptr subview_route() const; PotMode pot_mode () const { return _pot_mode; } bool zoom_mode () const { return modifier_state() & MODIFIER_ZOOM; } @@ -165,7 +166,7 @@ class MackieControlProtocol boost::shared_ptr first_selected_route () const; void set_view_mode (ViewMode); - void set_subview_mode (SubViewMode, boost::shared_ptr); + int set_subview_mode (SubViewMode, boost::shared_ptr); void set_flip_mode (FlipMode); void set_pot_mode (PotMode); void pot_mode_globals (); diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc index c239004e59..60de07480e 100644 --- a/libs/surfaces/mackie/mcp_buttons.cc +++ b/libs/surfaces/mackie/mcp_buttons.cc @@ -689,20 +689,16 @@ MackieControlProtocol::plugin_press (Button &) LedState MackieControlProtocol::plugin_release (Button &) { - set_view_mode (Plugins); + // Do not do this yet, since it does nothing + // set_view_mode (Plugins); return none; /* LED state set by set_view_mode */ } LedState MackieControlProtocol::eq_press (Button &) { - if (Profile->get_mixbus()) { - boost::shared_ptr r = first_selected_route (); - if (r && r->eq_band_cnt() > 0) { - set_subview_mode (EQ, r); - return none; /* led state handled by set_subview_mode() */ - } - } - return none; + boost::shared_ptr r = first_selected_route (); + set_subview_mode (EQ, r); + return none; /* led state handled by set_subview_mode() */ } LedState @@ -713,16 +709,9 @@ MackieControlProtocol::eq_release (Button &) LedState MackieControlProtocol::dyn_press (Button &) { - if (Profile->get_mixbus()) { - boost::shared_ptr r = first_selected_route (); - - if (r) { - set_subview_mode (Dynamics, r); - return none; /* led state handled by set_subview_mode() */ - } - } - - return none; + boost::shared_ptr r = first_selected_route (); + set_subview_mode (Dynamics, r); + return none; /* led state handled by set_subview_mode() */ } LedState @@ -879,20 +868,8 @@ Mackie::LedState MackieControlProtocol::send_press (Mackie::Button&) { boost::shared_ptr r = first_selected_route (); - if (r) { -#ifndef MIXBUS - if (!r->nth_send (0)) { - /* no sends ... no send subview mode */ - if (!surfaces.empty()) { - surfaces.front()->display_message_for (_("No sends for this track/bus"), 1000); - } - return none; - } -#endif - set_subview_mode (Sends, r); - return none; /* led state handled by set_subview_mode() */ - } - return none; + set_subview_mode (Sends, r); + return none; /* led state handled by set_subview_mode() */ } Mackie::LedState MackieControlProtocol::send_release (Mackie::Button&) diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 24cae949ca..6cc733b76f 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -771,23 +771,52 @@ Strip::vselect_event (Button&, ButtonState bs) { if (_surface->mcp().subview_mode() != MackieControlProtocol::None) { - /* subview mode: vpot press acts like a button for toggle parameters */ + /* most subview modes: vpot press acts like a button for toggle parameters */ if (bs != press) { return; } - boost::shared_ptr control = _vpot->control (); - if (!control) { - return; - } + if (_surface->mcp().subview_mode() != MackieControlProtocol::Sends) { + + boost::shared_ptr control = _vpot->control (); + if (!control) { + return; + } - if (control->toggled()) { if (control->toggled()) { - control->set_value (!control->get_value(), Controllable::NoGroup); + if (control->toggled()) { + control->set_value (!control->get_value(), Controllable::NoGroup); + } + } + } else { + + /* Send mode: press enables/disables the relevant send */ + + if (_route) { + + const uint32_t global_pos = _surface->mcp().global_index (*this); + boost::shared_ptr control = _route->send_enable_controllable (global_pos); + + if (control) { + bool currently_enabled = (bool) control->get_value(); + control->set_value (!currently_enabled, Controllable::UseGroup); + + if (currently_enabled) { + /* we just turned it off */ + display (1, "off"); + } else { + /* we just turned it on, show the level + */ + control = _route->send_level_controllable (global_pos); + do_parameter_display (BusSendLevel, control->get_value()); + } + } } } + /* done with this event in subview mode */ + return; } @@ -1477,6 +1506,8 @@ Strip::subview_mode_changed () switch (_surface->mcp().subview_mode()) { case MackieControlProtocol::None: set_vpot_parameter (vpot_parameter); + /* need to show strip name again */ + show_route_name (); notify_metering_state_changed (); eq_band = -1; break;