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/27 18:04:32 UTC

svn commit: r916990 - in /pivot/trunk: tests/src/org/apache/pivot/tests/ 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: Sat Feb 27 17:04:31 2010
New Revision: 916990

URL: http://svn.apache.org/viewvc?rev=916990&view=rev
Log:
Add bind mapping support to Button and Label; rename ListButton and CalendarButton bind mapping to "selection mapping" to avoid conflict with base class "bind mapping".

Modified:
    pivot/trunk/tests/src/org/apache/pivot/tests/data_binding_test.wtkx
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFormSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Calendar.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButton.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButtonListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.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/skin/ButtonSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/CalendarButtonSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/LabelSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ListButtonSkin.java

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/data_binding_test.wtkx
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/data_binding_test.wtkx?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/data_binding_test.wtkx (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/data_binding_test.wtkx Sat Feb 27 17:04:31 2010
@@ -46,9 +46,9 @@
                 <itemRenderer>
                     <tests:DataBindingTest.TestListViewItemRenderer/>
                 </itemRenderer>
-                <bindMapping>
+                <selectionBindMapping>
                     <tests:DataBindingTest.TestBindMapping/>
-                </bindMapping>
+                </selectionBindMapping>
             </ListButton>
 
             <Spinner spinnerData="$list" selectedItemKey="id3">

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFormSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFormSkin.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFormSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFormSkin.java Sat Feb 27 17:04:31 2010
@@ -820,78 +820,80 @@
                 fieldIndex < fieldCount; fieldIndex++) {
                 Component field = section.get(fieldIndex);
 
-                Form.Flag flag = Form.getFlag(field);
+                if (field.isVisible()) {
+                    Form.Flag flag = Form.getFlag(field);
 
-                if (flag != null) {
-                    if (showFlagIcons) {
-                        MessageType messageType = flag.getMessageType();
-                        Image flagIcon = null;
-
-                        switch (messageType) {
-                            case ERROR: {
-                                flagIcon = errorIcon;
-                                break;
+                    if (flag != null) {
+                        if (showFlagIcons) {
+                            MessageType messageType = flag.getMessageType();
+                            Image flagIcon = null;
+
+                            switch (messageType) {
+                                case ERROR: {
+                                    flagIcon = errorIcon;
+                                    break;
+                                }
+
+                                case WARNING: {
+                                    flagIcon = warningIcon;
+                                    break;
+                                }
+
+                                case QUESTION: {
+                                    flagIcon = questionIcon;
+                                    break;
+                                }
+
+                                case INFO: {
+                                    flagIcon = infoIcon;
+                                    break;
+                                }
                             }
 
-                            case WARNING: {
-                                flagIcon = warningIcon;
-                                break;
-                            }
-
-                            case QUESTION: {
-                                flagIcon = questionIcon;
-                                break;
-                            }
-
-                            case INFO: {
-                                flagIcon = infoIcon;
-                                break;
-                            }
+                            Label label = labels.get(sectionIndex).get(fieldIndex);
+                            int flagIconX = label.getX() - (flagIcon.getWidth() + flagIconOffset);
+                            int flagIconY = label.getY() + (label.getHeight() - flagIcon.getHeight()) / 2;
+
+                            graphics.translate(flagIconX, flagIconY);
+                            flagIcon.paint(graphics);
+                            graphics.translate(-flagIconX, -flagIconY);
                         }
 
-                        Label label = labels.get(sectionIndex).get(fieldIndex);
-                        int flagIconX = label.getX() - (flagIcon.getWidth() + flagIconOffset);
-                        int flagIconY = label.getY() + (label.getHeight() - flagIcon.getHeight()) / 2;
-
-                        graphics.translate(flagIconX, flagIconY);
-                        flagIcon.paint(graphics);
-                        graphics.translate(-flagIconX, -flagIconY);
-                    }
-
-                    if (showFlagHighlight) {
-                        MessageType messageType = flag.getMessageType();
-                        Color highlightColor = null;
-
-                        switch (messageType) {
-                            case ERROR: {
-                                highlightColor = errorHighlightColor;
-                                break;
+                        if (showFlagHighlight) {
+                            MessageType messageType = flag.getMessageType();
+                            Color highlightColor = null;
+
+                            switch (messageType) {
+                                case ERROR: {
+                                    highlightColor = errorHighlightColor;
+                                    break;
+                                }
+
+                                case WARNING: {
+                                    highlightColor = warningHighlightColor;
+                                    break;
+                                }
+
+                                case QUESTION: {
+                                    highlightColor = questionHighlightColor;
+                                    break;
+                                }
+
+                                case INFO: {
+                                    highlightColor = infoHighlightColor;
+                                    break;
+                                }
                             }
 
-                            case WARNING: {
-                                highlightColor = warningHighlightColor;
-                                break;
-                            }
-
-                            case QUESTION: {
-                                highlightColor = questionHighlightColor;
-                                break;
-                            }
+                            Bounds fieldBounds = field.getBounds();
 
-                            case INFO: {
-                                highlightColor = infoHighlightColor;
-                                break;
-                            }
+                            graphics.setColor(highlightColor);
+                            graphics.setStroke(new BasicStroke(1));
+                            graphics.drawRect(fieldBounds.x - FLAG_HIGHLIGHT_PADDING,
+                                fieldBounds.y - FLAG_HIGHLIGHT_PADDING,
+                                fieldBounds.width + FLAG_HIGHLIGHT_PADDING * 2 - 1,
+                                fieldBounds.height + FLAG_HIGHLIGHT_PADDING * 2 - 1);
                         }
-
-                        Bounds fieldBounds = field.getBounds();
-
-                        graphics.setColor(highlightColor);
-                        graphics.setStroke(new BasicStroke(1));
-                        graphics.drawRect(fieldBounds.x - FLAG_HIGHLIGHT_PADDING,
-                            fieldBounds.y - FLAG_HIGHLIGHT_PADDING,
-                            fieldBounds.width + FLAG_HIGHLIGHT_PADDING * 2 - 1,
-                            fieldBounds.height + FLAG_HIGHLIGHT_PADDING * 2 - 1);
                     }
                 }
             }

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=916990&r1=916989&r2=916990&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 27 17:04:31 2010
@@ -68,6 +68,25 @@
     }
 
     /**
+     * Translates between selection state and context data during data binding.
+     */
+    public interface BindMapping {
+        /**
+         * Converts a context value to a button state.
+         *
+         * @param value
+         */
+        public State toState(Object value);
+
+        /**
+         * Converts a button state to a context value.
+         *
+         * @param state
+         */
+        public Object valueOf(State state);
+    }
+
+    /**
      * Button listener list.
      */
     private static class ButtonListenerList extends ListenerList<ButtonListener>
@@ -127,6 +146,13 @@
                 listener.stateKeyChanged(button, previousStateKey);
             }
         }
+
+        @Override
+        public void bindMappingChanged(Button button, Button.BindMapping previousBindMapping) {
+            for (ButtonListener listener : this) {
+                listener.bindMappingChanged(button, previousBindMapping);
+            }
+        }
     }
 
     /**
@@ -174,6 +200,7 @@
 
     private String selectedKey = null;
     private String stateKey = null;
+    private BindMapping bindMapping = null;
 
     private ButtonListenerList buttonListeners = new ButtonListenerList();
     private ButtonStateListenerList buttonStateListeners = new ButtonStateListenerList();
@@ -495,30 +522,56 @@
         }
     }
 
+    public BindMapping getBindMapping() {
+        return bindMapping;
+    }
+
+    public void setBindMapping(BindMapping bindMapping) {
+        BindMapping previousBindMapping = this.bindMapping;
+
+        if (previousBindMapping != bindMapping) {
+            this.bindMapping = bindMapping;
+            buttonListeners.bindMappingChanged(this, previousBindMapping);
+        }
+    }
+
     @Override
     public void load(Dictionary<String, ?> context) {
         if (selectedKey != null
             && JSONSerializer.containsKey(context, selectedKey)) {
             Object value = JSONSerializer.get(context, selectedKey);
 
+            Boolean selected = false;
             if (value instanceof Boolean) {
-                setSelected((Boolean)value);
+                selected = (Boolean)value;
+            } else if (bindMapping == null) {
+                if (value != null) {
+                    selected = Boolean.valueOf(value.toString());
+                }
             } else {
-                throw new IllegalArgumentException(getClass().getName() + " can't bind to "
-                    + value + ".");
+                State state = bindMapping.toState(value);
+                selected = (state == State.SELECTED);
             }
+
+            setSelected(selected);
         }
 
         if (stateKey != null
             && JSONSerializer.containsKey(context, stateKey)) {
             Object value = JSONSerializer.get(context, stateKey);
 
+            State state = State.UNSELECTED;
             if (value instanceof State) {
-                setState((State)value);
+                state = (State)value;
+            } else if (bindMapping == null) {
+                if (value != null) {
+                    state = State.valueOf(value.toString().toUpperCase());
+                }
             } else {
-                throw new IllegalArgumentException(getClass().getName() + " can't bind to "
-                    + value + ".");
+                state = bindMapping.toState(value);
             }
+
+            setState(state);
         }
     }
 
@@ -526,11 +579,13 @@
     public void store(Dictionary<String, ?> context) {
         if (isEnabled()) {
             if (selectedKey != null) {
-                JSONSerializer.put(context, selectedKey, isSelected());
+                JSONSerializer.put(context, selectedKey, (bindMapping == null) ?
+                    isSelected() : bindMapping.valueOf(state));
             }
 
             if (stateKey != null) {
-                JSONSerializer.put(context, stateKey, state);
+                JSONSerializer.put(context, stateKey, (bindMapping == null) ?
+                    state : bindMapping.valueOf(state));
             }
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java Sat Feb 27 17:04:31 2010
@@ -55,6 +55,10 @@
         @Override
         public void stateKeyChanged(Button button, String previousStateKey) {
         }
+
+        @Override
+        public void bindMappingChanged(Button button, Button.BindMapping previousBindMapping) {
+        }
     }
 
     /**
@@ -118,4 +122,12 @@
      * @param previousStateKey
      */
     public void stateKeyChanged(Button button, String previousStateKey);
+
+    /**
+     * Called when a button's bind mapping has changed.
+     *
+     * @param button
+     * @param previousBindMapping
+     */
+    public void bindMappingChanged(Button button, Button.BindMapping previousBindMapping);
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Calendar.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Calendar.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Calendar.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Calendar.java Sat Feb 27 17:04:31 2010
@@ -358,11 +358,8 @@
             if (value instanceof CalendarDate) {
                 selectedDate = (CalendarDate)value;
             } else if (bindMapping == null) {
-                if (value instanceof String) {
-                    selectedDate = CalendarDate.decode((String)value);
-                } else if (value != null) {
-                    throw new IllegalArgumentException("Invalid date type: " +
-                        value.getClass().getName());
+                if (value != null) {
+                    selectedDate = CalendarDate.decode(value.toString());
                 }
             } else {
                 selectedDate = bindMapping.toDate(value);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButton.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButton.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButton.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButton.java Sat Feb 27 17:04:31 2010
@@ -61,10 +61,10 @@
         }
 
         @Override
-        public void bindMappingChanged(CalendarButton calendarButton,
-            Calendar.BindMapping previousBindMapping) {
+        public void selectionBindMappingChanged(CalendarButton calendarButton,
+            Calendar.BindMapping previousSelectionBindMapping) {
             for (CalendarButtonListener listener : this) {
-                listener.bindMappingChanged(calendarButton, previousBindMapping);
+                listener.selectionBindMappingChanged(calendarButton, previousSelectionBindMapping);
             }
         }
     }
@@ -89,7 +89,7 @@
     private Locale locale = Locale.getDefault();
     private Filter<CalendarDate> disabledDateFilter = null;
     private String selectedDateKey = null;
-    private Calendar.BindMapping bindMapping = null;
+    private Calendar.BindMapping selectionBindMapping = null;
 
     private CalendarButtonListenerList calendarButtonListeners =
         new CalendarButtonListenerList();
@@ -274,16 +274,16 @@
         }
     }
 
-    public Calendar.BindMapping getBindMapping() {
-        return bindMapping;
+    public Calendar.BindMapping getSelectionBindMapping() {
+        return selectionBindMapping;
     }
 
-    public void setBindMapping(Calendar.BindMapping bindMapping) {
-        Calendar.BindMapping previousBindMapping = this.bindMapping;
+    public void setSelectionBindMapping(Calendar.BindMapping bindMapping) {
+        Calendar.BindMapping previousSelectionBindMapping = this.selectionBindMapping;
 
-        if (previousBindMapping != bindMapping) {
-            this.bindMapping = bindMapping;
-            calendarButtonListeners.bindMappingChanged(this, previousBindMapping);
+        if (previousSelectionBindMapping != bindMapping) {
+            this.selectionBindMapping = bindMapping;
+            calendarButtonListeners.selectionBindMappingChanged(this, previousSelectionBindMapping);
         }
     }
 
@@ -303,15 +303,12 @@
 
             if (value instanceof CalendarDate) {
                 selectedDate = (CalendarDate)value;
-            } else if (bindMapping == null) {
-                if (value instanceof String) {
-                    selectedDate = CalendarDate.decode((String)value);
-                } else if (value != null) {
-                    throw new IllegalArgumentException("Invalid date type: " +
-                        value.getClass().getName());
+            } else if (selectionBindMapping == null) {
+                if (value != null) {
+                    selectedDate = CalendarDate.decode(value.toString());
                 }
             } else {
-                selectedDate = bindMapping.toDate(value);
+                selectedDate = selectionBindMapping.toDate(value);
             }
 
             setSelectedDate(selectedDate);
@@ -326,8 +323,8 @@
     public void store(Dictionary<String, ?> context) {
         if (isEnabled()
             && selectedDateKey != null) {
-            JSONSerializer.put(context, selectedDateKey, (bindMapping == null) ?
-                selectedDate : bindMapping.valueOf(selectedDate));
+            JSONSerializer.put(context, selectedDateKey, (selectionBindMapping == null) ?
+                selectedDate : selectionBindMapping.valueOf(selectedDate));
         }
     }
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButtonListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButtonListener.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/CalendarButtonListener.java Sat Feb 27 17:04:31 2010
@@ -44,8 +44,8 @@
         }
 
         @Override
-        public void bindMappingChanged(CalendarButton calendarButton,
-            Calendar.BindMapping previousBindMapping) {
+        public void selectionBindMappingChanged(CalendarButton calendarButton,
+            Calendar.BindMapping previousSelectionBindMapping) {
         }
     }
 
@@ -76,11 +76,11 @@
         String previousSelectedDateKey);
 
     /**
-     * Called when a calendar button's bind mapping has changed.
+     * Called when a calendar button's selection bind mapping has changed.
      *
      * @param calendarButton
-     * @param previousBindMapping
+     * @param previousSelectionBindMapping
      */
-    public void bindMappingChanged(CalendarButton calendarButton,
-        Calendar.BindMapping previousBindMapping);
+    public void selectionBindMappingChanged(CalendarButton calendarButton,
+        Calendar.BindMapping previousSelectionBindMapping);
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java Sat Feb 27 17:04:31 2010
@@ -20,11 +20,29 @@
 import org.apache.pivot.serialization.JSONSerializer;
 import org.apache.pivot.util.ListenerList;
 
-
 /**
  * Component that displays a string of text.
  */
 public class Label extends Component {
+    /**
+     * Translates between text and context data during data binding.
+     */
+    public interface BindMapping {
+        /**
+         * Converts a value from the bind context to a text representation.
+         *
+         * @param value
+         */
+        public String toString(Object value);
+
+        /**
+         * Converts a text string to a value to be stored in the bind context.
+         *
+         * @param text
+         */
+        public Object valueOf(String text);
+    }
+
     private static class LabelListenerList extends ListenerList<LabelListener>
         implements LabelListener {
         @Override
@@ -40,10 +58,19 @@
                 listener.textKeyChanged(label, previousTextKey);
             }
         }
+
+        @Override
+        public void bindMappingChanged(Label label, Label.BindMapping previousBindMapping) {
+            for (LabelListener listener : this) {
+                listener.bindMappingChanged(label, previousBindMapping);
+            }
+        }
     }
 
     private String text = null;
     private String textKey = null;
+    private BindMapping bindMapping = null;
+
     private LabelListenerList labelListeners = new LabelListenerList();
 
     public Label() {
@@ -93,13 +120,30 @@
         }
     }
 
+    public BindMapping getBindMapping() {
+        return bindMapping;
+    }
+
+    public void setBindMapping(BindMapping bindMapping) {
+        BindMapping previousBindMapping = this.bindMapping;
+
+        if (previousBindMapping != bindMapping) {
+            this.bindMapping = bindMapping;
+            labelListeners.bindMappingChanged(this, previousBindMapping);
+        }
+    }
+
     @Override
     public void load(Dictionary<String, ?> context) {
         if (textKey != null
             && JSONSerializer.containsKey(context, textKey)) {
             Object value = JSONSerializer.get(context, textKey);
-            if (value != null) {
+
+            if (bindMapping == null
+                && value != null) {
                 value = value.toString();
+            } else {
+                value = bindMapping.toString(value);
             }
 
             setText((String)value);
@@ -110,7 +154,9 @@
     public void store(Dictionary<String, ?> context) {
         if (isEnabled()
             && textKey != null) {
-            JSONSerializer.put(context, textKey, getText());
+            String text = getText();
+            JSONSerializer.put(context, textKey, (bindMapping == null) ?
+                text : bindMapping.valueOf(text));
         }
     }
 

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=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java Sat Feb 27 17:04:31 2010
@@ -31,6 +31,10 @@
         @Override
         public void textKeyChanged(Label label, String previousTextKey) {
         }
+
+        @Override
+        public void bindMappingChanged(Label label, Label.BindMapping previousBindMapping) {
+        }
     }
 
     /**
@@ -48,4 +52,12 @@
      * @param previousTextKey
      */
     public void textKeyChanged(Label label, String previousTextKey);
+
+    /**
+     * Called when a label's bind mapping has changed.
+     *
+     * @param label
+     * @param previousBindMapping
+     */
+    public void bindMappingChanged(Label label, Label.BindMapping previousBindMapping);
 }

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=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java Sat Feb 27 17:04:31 2010
@@ -62,9 +62,9 @@
         }
 
         @Override
-        public void bindMappingChanged(ListButton listButton, ListView.BindMapping previousBindMapping) {
+        public void selectionBindMappingChanged(ListButton listButton, ListView.BindMapping previousSelectionBindMapping) {
             for (ListButtonListener listener : this) {
-                listener.bindMappingChanged(listButton, previousBindMapping);
+                listener.selectionBindMappingChanged(listButton, previousSelectionBindMapping);
             }
         }
     }
@@ -85,7 +85,7 @@
     private Filter<?> disabledItemFilter = null;
 
     private String selectedItemKey = null;
-    private ListView.BindMapping bindMapping = null;
+    private ListView.BindMapping selectionBindMapping = null;
 
     private ListButtonListenerList listButtonListeners = new ListButtonListenerList();
     private ListButtonSelectionListenerList listButtonSelectionListeners = new ListButtonSelectionListenerList();
@@ -331,16 +331,16 @@
         }
     }
 
-    public ListView.BindMapping getBindMapping() {
-        return bindMapping;
+    public ListView.BindMapping getSelectionBindMapping() {
+        return selectionBindMapping;
     }
 
-    public void setBindMapping(ListView.BindMapping bindMapping) {
-        ListView.BindMapping previousBindMapping = this.bindMapping;
+    public void setSelectionBindMapping(ListView.BindMapping bindMapping) {
+        ListView.BindMapping previousSelectionBindMapping = this.selectionBindMapping;
 
-        if (previousBindMapping != bindMapping) {
-            this.bindMapping = bindMapping;
-            listButtonListeners.bindMappingChanged(this, previousBindMapping);
+        if (previousSelectionBindMapping != bindMapping) {
+            this.selectionBindMapping = bindMapping;
+            listButtonListeners.selectionBindMappingChanged(this, previousSelectionBindMapping);
         }
     }
 
@@ -352,10 +352,10 @@
             Object item = JSONSerializer.get(context, selectedItemKey);
 
             int index;
-            if (bindMapping == null) {
+            if (selectionBindMapping == null) {
                 index = ((List<Object>)listData).indexOf(item);
             } else {
-                index = bindMapping.indexOf(listData, item);
+                index = selectionBindMapping.indexOf(listData, item);
             }
 
             setSelectedIndex(index);
@@ -369,10 +369,10 @@
             int selectedIndex = getSelectedIndex();
 
             Object item;
-            if (bindMapping == null) {
+            if (selectionBindMapping == null) {
                 item = listData.get(selectedIndex);
             } else {
-                item = bindMapping.get(listData, selectedIndex);
+                item = selectionBindMapping.get(listData, selectedIndex);
             }
 
             JSONSerializer.put(context, selectedItemKey, item);

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=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java Sat Feb 27 17:04:31 2010
@@ -44,7 +44,7 @@
         }
 
         @Override
-        public void bindMappingChanged(ListButton listButton, ListView.BindMapping previousBindMapping) {
+        public void selectionBindMappingChanged(ListButton listButton, ListView.BindMapping previousSelectionBindMapping) {
         }
     }
 
@@ -81,10 +81,11 @@
     public void selectedItemKeyChanged(ListButton listButton, String previousSelectedItemKey);
 
     /**
-     * Called when a list button's bind mapping has changed.
+     * Called when a list button's selection bind mapping has changed.
      *
      * @param listButton
-     * @param previousBindMapping
+     * @param previousSelectionBindMapping
      */
-    public void bindMappingChanged(ListButton listButton, ListView.BindMapping previousBindMapping);
+    public void selectionBindMappingChanged(ListButton listButton,
+        ListView.BindMapping previousSelectionBindMapping);
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ButtonSkin.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ButtonSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ButtonSkin.java Sat Feb 27 17:04:31 2010
@@ -123,6 +123,11 @@
         // No-op
     }
 
+    @Override
+    public void bindMappingChanged(Button button, Button.BindMapping previousBindMapping) {
+        // No-op
+    }
+
     // Button state events
     @Override
     public void stateChanged(Button button, Button.State previousState) {

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/CalendarButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/CalendarButtonSkin.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/CalendarButtonSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/CalendarButtonSkin.java Sat Feb 27 17:04:31 2010
@@ -293,7 +293,7 @@
     }
 
     @Override
-    public void bindMappingChanged(CalendarButton calendarButton,
-        Calendar.BindMapping previousBindMapping) {
+    public void selectionBindMappingChanged(CalendarButton calendarButton,
+        Calendar.BindMapping previousSelectionBindMapping) {
     }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/LabelSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/LabelSkin.java?rev=916990&r1=916989&r2=916990&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/LabelSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/LabelSkin.java Sat Feb 27 17:04:31 2010
@@ -588,4 +588,9 @@
     public void textKeyChanged(Label label, String previousTextKey) {
         // No-op
     }
+
+    @Override
+    public void bindMappingChanged(Label label, Label.BindMapping previousBindMapping) {
+        // No-op
+    }
 }

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=916990&r1=916989&r2=916990&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 27 17:04:31 2010
@@ -330,6 +330,7 @@
     // List button events
     @Override
     public void listDataChanged(ListButton listButton, List<?> previousListData) {
+        listButton.setButtonData(null);
         listView.setListData(listButton.getListData());
         invalidateComponent();
     }
@@ -350,7 +351,7 @@
     }
 
     @Override
-    public void bindMappingChanged(ListButton listButton, ListView.BindMapping previousBindMapping) {
+    public void selectionBindMappingChanged(ListButton listButton, ListView.BindMapping previousSelectionBindMapping) {
         // No-op
     }