tweak Editor to use Stripable methods for control-surface-driven selection
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 16 May 2016 20:44:49 +0000 (16:44 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 31 May 2016 19:30:42 +0000 (15:30 -0400)
gtk2_ardour/editor.cc
gtk2_ardour/editor.h

index 3dbdd8a9925913cbfd3f09022ae688db71829bdc..416cb6debca03ebe9647f8ceb1900aa7357d733a 100644 (file)
@@ -802,6 +802,12 @@ Editor::Editor ()
        ControlProtocol::ToggleRouteSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Toggle), gui_context());
        ControlProtocol::ClearRouteSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_unselect, this), gui_context());
 
+       ControlProtocol::AddStripableToSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Add), gui_context());
+       ControlProtocol::RemoveStripableFromSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Toggle), gui_context());
+       ControlProtocol::SetStripableSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Set), gui_context());
+       ControlProtocol::ToggleStripableSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Toggle), gui_context());
+       ControlProtocol::ClearStripableSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_unselect, this), gui_context());
+
        BasicUI::AccessAction.connect (*this, invalidator (*this), boost::bind (&Editor::access_action, this, _1, _2), gui_context());
 
        /* problematic: has to return a value and thus cannot be x-thread */
@@ -1000,7 +1006,7 @@ Editor::control_unselect ()
 }
 
 void
-Editor::control_select (uint16_t rid, Selection::Operation op)
+Editor::control_select (PresentationInfo::global_order_t global_order, Selection::Operation op)
 {
        /* handles the (static) signal from the ControlProtocol class that
         * requests setting the selected track to a given RID
@@ -1010,7 +1016,12 @@ Editor::control_select (uint16_t rid, Selection::Operation op)
                return;
        }
 
-       boost::shared_ptr<Route> r = _session->get_remote_nth_route (rid);
+       PresentationInfo pi (global_order, PresentationInfo::Flag (0));
+       boost::shared_ptr<Stripable> s = _session->get_remote_nth_stripable (pi.group_order(), pi.flags());
+
+       /* selected object may not be a Route */
+
+       boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (s);
 
        if (!r) {
                return;
index 9f579a3d81cb976c7a8de135145a6ee7cf8408ee..4151b107277bc3747c1caf44147a5617d22e95dc 100644 (file)
@@ -1088,7 +1088,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void control_step_tracks_down ();
        void control_view (uint32_t);
        void control_scroll (float);
-       void control_select (uint16_t rid, Selection::Operation);
+       void control_select (ARDOUR::PresentationInfo::global_order_t which, Selection::Operation);
        void control_unselect ();
        void access_action (std::string,std::string);
        bool deferred_control_scroll (framepos_t);