summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-01-27 19:00:21 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-01-27 19:00:27 -0500
commite63c805fe2000b31207598c3c43b6bb6b383b0a5 (patch)
tree665419721cb58f5f5cb47083b659ed0ac7f368e3
parentd121e6bf15cbf6f07ec10f84968690046614435a (diff)
mackie: clean up (some) interactions between subview mode and selection
Also, stop Plugin button from doing anything, since it has nothing to do yet
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc81
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.h3
-rw-r--r--libs/surfaces/mackie/mcp_buttons.cc43
-rw-r--r--libs/surfaces/mackie/strip.cc45
4 files changed, 128 insertions, 44 deletions
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<Route> 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<Route> r)
{
SubViewMode old_mode = _subview_mode;
@@ -1637,6 +1673,35 @@ MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route
_subview_route = r;
}
+ if (!subview_mode_would_be_ok (sm, r)) {
+
+ Glib::Threads::Mutex::Lock lm (surfaces_lock);
+
+ if (!surfaces.empty()) {
+
+ string msg;
+
+ switch (sm) {
+ case Sends:
+ msg = _("no sends for selected track/bus");
+ break;
+ case EQ:
+ msg = _("no EQ in the track/bus");
+ break;
+ case Dynamics:
+ msg = _("no dynamics in selected track/bus");
+ break;
+ default:
+ break;
+ }
+ if (!msg.empty()) {
+ surfaces.front()->display_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<Route
}
}
}
+
+ return 0;
}
void
@@ -1753,6 +1820,10 @@ MackieControlProtocol::set_pot_mode (PotMode m)
return;
}
+ /* switch to a pot mode cancels any subview mode */
+
+ set_subview_mode (None, boost::shared_ptr<Route>());
+
_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<Route>());
+ }
}
}
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<ARDOUR::Route>);
boost::shared_ptr<ARDOUR::Route> 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<ARDOUR::Route> first_selected_route () const;
void set_view_mode (ViewMode);
- void set_subview_mode (SubViewMode, boost::shared_ptr<ARDOUR::Route>);
+ int set_subview_mode (SubViewMode, boost::shared_ptr<ARDOUR::Route>);
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<Route> 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<Route> 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<Route> 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<Route> 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<Route> 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<AutomationControl> control = _vpot->control ();
- if (!control) {
- return;
- }
+ if (_surface->mcp().subview_mode() != MackieControlProtocol::Sends) {
+
+ boost::shared_ptr<AutomationControl> 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<AutomationControl> 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;