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/01/17 20:32:32 UTC

svn commit: r900197 - in /pivot/trunk: wtk-terra/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/apache/pivot/wtk/ wtk/src/org/apache/pivot/wtk/skin/

Author: gbrown
Date: Sun Jan 17 19:32:31 2010
New Revision: 900197

URL: http://svn.apache.org/viewvc?rev=900197&view=rev
Log:
Add SuggestionPopup and associated classes (incomplete); add missing @Override annotations to recently added listener adapter classes.

Added:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSuggestionPopupSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopup.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupListener.java
Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTheme.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDataListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDecoratorListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuBarListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuButtonListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollPaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeaderListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java

Added: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSuggestionPopupSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSuggestionPopupSkin.java?rev=900197&view=auto
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSuggestionPopupSkin.java (added)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraSuggestionPopupSkin.java Sun Jan 17 19:32:31 2010
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk.skin.terra;
+
+import java.awt.Color;
+import java.awt.Font;
+
+import org.apache.pivot.collections.Dictionary;
+import org.apache.pivot.collections.List;
+import org.apache.pivot.wtk.Border;
+import org.apache.pivot.wtk.Component;
+import org.apache.pivot.wtk.Display;
+import org.apache.pivot.wtk.GraphicsUtilities;
+import org.apache.pivot.wtk.ListView;
+import org.apache.pivot.wtk.SuggestionPopup;
+import org.apache.pivot.wtk.SuggestionPopupListener;
+import org.apache.pivot.wtk.Theme;
+import org.apache.pivot.wtk.Window;
+import org.apache.pivot.wtk.skin.WindowSkin;
+
+/**
+ * Terra suggestion popup skin.
+ */
+public class TerraSuggestionPopupSkin extends WindowSkin implements SuggestionPopupListener {
+    private Border suggestionListViewBorder = new Border();
+    private ListView suggestionListView = new ListView();
+
+    public TerraSuggestionPopupSkin () {
+        suggestionListViewBorder.setContent(suggestionListView);
+
+        // TODO Attach listeners to suggestion list view
+    }
+
+    @Override
+    public void install(Component component) {
+        super.install(component);
+
+        SuggestionPopup suggestionPopup = (SuggestionPopup)component;
+        suggestionPopup.getSuggestionPopupListeners().add(this);
+
+        suggestionPopup.setContent(suggestionListViewBorder);
+
+        suggestionListView.setListData(suggestionPopup.getSuggestions());
+        suggestionListView.setItemRenderer(suggestionPopup.getSuggestionRenderer());
+    }
+
+    public Font getFont() {
+        return (Font)suggestionListView.getStyles().get("font");
+    }
+
+    public void setFont(Font font) {
+        suggestionListView.getStyles().put("font", font);
+    }
+
+    public final void setFont(String font) {
+        if (font == null) {
+            throw new IllegalArgumentException("font is null.");
+        }
+
+        setFont(decodeFont(font));
+    }
+
+    public final void setFont(Dictionary<String, ?> font) {
+        if (font == null) {
+            throw new IllegalArgumentException("font is null.");
+        }
+
+        setFont(Theme.deriveFont(font));
+    }
+
+    public Color getColor() {
+        return (Color)suggestionListView.getStyles().get("color");
+    }
+
+    public void setColor(Color color) {
+        suggestionListView.getStyles().put("color", color);
+    }
+
+    public final void setColor(String color) {
+        if (color == null) {
+            throw new IllegalArgumentException("color is null.");
+        }
+
+        setColor(GraphicsUtilities.decodeColor(color));
+    }
+
+    public Color getBorderColor() {
+        return (Color)suggestionListViewBorder.getStyles().get("color");
+    }
+
+    public void setBorderColor(Color borderColor) {
+        suggestionListViewBorder.getStyles().put("color", borderColor);
+    }
+
+    public final void setBorderColor(String borderColor) {
+        if (borderColor == null) {
+            throw new IllegalArgumentException("borderColor is null.");
+        }
+
+        setBorderColor(GraphicsUtilities.decodeColor(borderColor));
+    }
+
+    @Override
+    public void windowOpened(Window window) {
+        super.windowOpened(window);
+
+        // TODO Add listeners to text input
+    }
+
+    @Override
+    public void windowClosed(Window window, Display display, Window owner) {
+        // TODO Remove listeners from text input
+
+        super.windowClosed(window, display, owner);
+    }
+
+    @Override
+    public void suggestionsChanged(SuggestionPopup suggestionPopup,
+        List<?> previousSuggestions) {
+        suggestionListView.setListData(suggestionPopup.getSuggestions());
+    }
+
+    @Override
+    public void suggestionRendererChanged(SuggestionPopup suggestionPopup,
+        ListView.ItemRenderer previousSuggestionRenderer) {
+        suggestionListView.setItemRenderer(suggestionPopup.getSuggestionRenderer());
+    }
+}

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTheme.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTheme.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTheme.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTheme.java Sun Jan 17 19:32:31 2010
@@ -69,6 +69,7 @@
 import org.apache.pivot.wtk.Slider;
 import org.apache.pivot.wtk.Spinner;
 import org.apache.pivot.wtk.SplitPane;
+import org.apache.pivot.wtk.SuggestionPopup;
 import org.apache.pivot.wtk.TabPane;
 import org.apache.pivot.wtk.TablePane;
 import org.apache.pivot.wtk.TableView;
@@ -132,6 +133,7 @@
         componentSkinMap.put(Slider.class, TerraSliderSkin.class);
         componentSkinMap.put(Spinner.class, TerraSpinnerSkin.class);
         componentSkinMap.put(SplitPane.class, TerraSplitPaneSkin.class);
+        componentSkinMap.put(SuggestionPopup.class, TerraSuggestionPopupSkin.class);
         componentSkinMap.put(TablePane.class, TerraTablePaneSkin.class);
         componentSkinMap.put(TableViewHeader.class, TerraTableViewHeaderSkin.class);
         componentSkinMap.put(TableView.class, TerraTableViewSkin.class);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDataListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDataListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDataListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDataListener.java Sun Jan 17 19:32:31 2010
@@ -24,12 +24,15 @@
      * Component data listener adapter.
      */
     public static class Adapter implements ComponentDataListener {
+        @Override
         public void valueAdded(Component component, String key) {
         }
 
+        @Override
         public void valueUpdated(Component component, String key, Object previousValue) {
         }
 
+        @Override
         public void valueRemoved(Component component, String key, Object value) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDecoratorListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDecoratorListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDecoratorListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ComponentDecoratorListener.java Sun Jan 17 19:32:31 2010
@@ -27,12 +27,15 @@
      * Component decorator list adapter.
      */
     public static class Adapter implements ComponentDecoratorListener {
+        @Override
         public void decoratorInserted(Component component, int index) {
         }
 
+        @Override
         public void decoratorUpdated(Component component, int index, Decorator previousDecorator) {
         }
 
+        @Override
         public void decoratorsRemoved(Component component, int index,
             Sequence<Decorator> decorators) {
         }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java Sun Jan 17 19:32:31 2010
@@ -24,9 +24,11 @@
      * Label listener adapter.
      */
     public static class Adapter implements LabelListener {
+        @Override
         public void textChanged(Label label, String previousText) {
         }
 
+        @Override
         public void textKeyChanged(Label label, String previousTextKey) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java Sun Jan 17 19:32:31 2010
@@ -26,7 +26,6 @@
 import org.apache.pivot.wtk.content.ListButtonDataRenderer;
 import org.apache.pivot.wtk.content.ListViewItemRenderer;
 
-
 /**
  * Component that allows a user to select one of several list options. The
  * options are hidden until the user pushes the button.
@@ -80,7 +79,7 @@
     }
 
     private List<?> listData;
-    private ListView.ItemRenderer itemRenderer = null;
+    private ListView.ItemRenderer itemRenderer;
     private int selectedIndex = -1;
     private Filter<?> disabledItemFilter = null;
     private String selectedItemKey = null;

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java Sun Jan 17 19:32:31 2010
@@ -27,15 +27,19 @@
      * List button listener adapter.
      */
     public static class Adapter implements ListButtonListener {
+        @Override
         public void listDataChanged(ListButton listButton, List<?> previousListData) {
         }
 
+        @Override
         public void itemRendererChanged(ListButton listButton, ListView.ItemRenderer previousItemRenderer) {
         }
 
+        @Override
         public void disabledItemFilterChanged(ListButton listButton, Filter<?> previousDisabledItemFilter) {
         }
 
+        @Override
         public void selectedItemKeyChanged(ListButton listButton, String previousSelectedItemKey) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuBarListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuBarListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuBarListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuBarListener.java Sun Jan 17 19:32:31 2010
@@ -26,12 +26,15 @@
      * Menu bar listener adapter.
      */
     public static class Adapter implements MenuBarListener {
+        @Override
         public void itemInserted(MenuBar menuBar, int index) {
         }
 
+        @Override
         public void itemsRemoved(MenuBar menuBar, int index, Sequence<MenuBar.Item> removed) {
         }
 
+        @Override
         public void activeItemChanged(MenuBar menuBar, MenuBar.Item previousActiveItem) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuButtonListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuButtonListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuButtonListener.java Sun Jan 17 19:32:31 2010
@@ -24,9 +24,11 @@
      * Menu button listener adapter.
      */
     public static class Adapter implements MenuButtonListener {
+        @Override
         public void menuChanged(MenuButton menuButton, Menu previousMenu) {
         }
 
+        @Override
         public void repeatableChanged(MenuButton menuButton) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuListener.java Sun Jan 17 19:32:31 2010
@@ -26,12 +26,15 @@
      * Menu listener adapter.
      */
     public static class Adapter implements MenuListener {
+        @Override
         public void sectionInserted(Menu menu, int index) {
         }
 
+        @Override
         public void sectionsRemoved(Menu menu, int index, Sequence<Menu.Section> removed) {
         }
 
+        @Override
         public void activeItemChanged(Menu menu, Menu.Item previousActiveItem) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MenuPopup.java Sun Jan 17 19:32:31 2010
@@ -125,9 +125,13 @@
 
     public void open(Display display, Window owner, int x, int y) {
         contextMenu = true;
-
         setLocation(x, y);
+
         super.open(display, owner);
+
+        if (!isOpen()) {
+            contextMenu = false;
+        }
     }
 
     @Override

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarListener.java Sun Jan 17 19:32:31 2010
@@ -24,16 +24,20 @@
      * Scroll bar listener adapter.
      */
     public static class Adapter implements ScrollBarListener {
+        @Override
         public void orientationChanged(ScrollBar scrollBar, Orientation previousOrientation) {
         }
 
+        @Override
         public void scopeChanged(ScrollBar scrollBar, int previousStart, int previousEnd,
             int previousExtent) {
         }
 
+        @Override
         public void unitIncrementChanged(ScrollBar scrollBar, int previousUnitIncrement) {
         }
 
+        @Override
         public void blockIncrementChanged(ScrollBar scrollBar, int previousBlockIncrement) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollPaneListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollPaneListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollPaneListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollPaneListener.java Sun Jan 17 19:32:31 2010
@@ -24,21 +24,26 @@
      * Scroll pane listener adapter.
      */
     public static class Adapter implements ScrollPaneListener {
+        @Override
         public void horizontalScrollBarPolicyChanged(ScrollPane scrollPane,
             ScrollPane.ScrollBarPolicy previousPolicy) {
         }
 
+        @Override
         public void verticalScrollBarPolicyChanged(ScrollPane scrollPane,
             ScrollPane.ScrollBarPolicy previousPolicy) {
         }
 
+        @Override
         public void rowHeaderChanged(ScrollPane scrollPane, Component previousRowHeader) {
         }
 
+        @Override
         public void columnHeaderChanged(ScrollPane scrollPane,
             Component previousColumnHeader) {
         }
 
+        @Override
         public void cornerChanged(ScrollPane scrollPane, Component previousCorner) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java Sun Jan 17 19:32:31 2010
@@ -24,9 +24,11 @@
      * Slider listener adapter.
      */
     public static class Adapter implements SliderListener {
+        @Override
         public void rangeChanged(Slider slider, int previousStart, int previousEnd) {
         }
 
+        @Override
         public void orientationChanged(Slider slider) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPaneListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPaneListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPaneListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPaneListener.java Sun Jan 17 19:32:31 2010
@@ -24,24 +24,31 @@
      * Split pane listener adapter.
      */
     public static class Adapter implements SplitPaneListener {
+        @Override
         public void topLeftChanged(SplitPane splitPane, Component previousTopLeft) {
         }
 
+        @Override
         public void bottomRightChanged(SplitPane splitPane, Component previousBottomRight) {
         }
 
+        @Override
         public void orientationChanged(SplitPane splitPane) {
         }
 
+        @Override
         public void primaryRegionChanged(SplitPane splitPane) {
         }
 
+        @Override
         public void splitRatioChanged(SplitPane splitPane, float previousSplitRatio) {
         }
 
+        @Override
         public void lockedChanged(SplitPane splitPane) {
         }
 
+        @Override
         public void resizeModeChanged(SplitPane splitPane,
             SplitPane.ResizeMode previousResizeMode) {
         }

Added: pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopup.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopup.java?rev=900197&view=auto
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopup.java (added)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopup.java Sun Jan 17 19:32:31 2010
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk;
+
+import org.apache.pivot.collections.ArrayList;
+import org.apache.pivot.collections.List;
+import org.apache.pivot.util.ListenerList;
+import org.apache.pivot.wtk.content.ListViewItemRenderer;
+
+/**
+ * Popup that presents a list of text suggestions to the user.
+ */
+public class SuggestionPopup extends Window {
+    private static class SuggestionPopupListenerList extends ListenerList<SuggestionPopupListener>
+        implements SuggestionPopupListener {
+        @Override
+        public void suggestionsChanged(SuggestionPopup suggestionPopup,
+            List<?> previousSuggestions) {
+            for (SuggestionPopupListener listener : this) {
+                listener.suggestionsChanged(suggestionPopup, previousSuggestions);
+            }
+        }
+
+        @Override
+        public void suggestionRendererChanged(SuggestionPopup suggestionPopup,
+            ListView.ItemRenderer previousSuggestionRenderer) {
+            for (SuggestionPopupListener listener : this) {
+                listener.suggestionRendererChanged(suggestionPopup, previousSuggestionRenderer);
+            }
+        }
+    }
+
+    private TextInput textInput = null;
+    private List<?> suggestions;
+    private ListView.ItemRenderer suggestionRenderer;
+
+    private SuggestionPopupListenerList suggestionPopupListeners = new SuggestionPopupListenerList();
+
+    private static final ListView.ItemRenderer DEFAULT_SUGGESTION_RENDERER =
+        new ListViewItemRenderer();
+
+    public SuggestionPopup() {
+        this(new ArrayList<Object>());
+    }
+
+    public SuggestionPopup(List<?> suggestions) {
+        setSuggestionRenderer(DEFAULT_SUGGESTION_RENDERER);
+        setSuggestions(suggestions);
+
+        installThemeSkin(SuggestionPopup.class);
+    }
+
+    /**
+     * Returns the text input for which suggestions will be provided.
+     */
+    public TextInput getTextInput() {
+        return textInput;
+    }
+
+    /**
+     * Returns the list of suggestions presented by the popup.
+     */
+    public List<?> getSuggestions() {
+        return suggestions;
+    }
+
+    /**
+     * Sets the list of suggestions presented by the popup.
+     *
+     * @param suggestions
+     */
+    public void setSuggestions(List<?> suggestions) {
+        if (suggestions == null) {
+            throw new IllegalArgumentException();
+        }
+
+        List<?> previousSuggestions = this.suggestions;
+
+        if (previousSuggestions != suggestions) {
+            this.suggestions = suggestions;
+            suggestionPopupListeners.suggestionsChanged(this, previousSuggestions);
+        }
+    }
+
+    /**
+     * Returns the list view item renderer used to present suggestions.
+     */
+    public ListView.ItemRenderer getSuggestionRenderer() {
+        return suggestionRenderer;
+    }
+
+    /**
+     * Sets the list view item renderer used to present suggestions.
+     *
+     * @param suggestionRenderer
+     */
+    public void setSuggestionRenderer(ListView.ItemRenderer suggestionRenderer) {
+        ListView.ItemRenderer previousSuggestionRenderer = this.suggestionRenderer;
+
+        if (previousSuggestionRenderer != suggestionRenderer) {
+            this.suggestionRenderer = suggestionRenderer;
+            suggestionPopupListeners.suggestionRendererChanged(this, previousSuggestionRenderer);
+        }
+    }
+
+    @Override
+    public final void open(Display display, Window owner) {
+        if (textInput == null) {
+            throw new IllegalStateException("textInput is null.");
+        }
+
+        open(display, owner);
+    }
+
+    /**
+     * Opens the suggestion popup window.
+     *
+     * @param textInput
+     * The text input for which suggestions will be provided.
+     */
+    public void open(TextInput textInput) {
+        if (textInput == null) {
+            throw new IllegalArgumentException();
+        }
+
+        this.textInput = textInput;
+
+        super.open(textInput.getWindow());
+
+        if (!isOpen()) {
+            this.textInput = null;
+        }
+    }
+
+    @Override
+    public void close() {
+        super.close();
+
+        if (isClosed()) {
+            textInput = null;
+        }
+    }
+
+    public ListenerList<SuggestionPopupListener> getSuggestionPopupListeners() {
+        return suggestionPopupListeners;
+    }
+}

Added: pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupListener.java?rev=900197&view=auto
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupListener.java (added)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupListener.java Sun Jan 17 19:32:31 2010
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk;
+
+import org.apache.pivot.collections.List;
+
+/**
+ * Suggestion popup listener interface.
+ */
+public interface SuggestionPopupListener {
+    /**
+     * Suggestion popup listener adapter.
+     */
+    public static class Adapter implements SuggestionPopupListener {
+        @Override
+        public void suggestionsChanged(SuggestionPopup suggestionPopup,
+            List<?> previousSuggestions) {
+        }
+
+        @Override
+        public void suggestionRendererChanged(SuggestionPopup suggestionPopup,
+            ListView.ItemRenderer previousSuggestionRenderer) {
+        }
+    }
+
+    /**
+     * Called when a suggestion popup's suggestions have changed.
+     *
+     * @param suggestionPopup
+     * @param previousSuggestions
+     */
+    public void suggestionsChanged(SuggestionPopup suggestionPopup, List<?> previousSuggestions);
+
+    /**
+     * Called when a suggestion popup's item renderer has changed.
+     *
+     * @param suggestionPopup
+     * @param previousSuggestionRenderer
+     */
+    public void suggestionRendererChanged(SuggestionPopup suggestionPopup,
+        ListView.ItemRenderer previousSuggestionRenderer);
+}

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java Sun Jan 17 19:32:31 2010
@@ -26,30 +26,38 @@
      * Table view column listener adapter.
      */
     public static class Adapter implements TableViewColumnListener {
+        @Override
         public void columnInserted(TableView tableView, int index) {
         }
 
+        @Override
         public void columnsRemoved(TableView tableView, int index,
             Sequence<TableView.Column> columns) {
         }
 
+        @Override
         public void columnNameChanged(TableView.Column column, String previousName) {
         }
 
+        @Override
         public void columnHeaderDataChanged(TableView.Column column, Object previousHeaderData) {
         }
 
+        @Override
         public void columnWidthChanged(TableView.Column column, int previousWidth,
             boolean previousRelative) {
         }
 
+        @Override
         public void columnWidthLimitsChanged(TableView.Column column, int previousMinimumWidth,
             int previousMaximumWidth) {
         }
 
+        @Override
         public void columnFilterChanged(TableView.Column column, Object previousFilter) {
         }
 
+        @Override
         public void columnCellRendererChanged(TableView.Column column,
             TableView.CellRenderer previousCellRenderer) {
         }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeaderListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeaderListener.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeaderListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TableViewHeaderListener.java Sun Jan 17 19:32:31 2010
@@ -26,13 +26,16 @@
      * Table view header listener adapter.
      */
     public static class Adapter implements TableViewHeaderListener {
+        @Override
         public void tableViewChanged(TableViewHeader tableViewHeader, TableView previousTableView) {
         }
 
+        @Override
         public void dataRendererChanged(TableViewHeader tableViewHeader,
             TableViewHeader.DataRenderer previousDataRenderer) {
         }
 
+        @Override
         public void sortModeChanged(TableViewHeader tableViewHeader, SortMode previousSortMode) {
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java?rev=900197&r1=900196&r2=900197&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java Sun Jan 17 19:32:31 2010
@@ -159,6 +159,7 @@
 
     @Override
     public void windowOpened(Window window) {
+        // No-op
     }
 
     @Override