Added "Selected" view mode to Mackie Control.
authorLen Ovens <len@ovenwerks.net>
Wed, 21 Oct 2015 01:54:56 +0000 (18:54 -0700)
committerLen Ovens <len@ovenwerks.net>
Wed, 21 Oct 2015 01:54:56 +0000 (18:54 -0700)
libs/surfaces/mackie/mackie_control_protocol.cc
libs/surfaces/mackie/mackie_control_protocol.h
libs/surfaces/mackie/mcp_buttons.cc
libs/surfaces/mackie/surface.cc

index 581d68b89e411b521070e5a9b3bc9fa19a6d9748..4014c2c4f786aa2a5540700871d3b702e6c54b1d 100644 (file)
@@ -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<Route> r) const
 {
        return boost::dynamic_pointer_cast<MidiTrack>(r) != 0;
 }
+
+bool
+MackieControlProtocol::selected (boost::shared_ptr<Route> r) const
+{
+       const RouteNotificationList* rl = &_last_selected_routes;
+
+       for (ARDOUR::RouteNotificationList::const_iterator i = rl->begin(); i != rl->end(); ++i) {
+               boost::shared_ptr<ARDOUR::Route> rt = (*i).lock();
+               if (rt == r) {
+                       return true;
+               }
+       }
+       return false;
+}
index abdd96bf9077fa9d0345189a735175a0cf9fec67..05dada3d6c2ec3b41f7c5f23b19394adb1d9f323 100644 (file)
@@ -107,6 +107,7 @@ class MackieControlProtocol
                MidiTracks,
                Busses,
                Auxes,
+               Selected,
                Plugins,
        };
 
@@ -149,6 +150,7 @@ class MackieControlProtocol
        bool is_track (boost::shared_ptr<ARDOUR::Route>) const;
        bool is_audio_track (boost::shared_ptr<ARDOUR::Route>) const;
        bool is_midi_track (boost::shared_ptr<ARDOUR::Route>) const;
+       bool selected (boost::shared_ptr<ARDOUR::Route>) const;
 
        void set_view_mode (ViewMode);
        void set_flip_mode (FlipMode);
index 379dc6ef74d76bd29aede68d6a57824dbe12a2e1..4f8306d717c328ab21090892f51cf39568d1d695 100644 (file)
@@ -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
index 08e78e187057f20fd97515056ef025cb8e179831..f886a5f59488e543879691734b1c7d6437052432 100644 (file)
@@ -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) {