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
}