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/03/04 17:25:49 UTC

svn commit: r919050 - in /pivot/trunk/wtk/src/org/apache/pivot/wtk: Button.java ButtonListener.java skin/ButtonSkin.java

Author: gbrown
Date: Thu Mar  4 16:25:49 2010
New Revision: 919050

URL: http://svn.apache.org/viewvc?rev=919050&view=rev
Log:
Add support for binding to "selected" property in Button in addition to "state"; add support for bind type to Button bindings.

Modified:
    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/skin/ButtonSkin.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=919050&r1=919049&r2=919050&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java Thu Mar  4 16:25:49 2010
@@ -70,6 +70,25 @@
     /**
      * Translates between selection state and context data during data binding.
      */
+    public interface SelectedBindMapping {
+        /**
+         * Converts a context value to a selection state.
+         *
+         * @param value
+         */
+        public Boolean isSelected(Object value);
+
+        /**
+         * Converts a selection state to a context value.
+         *
+         * @param selected
+         */
+        public Object valueOf(Boolean selected);
+    }
+
+    /**
+     * Translates between button state and context data during data binding.
+     */
     public interface StateBindMapping {
         /**
          * Converts a context value to a button state.
@@ -141,6 +160,20 @@
         }
 
         @Override
+        public void selectedBindTypeChanged(Button button, BindType previousSelectedBindType) {
+            for (ButtonListener listener : this) {
+                listener.selectedBindTypeChanged(button, previousSelectedBindType);
+            }
+        }
+
+        @Override
+        public void selectedBindMappingChanged(Button button, Button.SelectedBindMapping previousSelectedBindMapping) {
+            for (ButtonListener listener : this) {
+                listener.selectedBindMappingChanged(button, previousSelectedBindMapping);
+            }
+        }
+
+        @Override
         public void stateKeyChanged(Button button, String previousStateKey) {
             for (ButtonListener listener : this) {
                 listener.stateKeyChanged(button, previousStateKey);
@@ -148,6 +181,13 @@
         }
 
         @Override
+        public void stateBindTypeChanged(Button button, BindType previousStateBindType) {
+            for (ButtonListener listener : this) {
+                listener.stateBindTypeChanged(button, previousStateBindType);
+            }
+        }
+
+        @Override
         public void stateBindMappingChanged(Button button, Button.StateBindMapping previousStateBindMapping) {
             for (ButtonListener listener : this) {
                 listener.stateBindMappingChanged(button, previousStateBindMapping);
@@ -199,7 +239,10 @@
     private ButtonGroup buttonGroup = null;
 
     private String selectedKey = null;
+    private BindType selectedBindType = BindType.BOTH;
+    private SelectedBindMapping selectedBindMapping = null;
     private String stateKey = null;
+    private BindType stateBindType = BindType.BOTH;
     private StateBindMapping stateBindMapping = null;
 
     private ButtonListenerList buttonListeners = new ButtonListenerList();
@@ -509,6 +552,32 @@
         }
     }
 
+    public BindType getSelectedBindType() {
+        return selectedBindType;
+    }
+
+    public void setSelectedBindType(BindType selectedBindType) {
+        BindType previousSelectedBindType = this.selectedBindType;
+
+        if (previousSelectedBindType != selectedBindType) {
+            this.selectedBindType = selectedBindType;
+            buttonListeners.selectedBindTypeChanged(this, previousSelectedBindType);
+        }
+    }
+
+    public SelectedBindMapping getSelectedBindMapping() {
+        return selectedBindMapping;
+    }
+
+    public void setSelectedBindMapping(SelectedBindMapping selectedBindMapping) {
+        SelectedBindMapping previousSelectedBindMapping = this.selectedBindMapping;
+
+        if (previousSelectedBindMapping != selectedBindMapping) {
+            this.selectedBindMapping = selectedBindMapping;
+            buttonListeners.selectedBindMappingChanged(this, previousSelectedBindMapping);
+        }
+    }
+
     public String getStateKey() {
         return stateKey;
     }
@@ -522,6 +591,19 @@
         }
     }
 
+    public BindType getStateBindType() {
+        return stateBindType;
+    }
+
+    public void setStateBindType(BindType stateBindType) {
+        BindType previousStateBindType = this.stateBindType;
+
+        if (previousStateBindType != stateBindType) {
+            this.stateBindType = stateBindType;
+            buttonListeners.stateBindTypeChanged(this, previousStateBindType);
+        }
+    }
+
     public StateBindMapping getStateBindMapping() {
         return stateBindMapping;
     }
@@ -537,55 +619,68 @@
 
     @Override
     public void load(Dictionary<String, ?> context) {
-        if (selectedKey != null
-            && JSONSerializer.containsKey(context, selectedKey)) {
-            Object value = JSONSerializer.get(context, selectedKey);
+        if (toggleButton) {
+            if (triState) {
+                // Bind using state key
+                if (stateKey != null
+                    && stateBindType != BindType.STORE
+                    && JSONSerializer.containsKey(context, stateKey)) {
+                    Object value = JSONSerializer.get(context, stateKey);
+
+                    State state = State.UNSELECTED;
+                    if (value instanceof State) {
+                        state = (State)value;
+                    } else if (stateBindMapping == null) {
+                        if (value != null) {
+                            state = State.valueOf(value.toString().toUpperCase());
+                        }
+                    } else {
+                        state = stateBindMapping.toState(value);
+                    }
 
-            Boolean selected = false;
-            if (value instanceof Boolean) {
-                selected = (Boolean)value;
-            } else if (stateBindMapping == null) {
-                if (value != null) {
-                    selected = Boolean.valueOf(value.toString());
+                    setState(state);
                 }
             } else {
-                State state = stateBindMapping.toState(value);
-                selected = (state == State.SELECTED);
-            }
-
-            setSelected(selected);
-        }
-
-        if (stateKey != null
-            && JSONSerializer.containsKey(context, stateKey)) {
-            Object value = JSONSerializer.get(context, stateKey);
+                // Bind using selected key
+                if (selectedKey != null
+                    && selectedBindType != BindType.STORE
+                    && JSONSerializer.containsKey(context, selectedKey)) {
+                    Object value = JSONSerializer.get(context, selectedKey);
+
+                    boolean selected = false;
+                    if (value instanceof Boolean) {
+                        selected = (Boolean)value;
+                    } else if (selectedBindMapping == null) {
+                        if (value != null) {
+                            selected = Boolean.valueOf(value.toString());
+                        }
+                    } else {
+                        selected = selectedBindMapping.isSelected(value);
+                    }
 
-            State state = State.UNSELECTED;
-            if (value instanceof State) {
-                state = (State)value;
-            } else if (stateBindMapping == null) {
-                if (value != null) {
-                    state = State.valueOf(value.toString().toUpperCase());
+                    setSelected(selected);
                 }
-            } else {
-                state = stateBindMapping.toState(value);
             }
-
-            setState(state);
         }
     }
 
     @Override
     public void store(Dictionary<String, ?> context) {
-        if (isEnabled()) {
-            if (selectedKey != null) {
-                JSONSerializer.put(context, selectedKey, (stateBindMapping == null) ?
-                    isSelected() : stateBindMapping.valueOf(state));
-            }
-
-            if (stateKey != null) {
-                JSONSerializer.put(context, stateKey, (stateBindMapping == null) ?
-                    state : stateBindMapping.valueOf(state));
+        if (toggleButton) {
+            if (triState) {
+                // Bind using state key
+                if (stateKey != null
+                    && stateBindType != BindType.LOAD) {
+                    JSONSerializer.put(context, selectedKey, (stateBindMapping == null) ?
+                        isSelected() : stateBindMapping.valueOf(state));
+                }
+            } else {
+                // Bind using selected key
+                if (selectedKey != null
+                    && selectedBindType != BindType.LOAD) {
+                    JSONSerializer.put(context, stateKey, (stateBindMapping == null) ?
+                        state : stateBindMapping.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=919050&r1=919049&r2=919050&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonListener.java Thu Mar  4 16:25:49 2010
@@ -53,10 +53,22 @@
         }
 
         @Override
+        public void selectedBindTypeChanged(Button button, BindType previousSelectedBindType) {
+        }
+
+        @Override
+        public void selectedBindMappingChanged(Button button, Button.SelectedBindMapping previousSelectedBindMapping) {
+        }
+
+        @Override
         public void stateKeyChanged(Button button, String previousStateKey) {
         }
 
         @Override
+        public void stateBindTypeChanged(Button button, BindType previousStateBindType) {
+        }
+
+        @Override
         public void stateBindMappingChanged(Button button, Button.StateBindMapping previousStateBindMapping) {
         }
     }
@@ -116,6 +128,22 @@
     public void selectedKeyChanged(Button button, String previousSelectedKey);
 
     /**
+     * Called when a button's selected bind type has changed.
+     *
+     * @param button
+     * @param previousSelectedBindType
+     */
+    public void selectedBindTypeChanged(Button button, BindType previousSelectedBindType);
+
+    /**
+     * Called when a button's selected bind mapping has changed.
+     *
+     * @param button
+     * @param previousSelectedBindMapping
+     */
+    public void selectedBindMappingChanged(Button button, Button.SelectedBindMapping previousSelectedBindMapping);
+
+    /**
      * Called when a button's state key has changed.
      *
      * @param button
@@ -124,6 +152,14 @@
     public void stateKeyChanged(Button button, String previousStateKey);
 
     /**
+     * Called when a button's state bind type has changed.
+     *
+     * @param button
+     * @param previousStateBindType
+     */
+    public void stateBindTypeChanged(Button button, BindType previousStateBindType);
+
+    /**
      * Called when a button's bind mapping has changed.
      *
      * @param button

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=919050&r1=919049&r2=919050&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 Thu Mar  4 16:25:49 2010
@@ -17,6 +17,7 @@
 package org.apache.pivot.wtk.skin;
 
 import org.apache.pivot.wtk.Action;
+import org.apache.pivot.wtk.BindType;
 import org.apache.pivot.wtk.Button;
 import org.apache.pivot.wtk.ButtonGroup;
 import org.apache.pivot.wtk.ButtonListener;
@@ -119,11 +120,26 @@
     }
 
     @Override
+    public void selectedBindTypeChanged(Button button, BindType previousSelectedBindType) {
+        // No-op
+    }
+
+    @Override
+    public void selectedBindMappingChanged(Button button, Button.SelectedBindMapping previousSelectedBindMapping) {
+        // No-op
+    }
+
+    @Override
     public void stateKeyChanged(Button button, String previousStateKey) {
         // No-op
     }
 
     @Override
+    public void stateBindTypeChanged(Button button, BindType previousStateBindType) {
+        // No-op
+    }
+
+    @Override
     public void stateBindMappingChanged(Button button, Button.StateBindMapping previousStateBindMapping) {
         // No-op
     }