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/13 01:55:42 UTC

svn commit: r909674 - in /pivot/trunk: tests/src/org/apache/pivot/tests/text/ tools/src/org/apache/pivot/tools/xml/ wtk-terra/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/apache/pivot/wtk/ wtk/src/org/apache/pivot/wtk/content/ wtk/src/org/apache/pi...

Author: gbrown
Date: Sat Feb 13 00:55:40 2010
New Revision: 909674

URL: http://svn.apache.org/viewvc?rev=909674&view=rev
Log:
Add toString() methods to remaining renderers.

Modified:
    pivot/trunk/tests/src/org/apache/pivot/tests/text/NodeAdapterRenderer.java
    pivot/trunk/tools/src/org/apache/pivot/tools/xml/NodeRenderer.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSpinnerSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TableView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeader.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/ListViewItemRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/SpinnerItemRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCellRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewHeaderDataRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewImageCellRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewMultiCellRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTextAreaCellRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeViewNodeRenderer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ListButtonSkin.java

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/text/NodeAdapterRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/text/NodeAdapterRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/text/NodeAdapterRenderer.java (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/text/NodeAdapterRenderer.java Sat Feb 13 00:55:40 2010
@@ -66,4 +66,13 @@
            setText(nodeAdapter.getText());
         }
     }
+
+    public String toString(Object node) {
+        if (node == null) {
+            throw new IllegalArgumentException();
+        }
+
+        NodeAdapter nodeAdapter = (NodeAdapter)node;
+        return nodeAdapter.getText();
+    }
 }

Modified: pivot/trunk/tools/src/org/apache/pivot/tools/xml/NodeRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tools/src/org/apache/pivot/tools/xml/NodeRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/tools/src/org/apache/pivot/tools/xml/NodeRenderer.java (original)
+++ pivot/trunk/tools/src/org/apache/pivot/tools/xml/NodeRenderer.java Sat Feb 13 00:55:40 2010
@@ -85,4 +85,19 @@
             getStyles().put("color", color);
         }
     }
+
+    public String toString(Object node) {
+        String string;
+        if (node instanceof Element) {
+            Element element = (Element)node;
+            string = element.getName();
+        } else if (node instanceof TextNode) {
+            TextNode textNode = (TextNode)node;
+            string = textNode.getText();
+        } else {
+            throw new IllegalArgumentException();
+        }
+
+        return string;
+    }
 }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java Sat Feb 13 00:55:40 2010
@@ -310,6 +310,30 @@
 
             label.getStyles().put("color", color);
         }
+
+        public String toString(Object row, String columnName) {
+            String string;
+
+            File file = (File)row;
+            if (columnName.equals(NAME_KEY)) {
+                string = file.getName();
+            } else if (columnName.equals(SIZE_KEY)) {
+                long length = file.length();
+                string = FileSizeFormat.getInstance().format(length);
+            } else if (columnName.equals(LAST_MODIFIED_KEY)) {
+                long lastModified = file.lastModified();
+                Date lastModifiedDate = new Date(lastModified);
+                DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,
+                    DateFormat.SHORT);
+                string = dateFormat.format(lastModifiedDate);
+            } else {
+                System.err.println("Unexpected column name in " + getClass().getName()
+                    + ": " + columnName);
+                string = null;
+            }
+
+            return string;
+        }
     }
 
     /**

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSpinnerSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSpinnerSkin.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSpinnerSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSpinnerSkin.java Sat Feb 13 00:55:40 2010
@@ -42,7 +42,6 @@
 import org.apache.pivot.wtk.skin.ComponentSkin;
 import org.apache.pivot.wtk.skin.ContainerSkin;
 
-
 /**
  * Spinner skin.
  */
@@ -292,6 +291,34 @@
 
             return consumed;
         }
+
+        @Override
+        public boolean keyTyped(Component component, char character) {
+            boolean consumed = super.keyTyped(component, character);
+
+            Spinner spinner = (Spinner)TerraSpinnerSkin.this.getComponent();
+            List<?> spinnerData = spinner.getSpinnerData();
+            Spinner.ItemRenderer itemRenderer = spinner.getItemRenderer();
+
+            character = Character.toUpperCase(character);
+
+            for (int i = spinner.getSelectedIndex() + 1, n = spinnerData.getLength(); i < n; i++) {
+                String string = itemRenderer.toString(spinnerData.get(i));
+
+                if (string != null
+                    && string.length() > 0) {
+                    char first = Character.toUpperCase(string.charAt(0));
+
+                    if (first == character) {
+                        spinner.setSelectedIndex(i);
+                        consumed = true;
+                        break;
+                    }
+                }
+            }
+
+            return consumed;
+        }
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java Sat Feb 13 00:55:40 2010
@@ -45,7 +45,7 @@
          * height for skins that assume a fixed renderer height.
          *
          * @param button
-         * The button that contains the data.
+         * The host component.
          *
          * @param highlighted
          * If <tt>true</tt>, the item is highlighted.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java Sat Feb 13 00:55:40 2010
@@ -75,7 +75,7 @@
          * is <tt>null</tt>.
          *
          * @param listView
-         * The list view that contains the item.
+         * The host component.
          *
          * @param selected
          * If <tt>true</tt>, the item is selected.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java Sat Feb 13 00:55:40 2010
@@ -41,12 +41,27 @@
          * Prepares the renderer for layout or paint.
          *
          * @param item
-         * The item to render.
+         * The item to render, or <tt>null</tt> if called to calculate preferred
+         * height for skins that assume a fixed renderer height.
          *
          * @param spinner
          * The host component.
          */
         public void render(Object item, Spinner spinner);
+
+        /**
+         * Converts a spinner item to a string representation.
+         *
+         * @param item
+         *
+         * @return
+         * The item's string representation, or <tt>null</tt> if the item does not
+         * have a string representation.
+         * <p>
+         * Note that this method may be called often during keyboard navigation, so
+         * implementations should avoid unnecessary string allocations.
+         */
+        public String toString(Object item);
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TableView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TableView.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TableView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TableView.java Sat Feb 13 00:55:40 2010
@@ -485,7 +485,7 @@
          * The index of the column being rendered.
          *
          * @param tableView
-         * The table view that contains the cell.
+         * The host component.
          *
          * @param columnName
          * The name of the column being rendered.
@@ -502,6 +502,20 @@
         public void render(Object row, int rowIndex, int columnIndex,
             TableView tableView, String columnName,
             boolean selected, boolean highlighted, boolean disabled);
+
+        /**
+         * Converts table view cell data to a string representation.
+         *
+         * @param row
+         *
+         * @return
+         * The cell data's string representation, or <tt>null</tt> if the data does not
+         * have a string representation.
+         * <p>
+         * Note that this method may be called often during keyboard navigation, so
+         * implementations should avoid unnecessary string allocations.
+         */
+        public String toString(Object row, String columnName);
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeader.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeader.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeader.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeader.java Sat Feb 13 00:55:40 2010
@@ -37,8 +37,41 @@
      * Table view header data renderer interface.
      */
     public interface DataRenderer extends Renderer {
+        /**
+         * Prepares the renderer for layout or paint.
+         *
+         * @param data
+         * The data to render, or <tt>null</tt> if called to calculate preferred
+         * height for skins that assume a fixed renderer height.
+         *
+         * @param columnIndex
+         * The index of the column being rendered.
+         *
+         * @param tableViewHeader
+         * The host component.
+         *
+         * @param columnName
+         * The name of the column being rendered.
+         *
+         * @param highlighted
+         * If <tt>true</tt>, the item is highlighted.
+         */
         public void render(Object data, int columnIndex, TableViewHeader tableViewHeader,
             String columnName, boolean highlighted);
+
+        /**
+         * Converts table view header data to a string representation.
+         *
+         * @param data
+         *
+         * @return
+         * The data's string representation, or <tt>null</tt> if the data does not
+         * have a string representation.
+         * <p>
+         * Note that this method may be called often during keyboard navigation, so
+         * implementations should avoid unnecessary string allocations.
+         */
+        public String toString(Object item);
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java Sat Feb 13 00:55:40 2010
@@ -105,7 +105,7 @@
          * visible nodes list, or <tt>-1</tt> if <tt>node</tt> is <tt>null</tt>.
          *
          * @param treeView
-         * The tree view that contains the node.
+         * The host component.
          *
          * @param expanded
          * <tt>true</tt> if the node is expanded; <tt>false</tt> otherwise.
@@ -125,6 +125,20 @@
         public void render(Object node, Path path, int rowIndex, TreeView treeView,
             boolean expanded, boolean selected, NodeCheckState checkState,
             boolean highlighted, boolean disabled);
+
+        /**
+         * Converts a tree node to a string representation.
+         *
+         * @param node
+         *
+         * @return
+         * The node's string representation, or <tt>null</tt> if the node does not
+         * have a string representation.
+         * <p>
+         * Note that this method may be called often during keyboard navigation, so
+         * implementations should avoid unnecessary string allocations.
+         */
+        public String toString(Object node);
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/ListViewItemRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/ListViewItemRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/ListViewItemRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/ListViewItemRenderer.java Sat Feb 13 00:55:40 2010
@@ -86,22 +86,6 @@
         label.setText(text);
     }
 
-    public String toString(Object item) {
-        if (item == null) {
-            throw new IllegalArgumentException();
-        }
-
-        String string;
-        if (item instanceof ListItem) {
-            ListItem listItem = (ListItem)item;
-            string = listItem.getText();
-        } else {
-            string = item.toString();
-        }
-
-        return string;
-    }
-
     protected void renderStyles(ListView listView, boolean selected,
         boolean highlighted, boolean disabled) {
         imageView.getStyles().put("opacity", listView.isEnabled() ? 1.0f : 0.5f);
@@ -127,6 +111,22 @@
         label.getStyles().put("color", color);
     }
 
+    public String toString(Object item) {
+        if (item == null) {
+            throw new IllegalArgumentException();
+        }
+
+        String string;
+        if (item instanceof ListItem) {
+            ListItem listItem = (ListItem)item;
+            string = listItem.getText();
+        } else {
+            string = item.toString();
+        }
+
+        return string;
+    }
+
     public int getIconWidth() {
         return imageView.getPreferredWidth(-1);
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/SpinnerItemRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/SpinnerItemRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/SpinnerItemRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/SpinnerItemRenderer.java Sat Feb 13 00:55:40 2010
@@ -64,4 +64,12 @@
 
         getStyles().put("color", color);
     }
+
+    public String toString(Object item) {
+        if (item == null) {
+            throw new IllegalArgumentException();
+        }
+
+        return item.toString();
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java Sat Feb 13 00:55:40 2010
@@ -86,6 +86,10 @@
         }
     }
 
+    public String toString(Object row, String columnName) {
+        return null;
+    }
+
     public boolean isCheckboxDisabled() {
         return checkboxDisabled;
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCellRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCellRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCellRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCellRenderer.java Sat Feb 13 00:55:40 2010
@@ -55,9 +55,9 @@
         renderStyles(tableView, selected, disabled);
 
         if (row != null) {
+            // Get the row and cell data
             Object cellData = null;
 
-            // Get the row and cell data
             if (columnName != null) {
                 Dictionary<String, Object> rowData;
                 if (row instanceof Dictionary<?, ?>) {
@@ -97,4 +97,23 @@
 
         styles.put("color", color);
     }
+
+    @SuppressWarnings("unchecked")
+    public String toString(Object row, String columnName) {
+        // Get the row and cell data
+        Object cellData = null;
+
+        if (columnName != null) {
+            Dictionary<String, Object> rowData;
+            if (row instanceof Dictionary<?, ?>) {
+                rowData = (Dictionary<String, Object>)row;
+            } else {
+                rowData = new BeanDictionary(row);
+            }
+
+            cellData = rowData.get(columnName);
+        }
+
+        return (cellData == null) ? null : cellData.toString();
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewHeaderDataRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewHeaderDataRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewHeaderDataRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewHeaderDataRenderer.java Sat Feb 13 00:55:40 2010
@@ -29,7 +29,6 @@
 import org.apache.pivot.wtk.VerticalAlignment;
 import org.apache.pivot.wtk.media.Image;
 
-
 /**
  * Default table view header data renderer.
  */
@@ -116,4 +115,20 @@
             }
         }
     }
+
+    public String toString(Object data) {
+        if (data == null) {
+            throw new IllegalArgumentException();
+        }
+
+        String string;
+        if (data instanceof TableViewHeaderData) {
+            TableViewHeaderData tableViewHeaderData = (TableViewHeaderData)data;
+            string = tableViewHeaderData.getText();
+        } else {
+            string = data.toString();
+        }
+
+        return string;
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewImageCellRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewImageCellRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewImageCellRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewImageCellRenderer.java Sat Feb 13 00:55:40 2010
@@ -91,4 +91,8 @@
             setImage(image);
         }
     }
+
+    public String toString(Object row, String columnName) {
+        return null;
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewMultiCellRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewMultiCellRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewMultiCellRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewMultiCellRenderer.java Sat Feb 13 00:55:40 2010
@@ -326,9 +326,9 @@
                     selected, highlighted, disabled);
             }
         } else {
+            // Get the row and cell data
             Object cellData = null;
 
-            // Get the row and cell data
             if (columnName != null) {
                 Dictionary<String, Object> rowData;
                 if (row instanceof Dictionary<?, ?>) {
@@ -366,6 +366,41 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
+    public String toString(Object row, String columnName) {
+        // Get the row and cell data
+        Object cellData = null;
+
+        if (columnName != null) {
+            Dictionary<String, Object> rowData;
+            if (row instanceof Dictionary<?, ?>) {
+                rowData = (Dictionary<String, Object>)row;
+            } else {
+                rowData = new BeanDictionary(row);
+            }
+
+            cellData = rowData.get(columnName);
+        }
+
+        TableView.CellRenderer cellRenderer = null;
+
+        Class<?> valueClass = (cellData == null ? null : cellData.getClass());
+        while (cellRenderer == null
+            && valueClass != Object.class) {
+            cellRenderer = cellRenderers.get(valueClass);
+
+            if (cellRenderer == null) {
+                valueClass = valueClass.getSuperclass();
+            }
+        }
+
+        if (cellRenderer == null) {
+            cellRenderer = defaultRenderer;
+        }
+
+        return cellRenderer.toString(row, columnName);
+    }
+
     public TableView.CellRenderer getDefaultRenderer() {
         return defaultRenderer;
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTextAreaCellRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTextAreaCellRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTextAreaCellRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTextAreaCellRenderer.java Sat Feb 13 00:55:40 2010
@@ -95,4 +95,23 @@
 
         styles.put("color", color);
     }
+
+    @SuppressWarnings("unchecked")
+    public String toString(Object row, String columnName) {
+        Object cellData = null;
+
+        // Get the row and cell data
+        if (columnName != null) {
+            Dictionary<String, Object> rowData;
+            if (row instanceof Dictionary<?, ?>) {
+                rowData = (Dictionary<String, Object>)row;
+            } else {
+                rowData = new BeanDictionary(row);
+            }
+
+            cellData = rowData.get(columnName);
+        }
+
+        return (cellData == null) ? null : cellData.toString();
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeViewNodeRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeViewNodeRenderer.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeViewNodeRenderer.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeViewNodeRenderer.java Sat Feb 13 00:55:40 2010
@@ -130,6 +130,22 @@
         }
     }
 
+    public String toString(Object node) {
+        if (node == null) {
+            throw new IllegalArgumentException();
+        }
+
+        String string;
+        if (node instanceof TreeNode) {
+            TreeNode treeNode = (TreeNode)node;
+            string = treeNode.getText();
+        } else {
+            string = node.toString();
+        }
+
+        return string;
+    }
+
     public int getIconWidth() {
         return imageView.getPreferredWidth(-1);
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ListButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ListButtonSkin.java?rev=909674&r1=909673&r2=909674&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ListButtonSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ListButtonSkin.java Sat Feb 13 00:55:40 2010
@@ -246,18 +246,29 @@
             consumed = true;
         } else if (keyCode == Keyboard.KeyCode.UP) {
             ListButton listButton = (ListButton)getComponent();
-            int selectedIndex = listButton.getSelectedIndex();
+            int index = listButton.getSelectedIndex();
 
-            if (selectedIndex > 0) {
-                listButton.setSelectedIndex(selectedIndex - 1);
+            do {
+                index--;
+            } while (index >= 0
+                && listButton.isItemDisabled(index));
+
+            if (index >= 0) {
+                listButton.setSelectedIndex(index);
                 consumed = true;
             }
         } else if (keyCode == Keyboard.KeyCode.DOWN) {
             ListButton listButton = (ListButton)getComponent();
-            int selectedIndex = listButton.getSelectedIndex();
+            int index = listButton.getSelectedIndex();
+            int count = listButton.getListData().getLength();
+
+            do {
+                index++;
+            } while (index < count
+                && listView.isItemDisabled(index));
 
-            if (selectedIndex < listButton.getListData().getLength() - 1) {
-                listButton.setSelectedIndex(selectedIndex + 1);
+            if (index < count) {
+                listButton.setSelectedIndex(index);
                 consumed = true;
             }
         } else {
@@ -285,6 +296,37 @@
         return consumed;
     }
 
+    @Override
+    public boolean keyTyped(Component component, char character) {
+        boolean consumed = super.keyTyped(component, character);
+
+        ListButton listButton = (ListButton)getComponent();
+
+        List<?> listData = listButton.getListData();
+        ListView.ItemRenderer itemRenderer = listButton.getItemRenderer();
+
+        character = Character.toUpperCase(character);
+
+        for (int i = listButton.getSelectedIndex() + 1, n = listData.getLength(); i < n; i++) {
+            if (!listButton.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) {
+                        listButton.setSelectedIndex(i);
+                        consumed = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        return consumed;
+    }
+
     // List button events
     @Override
     public void listDataChanged(ListButton listButton, List<?> previousListData) {