selecting a track/bus in the editor list now selects it in the canvas, and also ensur...
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 24 Mar 2014 21:31:26 +0000 (17:31 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 24 Mar 2014 21:32:04 +0000 (17:32 -0400)
Visibility is done with Editor::ensure_time_axis_view_is_visible(), and ctrl-click in the editor list
was also modified to use the same method.

gtk2_ardour/editor_routes.cc
gtk2_ardour/editor_routes.h

index b05e4617282849ca75337aa6952307f16c1920da..c9514e81c390e5d36bc01ab40da64c435faaa7e3 100644 (file)
@@ -222,6 +222,7 @@ EditorRoutes::EditorRoutes (Editor* e)
        _display.set_headers_visible (true);
        _display.get_selection()->set_mode (SELECTION_SINGLE);
        _display.get_selection()->set_select_function (sigc::mem_fun (*this, &EditorRoutes::selection_filter));
+       _display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &EditorRoutes::selection_changed));
        _display.set_reorderable (true);
        _display.set_name (X_("EditGroupList"));
        _display.set_rules_hint (true);
@@ -1288,27 +1289,46 @@ EditorRoutes::button_press (GdkEventButton* ev)
        //Scroll editor canvas to selected track
        if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
 
-               // Get the model row.
                Gtk::TreeModel::Row row = *_model->get_iter (path);
-
                TimeAxisView *tv = row[_columns.tv];
 
-               int y_pos = tv->y_position();
-
-               //Clamp the y pos so that we do not extend beyond the canvas full height.
-               if (_editor->_full_canvas_height - y_pos < _editor->_visible_canvas_height){
-                   y_pos = _editor->_full_canvas_height - _editor->_visible_canvas_height;
-               }
-
-               //Only scroll to if the track is visible
-               if(y_pos != -1){
-                   _editor->reset_y_origin (y_pos);
+               if (tv) {
+                       _editor->ensure_time_axis_view_is_visible (*tv);
                }
        }
 
        return false;
 }
 
+void
+EditorRoutes::selection_changed ()
+{
+       if (_display.get_selection()->count_selected_rows() > 0) {
+
+               TreeIter iter;
+               TreeView::Selection::ListHandle_Path rows = _display.get_selection()->get_selected_rows ();
+               TrackViewList selected;
+
+               _editor->get_selection().clear_regions ();
+
+               for (TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); i != rows.end(); ++i) {
+
+                       if ((iter = _model->get_iter (*i))) {
+
+                               TimeAxisView* tv = (*iter)[_columns.tv];
+                               selected.push_back (tv);
+                       }
+                       
+               }
+
+               _editor->get_selection().set (selected);
+               _editor->ensure_time_axis_view_is_visible (*(selected.front()));
+
+       } else {
+               _editor->get_selection().clear_tracks ();
+       }
+}
+
 bool
 EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path const&, bool /*selected*/)
 {
index e07a7787aad886248f13082889b5087f3c3b8b5d..9780307435adf3d3b38110a8961607cc06ea70e2 100644 (file)
@@ -98,6 +98,7 @@ private:
        void show_all_miditracks ();
        void hide_all_miditracks ();
        void show_tracks_with_regions_at_playhead ();
+        void selection_changed ();
 
        void display_drag_data_received (
                Glib::RefPtr<Gdk::DragContext> const &, gint, gint, Gtk::SelectionData const &, guint, guint