From 81f6ad0d0c1e0f5fd32d2b3ef7638b47a005f779 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Tue, 20 Oct 2015 18:54:56 -0700 Subject: [PATCH] Added "Selected" view mode to Mackie Control. --- .../mackie/mackie_control_protocol.cc | 28 +++++++++++++++++-- .../surfaces/mackie/mackie_control_protocol.h | 2 ++ libs/surfaces/mackie/mcp_buttons.cc | 2 ++ libs/surfaces/mackie/surface.cc | 6 ++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 581d68b89e..4014c2c4f7 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -299,7 +299,7 @@ MackieControlProtocol::get_sorted_routes() remote_ids.insert (route->remote_control_id()); } break; - case MidiTracks: + case MidiTracks: // for now aux and buss are same if (is_midi_track(*it)) { sorted.push_back (*it); remote_ids.insert (route->remote_control_id()); @@ -307,7 +307,17 @@ MackieControlProtocol::get_sorted_routes() break; case Plugins: break; - case Auxes: + case Auxes: // for now aux and buss are same + if (!is_track(*it)) { + sorted.push_back (*it); + remote_ids.insert (route->remote_control_id()); + } + break; + case Selected: // For example: a group + if (selected(*it)) { + sorted.push_back (*it); + remote_ids.insert (route->remote_control_id()); + } break; } @@ -2019,3 +2029,17 @@ MackieControlProtocol::is_midi_track (boost::shared_ptr r) const { return boost::dynamic_pointer_cast(r) != 0; } + +bool +MackieControlProtocol::selected (boost::shared_ptr r) const +{ + const RouteNotificationList* rl = &_last_selected_routes; + + for (ARDOUR::RouteNotificationList::const_iterator i = rl->begin(); i != rl->end(); ++i) { + boost::shared_ptr rt = (*i).lock(); + if (rt == r) { + return true; + } + } + return false; +} diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index abdd96bf90..05dada3d6c 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -107,6 +107,7 @@ class MackieControlProtocol MidiTracks, Busses, Auxes, + Selected, Plugins, }; @@ -149,6 +150,7 @@ class MackieControlProtocol bool is_track (boost::shared_ptr) const; bool is_audio_track (boost::shared_ptr) const; bool is_midi_track (boost::shared_ptr) const; + bool selected (boost::shared_ptr) const; void set_view_mode (ViewMode); void set_flip_mode (FlipMode); diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc index 379dc6ef74..4f8306d717 100644 --- a/libs/surfaces/mackie/mcp_buttons.cc +++ b/libs/surfaces/mackie/mcp_buttons.cc @@ -935,6 +935,8 @@ MackieControlProtocol::user_press (Mackie::Button&) Mackie::LedState MackieControlProtocol::user_release (Mackie::Button&) { + set_view_mode (Selected); + refresh_current_bank(); return none; } Mackie::LedState diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 08e78e1870..f886a5f594 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -1062,6 +1062,11 @@ Surface::update_view_mode_display () id = Button::Aux; text = _("Auxes"); break; + case MackieControlProtocol::Selected: + show_two_char_display ("SE"); + id = Button::User; + text = _("Selected Routes"); + break; default: break; } @@ -1073,6 +1078,7 @@ Surface::update_view_mode_display () view_mode_buttons.push_back (Button::AudioTracks); view_mode_buttons.push_back (Button::MidiTracks); view_mode_buttons.push_back (Button::Aux); + view_mode_buttons.push_back (Button::User); if (id >= 0) { -- 2.30.2