You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/02/11 22:27:37 UTC

svn commit: r909155 - /pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java

Author: gbrown
Date: Thu Feb 11 21:27:36 2010
New Revision: 909155

URL: http://svn.apache.org/viewvc?rev=909155&view=rev
Log:
Add keyboard navigation to ListView.

Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java?rev=909155&r1=909154&r2=909155&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java Thu Feb 11 21:27:36 2010
@@ -981,6 +981,37 @@
         return consumed;
     }
 
+    @Override
+    public boolean keyTyped(Component component, char character) {
+        boolean consumed = super.keyTyped(component, character);
+
+        ListView listView = (ListView)getComponent();
+        List<?> listData = listView.getListData();
+        ListView.ItemRenderer itemRenderer = listView.getItemRenderer();
+
+        character = Character.toUpperCase(character);
+
+        for (int i = listView.getLastSelectedIndex() + 1, n = listData.getLength(); i < n; i++) {
+            if (!listView.isItemDisabled(i)) {
+                String string = itemRenderer.toString(listData.get(i));
+
+                if (string != null
+                    && string.length() > 0) {
+                    char first = Character.toUpperCase(string.charAt(0));
+
+                    if (first == character) {
+                        listView.setSelectedIndex(i);
+                        listView.scrollAreaToVisible(getItemBounds(i));
+                        consumed = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        return consumed;
+    }
+
     // Component state events
     @Override
     public void enabledChanged(Component component) {