Add a "select topmost" track editor action
authorRobin Gareus <robin@gareus.org>
Sat, 29 Apr 2017 10:38:03 +0000 (12:38 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 29 Apr 2017 10:38:53 +0000 (12:38 +0200)
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/public_editor.h

index 0da00f1b240689253b73e7e489bc761a4af8b4c4..868817bddd9f759eded73ca8770c7d83a6b38156 100644 (file)
@@ -394,6 +394,8 @@ public:
        void scroll_left_half_page ();
        void scroll_right_half_page ();
 
+       void select_topmost_track ();
+
        void prepare_for_cleanup ();
        void finish_cleanup ();
 
index da082a847adf13acb6cf491cc75b93a301bedf5d..b6bdd4a8b5274e10bf6e9b50c4d7e3b1dea02782 100644 (file)
@@ -302,6 +302,7 @@ Editor::register_actions ()
        act = reg_sens (editor_actions, "scroll-tracks-down", _("Scroll Tracks Down"), sigc::mem_fun(*this, &Editor::scroll_tracks_down));
        act = reg_sens (editor_actions, "step-tracks-up", _("Step Tracks Up"), sigc::hide_return (sigc::bind (sigc::mem_fun(*this, &Editor::scroll_up_one_track), true)));
        act = reg_sens (editor_actions, "step-tracks-down", _("Step Tracks Down"), sigc::hide_return (sigc::bind (sigc::mem_fun(*this, &Editor::scroll_down_one_track), true)));
+       act = reg_sens (editor_actions, "select-topmost", _("Select Topmost Track"), (sigc::mem_fun(*this, &Editor::select_topmost_track)));
 
        reg_sens (editor_actions, "scroll-backward", _("Scroll Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::scroll_backward), 0.8f));
        reg_sens (editor_actions, "scroll-forward", _("Scroll Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::scroll_forward), 0.8f));
index 4eef1058af6a0f693e45f2d0a320231f09f97558..ecc9fa1f06c9c7382a9ee7e02ee3ee355cdaabcd 100644 (file)
@@ -1451,6 +1451,22 @@ Editor::scroll_tracks_up_line ()
        reset_y_origin (vertical_adjustment.get_value() - 60);
 }
 
+void
+Editor::select_topmost_track ()
+{
+       const double top_of_trackviews = vertical_adjustment.get_value();
+       for (TrackViewList::iterator t = track_views.begin(); t != track_views.end(); ++t) {
+               if ((*t)->hidden()) {
+                       continue;
+               }
+               std::pair<TimeAxisView*,double> res = (*t)->covers_y_position (top_of_trackviews);
+               if (res.first) {
+                       selection->set (*t);
+                       break;
+               }
+       }
+}
+
 bool
 Editor::scroll_down_one_track (bool skip_child_views)
 {
index 009a2063e3805a6a5f3ce1dfd5cefda49f390e94..ea7980fb7b9d4d01d684906c3da80b996e77c6e9 100644 (file)
@@ -316,6 +316,7 @@ public:
        virtual void scroll_tracks_up_line () = 0;
        virtual bool scroll_down_one_track (bool skip_child_views = false) = 0;
        virtual bool scroll_up_one_track (bool skip_child_views = false) = 0;
+       virtual void select_topmost_track () = 0;
        virtual void prepare_for_cleanup () = 0;
        virtual void finish_cleanup () = 0;
        virtual void reset_x_origin (framepos_t frame) = 0;