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);
}