use select next/prev stuff on editor track+bus list
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 28 Sep 2010 18:37:21 +0000 (18:37 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 28 Sep 2010 18:37:21 +0000 (18:37 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7851 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_regions.h
gtk2_ardour/editor_routes.cc
gtk2_ardour/editor_routes.h
libs/gtkmm2ext/treeutils.cc

index ad0a871aecb10f52fdb7ea80beb01a9950befbad..de53edc4e3456db7172e2d3079354d3578e95b45 100644 (file)
@@ -189,11 +189,6 @@ private:
        bool ignore_region_list_selection_change;
        bool ignore_selected_region_change;
         bool expanded;
-
-        void select_one (Glib::RefPtr<Gtk::TreeSelection>, Glib::RefPtr<Gtk::TreeModel>, Gtk::TreeView&,
-                         Gtk::TreeIter, Gtk::TreePath, Gtk::TreeViewColumn*);
-        void select_next ();
-        void select_previous ();
 };
 
 #endif /* __gtk_ardour_editor_regions_h__ */
index 54586e6c6d57ce97e8e49818d3268cc0bdeb7871..23e05c787fc6d159def81262071bd16392f01c0b 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "gtkmm2ext/cell_renderer_pixbuf_multi.h"
 #include "gtkmm2ext/cell_renderer_pixbuf_toggle.h"
+#include "gtkmm2ext/treeutils.h"
 
 #include "i18n.h"
 
@@ -161,6 +162,7 @@ EditorRoutes::EditorRoutes (Editor* e)
        _display.set_headers_visible (true);
        _display.set_name ("TrackListDisplay");
        _display.get_selection()->set_mode (SELECTION_SINGLE);
+       _display.get_selection()->set_select_function (sigc::mem_fun (*this, &EditorRoutes::selection_filter));
        _display.set_reorderable (true);
        _display.set_rules_hint (true);
        _display.set_size_request (100, -1);
@@ -199,6 +201,7 @@ EditorRoutes::EditorRoutes (Editor* e)
        _model->signal_rows_reordered().connect (sigc::mem_fun (*this, &EditorRoutes::reordered));
        
        _display.signal_button_press_event().connect (sigc::mem_fun (*this, &EditorRoutes::button_press), false);
+       _display.signal_key_press_event().connect (sigc::mem_fun(*this, &EditorRoutes::key_press), false);
 
        Route::SyncOrderKeys.connect (*this, MISSING_INVALIDATOR, ui_bind (&EditorRoutes::sync_order_keys, this, _1), gui_context());
 }
@@ -808,6 +811,32 @@ EditorRoutes::hide_all_miditracks ()
        set_all_audio_midi_visibility (3, false);
 }
 
+bool
+EditorRoutes::key_press (GdkEventKey* ev)
+{
+        TreeViewColumn *col;
+
+        switch (ev->keyval) {
+        case GDK_Tab:
+        case GDK_ISO_Left_Tab:
+                col = _display.get_column (5); // select&focus on name column
+
+                if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
+                        treeview_select_previous (_display, _model, col);
+                } else {
+                        treeview_select_next (_display, _model, col);
+                }
+
+                return true;
+                break;
+
+        default:
+                break;
+        }
+
+       return false;
+}
+
 bool
 EditorRoutes::button_press (GdkEventButton* ev)
 {
@@ -848,8 +877,9 @@ EditorRoutes::button_press (GdkEventButton* ev)
 }
 
 bool
-EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path const &, bool)
+EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path const &path , bool already_selected)
 {
+        cerr << path.to_string() << " is " << (already_selected ? " already selected " : " not selected ") << endl;
        return true;
 }
 
index b6acae36851af6bc6d05e69c0e18e8cd56da2405..a1e72664cc7015bc60e0cd75e0c401ffd6c24115 100644 (file)
@@ -137,6 +137,8 @@ private:
        bool _redisplay_does_not_reset_order_keys;
        
        Gtk::Menu* _menu;
+
+        bool key_press (GdkEventKey* ev);
 };
 
 #endif /* __ardour_gtk_editor_route_h__ */
index c81e03faea1bf125adcac650a48a6efed113cc1c..0ed8a9d5f94b55f5e1dc6a85ecd2ca554364cb38 100644 (file)
@@ -17,6 +17,8 @@
 
 */
 
+#include <iostream>
+
 #include "gtkmm2ext/treeutils.h"
 
 using namespace Glib;
@@ -162,13 +164,15 @@ Gtkmm2ext::treeview_select_next (TreeView& view, RefPtr<TreeModel> model, TreeVi
         iter = model->get_iter (start);
 
         TreeRow row = (*iter);
-        bool down_allowed = true;
+        bool down_allowed = false;
 
         if (!row.children().empty()) {
                 TreePath tp = model->get_path (iter);
 
                 if (!view.row_expanded (tp)) {
                         down_allowed = false;
+                } else {
+                        down_allowed = true;
                 }
         }