You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by no...@apache.org on 2010/08/17 09:39:55 UTC

svn commit: r986222 - in /pivot/trunk/wtk/src/org/apache/pivot/wtk: Button.java ButtonBindingListener.java

Author: noelgrandin
Date: Tue Aug 17 07:39:54 2010
New Revision: 986222

URL: http://svn.apache.org/viewvc?rev=986222&view=rev
Log:
PIVOT-595 Add data binding support to Button

Modified:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonBindingListener.java

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=986222&r1=986221&r2=986222&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java Tue Aug 17 07:39:54 2010
@@ -108,6 +108,27 @@ public abstract class Button extends Com
         public Object valueOf(State state);
     }
 
+    /**
+     * Translates between button buttonData and context data during data binding.
+     */
+    public interface ButtonDataBindMapping {
+        /**
+         * Converts a context value to a button state during a
+         * {@link Component#load(Object)} operation.
+         *
+         * @param value
+         */
+        public Object toData(Object value);
+
+        /**
+         * Converts a buttonData to a context value during a
+         * {@link Component#store(Object)} operation.
+         *
+         * @param buttonData
+         */
+        public Object valueOf(Object buttonData);
+    }
+    
     private static class ButtonListenerList extends ListenerList<ButtonListener>
         implements ButtonListener {
         @Override
@@ -216,6 +237,27 @@ public abstract class Button extends Com
                 listener.stateBindMappingChanged(button, previousStateBindMapping);
             }
         }
+        
+        @Override
+        public void buttonDataKeyChanged(Button button, String previousStateKey) {
+            for (ButtonBindingListener listener : this) {
+                listener.buttonDataKeyChanged(button, previousStateKey);
+            }
+        }
+
+        @Override
+        public void buttonDataBindTypeChanged(Button button, BindType previousStateBindType) {
+            for (ButtonBindingListener listener : this) {
+                listener.buttonDataBindTypeChanged(button, previousStateBindType);
+            }
+        }
+
+        @Override
+        public void buttonDataBindMappingChanged(Button button, Button.ButtonDataBindMapping previousButtonDataBindMapping) {
+            for (ButtonBindingListener listener : this) {
+                listener.buttonDataBindMappingChanged(button, previousButtonDataBindMapping);
+            }
+        }
     }
 
     private Object buttonData = null;
@@ -243,6 +285,10 @@ public abstract class Button extends Com
     private String stateKey = null;
     private BindType stateBindType = BindType.BOTH;
     private StateBindMapping stateBindMapping = null;
+    
+    private String buttonDataKey = null;
+    private BindType buttonDataBindType = BindType.BOTH;
+    private ButtonDataBindMapping buttonDataBindMapping = null;
 
     private ButtonListenerList buttonListeners = new ButtonListenerList();
     private ButtonStateListenerList buttonStateListeners = new ButtonStateListenerList();
@@ -641,6 +687,19 @@ public abstract class Button extends Com
         }
     }
 
+    public ButtonDataBindMapping getButtonDataBindMapping() {
+        return buttonDataBindMapping;
+    }
+
+    public void setButtonDataBindMapping(ButtonDataBindMapping buttonDataBindMapping) {
+        ButtonDataBindMapping previousButtonDataBindMapping = this.buttonDataBindMapping;
+
+        if (previousButtonDataBindMapping != buttonDataBindMapping) {
+            this.buttonDataBindMapping = buttonDataBindMapping;
+            buttonBindingListeners.buttonDataBindMappingChanged(this, previousButtonDataBindMapping);
+        }
+    }
+    
     @Override
     public void load(Object context) {
         if (toggleButton) {
@@ -686,6 +745,19 @@ public abstract class Button extends Com
                 }
             }
         }
+        if (buttonDataKey != null
+            && JSON.containsKey(context, buttonDataKey)
+            && buttonDataBindType != BindType.STORE) {
+            Object value = JSON.get(context, buttonDataKey);
+
+            Object buttonData = value;
+
+            if (buttonDataBindMapping != null) {
+                value = buttonDataBindMapping.toData(value);
+            }
+            
+            setButtonData(buttonData);
+        }
     }
 
     @Override
@@ -707,6 +779,11 @@ public abstract class Button extends Com
                 }
             }
         }
+        if (buttonDataKey != null
+            && buttonDataBindType != BindType.LOAD) {
+            JSON.put(context, buttonDataKey, (buttonDataBindMapping == null) ?
+                buttonData : buttonDataBindMapping.valueOf(buttonData));
+        }
     }
 
     @Override

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonBindingListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonBindingListener.java?rev=986222&r1=986221&r2=986222&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonBindingListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonBindingListener.java Tue Aug 17 07:39:54 2010
@@ -47,6 +47,18 @@ public interface ButtonBindingListener {
         @Override
         public void stateBindMappingChanged(Button button, Button.StateBindMapping previousStateBindMapping) {
         }
+        
+        @Override
+        public void buttonDataKeyChanged(Button button, String previousStateKey) {
+        }
+
+        @Override
+        public void buttonDataBindTypeChanged(Button button, BindType previousStateBindType) {
+        }
+
+        @Override
+        public void buttonDataBindMappingChanged(Button button, Button.ButtonDataBindMapping previousButtonDataBindMapping) {
+        }
     }
 
     /**
@@ -96,4 +108,28 @@ public interface ButtonBindingListener {
      * @param previousStateBindMapping
      */
     public void stateBindMappingChanged(Button button, Button.StateBindMapping previousStateBindMapping);
+    
+    /**
+     * Called when a button's buttonData key has changed.
+     *
+     * @param button
+     * @param previousButtonDataKey
+     */
+    public void buttonDataKeyChanged(Button button, String previousButtonDataKey);
+
+    /**
+     * Called when a button's buttonData bind type has changed.
+     *
+     * @param button
+     * @param previousButtonDataBindType
+     */
+    public void buttonDataBindTypeChanged(Button button, BindType previousButtonDataBindType);
+
+    /**
+     * Called when a button's buttonData bind mapping has changed.
+     *
+     * @param button
+     * @param previousButtonDataBindMapping
+     */
+    public void buttonDataBindMappingChanged(Button button, Button.ButtonDataBindMapping previousButtonDataBindMapping);
 }