aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/ui/Button.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/itmill/toolkit/ui/Button.java')
-rw-r--r--src/com/itmill/toolkit/ui/Button.java581
1 files changed, 292 insertions, 289 deletions
diff --git a/src/com/itmill/toolkit/ui/Button.java b/src/com/itmill/toolkit/ui/Button.java
index 08a90527e3..b9daa511c2 100644
--- a/src/com/itmill/toolkit/ui/Button.java
+++ b/src/com/itmill/toolkit/ui/Button.java
@@ -46,294 +46,297 @@ import com.itmill.toolkit.terminal.PaintTarget;
*/
public class Button extends AbstractField {
- /* Private members ************************************************* */
-
- boolean switchMode = false;
-
- /**
- * Creates a new push button. The value of the push button is allways false
- * and they are immediate by default.
- *
- */
- public Button() {
- setSwitchMode(false);
- }
-
- /**
- * Creates a new push button.
- *
- * The value of the push button is allways false and they are immediate by
- * default.
- *
- * @param caption
- * the Button caption.
- */
- public Button(String caption) {
- setCaption(caption);
- setSwitchMode(false);
- }
-
- /**
- * Creates a new push button with click listener.
- *
- * @param caption
- * the Button caption.
- * @param listener
- * the Button click listener.
- */
- public Button(String caption, ClickListener listener) {
- this(caption);
- addListener(listener);
- }
-
- /**
- * Creates a new push button with a method listening button clicks. The
- * method must have either no parameters, or only one parameter of
- * Button.ClickEvent type.
- *
- * @param caption
- * the Button caption.
- * @param target
- * the Object having the method for listening button clicks.
- * @param methodName
- * the name of the method in target object, that receives button
- * click events.
- */
- public Button(String caption, Object target, String methodName) {
- this(caption);
- addListener(ClickEvent.class, target, methodName);
- }
-
- /**
- * Creates a new switch button with initial value.
- *
- * @param state
- * the Initial state of the switch-button.
- * @param initialState
- */
- public Button(String caption, boolean initialState) {
- setCaption(caption);
- setValue(new Boolean(initialState));
- setSwitchMode(true);
- }
-
- /**
- * Creates a new switch button that is connected to a boolean property.
- *
- * @param state
- * the Initial state of the switch-button.
- * @param dataSource
- */
- public Button(String caption, Property dataSource) {
- setCaption(caption);
- setSwitchMode(true);
- setPropertyDataSource(dataSource);
- }
-
- /**
- * Gets component UIDL tag.
- *
- * @return the Component UIDL tag as string.
- */
- public String getTag() {
- return "button";
- }
-
- /**
- * Paints the content of this component.
- *
- * @param event
- * the PaintEvent.
- * @throws IOException
- * if the writing failed due to input/output error.
- * @throws PaintException
- * if the paint operation failed.
- */
- public void paintContent(PaintTarget target) throws PaintException {
- super.paintContent(target);
-
- if (isSwitchMode())
- target.addAttribute("type", "switch");
- boolean state;
- try {
- state = ((Boolean) getValue()).booleanValue();
- } catch (NullPointerException e) {
- state = false;
- }
- target.addVariable(this, "state", state);
-
- }
-
- /**
- * Invoked when the value of a variable has changed. Button listeners are
- * notified if the button is clicked.
- *
- * @param source
- * @param variables
- */
- public void changeVariables(Object source, Map variables) {
- if (variables.containsKey("state")) {
- // Gets the new and old button states
- Boolean newValue = (Boolean) variables.get("state");
- Boolean oldValue = (Boolean) getValue();
-
- if (isSwitchMode()) {
-
- // For switch button, the event is only sent if the
- // switch state is changed
- if (newValue != null && !newValue.equals(oldValue)
- && !isReadOnly()) {
- setValue(newValue);
- fireClick();
- }
- } else {
-
- // Only send click event if the button is pushed
- if (newValue.booleanValue())
- fireClick();
-
- // If the button is true for some reason, release it
- if (oldValue.booleanValue())
- setValue(new Boolean(false));
- }
- }
- }
-
- /**
- * Checks if it is switchMode.
- *
- * @return <code>true</code> if it is in Switch Mode, otherwise
- * <code>false</code>.
- */
- public boolean isSwitchMode() {
- return switchMode;
- }
-
- /**
- * Sets the switchMode.
- *
- * @param switchMode
- * The switchMode to set.
- */
- public void setSwitchMode(boolean switchMode) {
- this.switchMode = switchMode;
- if (!switchMode) {
- setImmediate(true);
- setValue(new Boolean(false));
- }
- }
-
- /**
- * Sets immediate mode. Push buttons can not be set in non-immediate mode.
- *
- * @see com.itmill.toolkit.ui.AbstractComponent#setImmediate(boolean)
- */
- public void setImmediate(boolean immediate) {
- // Push buttons are allways immediate
- super.setImmediate(!isSwitchMode() || immediate);
- }
-
- /**
- * The type of the button as a property.
- *
- * @see com.itmill.toolkit.data.Property#getType()
- */
- public Class getType() {
- return Boolean.class;
- }
-
- /* Click event ************************************************ */
-
- private static final Method BUTTON_CLICK_METHOD;
- static {
- try {
- BUTTON_CLICK_METHOD = ClickListener.class.getDeclaredMethod(
- "buttonClick", new Class[] { ClickEvent.class });
- } catch (java.lang.NoSuchMethodException e) {
- // This should never happen
- throw new java.lang.RuntimeException();
- }
- }
-
- /**
- * Click event. This event is thrown, when the button is clicked.
- *
- * @author IT Mill Ltd.
- * @version
- * @VERSION@
- * @since 3.0
- */
- public class ClickEvent extends Component.Event {
-
- /**
- * Serial generated by eclipse.
- */
- private static final long serialVersionUID = 3546647602931118393L;
-
- /**
- * New instance of text change event.
- *
- * @param source
- * the Source of the event.
- */
- public ClickEvent(Component source) {
- super(source);
- }
-
- /**
- * Gets the Button where the event occurred.
- *
- * @return the Source of the event.
- */
- public Button getButton() {
- return (Button) getSource();
- }
- }
-
- /**
- * Button click listener
- *
- * @author IT Mill Ltd.
- * @version
- * @VERSION@
- * @since 3.0
- */
- public interface ClickListener {
-
- /**
- * Button has been pressed.
- *
- * @param event
- * Button click event.
- */
- public void buttonClick(ClickEvent event);
- }
-
- /**
- * Adds the button click listener.
- *
- * @param listener
- * the Listener to be added.
- */
- public void addListener(ClickListener listener) {
- addListener(ClickEvent.class, listener, BUTTON_CLICK_METHOD);
- }
-
- /**
- * Removes the button click listener.
- *
- * @param listener
- * the Listener to be removed.
- */
- public void removeListener(ClickListener listener) {
- removeListener(ClickEvent.class, listener, BUTTON_CLICK_METHOD);
- }
-
- /**
- * Emits the options change event.
- */
- protected void fireClick() {
- fireEvent(new Button.ClickEvent(this));
- }
+ /* Private members ************************************************* */
+
+ boolean switchMode = false;
+
+ /**
+ * Creates a new push button. The value of the push button is allways false
+ * and they are immediate by default.
+ *
+ */
+ public Button() {
+ setSwitchMode(false);
+ }
+
+ /**
+ * Creates a new push button.
+ *
+ * The value of the push button is allways false and they are immediate by
+ * default.
+ *
+ * @param caption
+ * the Button caption.
+ */
+ public Button(String caption) {
+ setCaption(caption);
+ setSwitchMode(false);
+ }
+
+ /**
+ * Creates a new push button with click listener.
+ *
+ * @param caption
+ * the Button caption.
+ * @param listener
+ * the Button click listener.
+ */
+ public Button(String caption, ClickListener listener) {
+ this(caption);
+ addListener(listener);
+ }
+
+ /**
+ * Creates a new push button with a method listening button clicks. The
+ * method must have either no parameters, or only one parameter of
+ * Button.ClickEvent type.
+ *
+ * @param caption
+ * the Button caption.
+ * @param target
+ * the Object having the method for listening button clicks.
+ * @param methodName
+ * the name of the method in target object, that receives
+ * button click events.
+ */
+ public Button(String caption, Object target, String methodName) {
+ this(caption);
+ addListener(ClickEvent.class, target, methodName);
+ }
+
+ /**
+ * Creates a new switch button with initial value.
+ *
+ * @param state
+ * the Initial state of the switch-button.
+ * @param initialState
+ */
+ public Button(String caption, boolean initialState) {
+ setCaption(caption);
+ setValue(new Boolean(initialState));
+ setSwitchMode(true);
+ }
+
+ /**
+ * Creates a new switch button that is connected to a boolean property.
+ *
+ * @param state
+ * the Initial state of the switch-button.
+ * @param dataSource
+ */
+ public Button(String caption, Property dataSource) {
+ setCaption(caption);
+ setSwitchMode(true);
+ setPropertyDataSource(dataSource);
+ }
+
+ /**
+ * Gets component UIDL tag.
+ *
+ * @return the Component UIDL tag as string.
+ */
+ public String getTag() {
+ return "button";
+ }
+
+ /**
+ * Paints the content of this component.
+ *
+ * @param event
+ * the PaintEvent.
+ * @throws IOException
+ * if the writing failed due to input/output error.
+ * @throws PaintException
+ * if the paint operation failed.
+ */
+ public void paintContent(PaintTarget target) throws PaintException {
+ super.paintContent(target);
+
+ if (isSwitchMode()) {
+ target.addAttribute("type", "switch");
+ }
+ boolean state;
+ try {
+ state = ((Boolean) getValue()).booleanValue();
+ } catch (NullPointerException e) {
+ state = false;
+ }
+ target.addVariable(this, "state", state);
+
+ }
+
+ /**
+ * Invoked when the value of a variable has changed. Button listeners are
+ * notified if the button is clicked.
+ *
+ * @param source
+ * @param variables
+ */
+ public void changeVariables(Object source, Map variables) {
+ if (variables.containsKey("state")) {
+ // Gets the new and old button states
+ Boolean newValue = (Boolean) variables.get("state");
+ Boolean oldValue = (Boolean) getValue();
+
+ if (isSwitchMode()) {
+
+ // For switch button, the event is only sent if the
+ // switch state is changed
+ if (newValue != null && !newValue.equals(oldValue)
+ && !isReadOnly()) {
+ setValue(newValue);
+ fireClick();
+ }
+ } else {
+
+ // Only send click event if the button is pushed
+ if (newValue.booleanValue()) {
+ fireClick();
+ }
+
+ // If the button is true for some reason, release it
+ if (oldValue.booleanValue()) {
+ setValue(new Boolean(false));
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks if it is switchMode.
+ *
+ * @return <code>true</code> if it is in Switch Mode, otherwise
+ * <code>false</code>.
+ */
+ public boolean isSwitchMode() {
+ return switchMode;
+ }
+
+ /**
+ * Sets the switchMode.
+ *
+ * @param switchMode
+ * The switchMode to set.
+ */
+ public void setSwitchMode(boolean switchMode) {
+ this.switchMode = switchMode;
+ if (!switchMode) {
+ setImmediate(true);
+ setValue(new Boolean(false));
+ }
+ }
+
+ /**
+ * Sets immediate mode. Push buttons can not be set in non-immediate mode.
+ *
+ * @see com.itmill.toolkit.ui.AbstractComponent#setImmediate(boolean)
+ */
+ public void setImmediate(boolean immediate) {
+ // Push buttons are allways immediate
+ super.setImmediate(!isSwitchMode() || immediate);
+ }
+
+ /**
+ * The type of the button as a property.
+ *
+ * @see com.itmill.toolkit.data.Property#getType()
+ */
+ public Class getType() {
+ return Boolean.class;
+ }
+
+ /* Click event ************************************************ */
+
+ private static final Method BUTTON_CLICK_METHOD;
+ static {
+ try {
+ BUTTON_CLICK_METHOD = ClickListener.class.getDeclaredMethod(
+ "buttonClick", new Class[] { ClickEvent.class });
+ } catch (java.lang.NoSuchMethodException e) {
+ // This should never happen
+ throw new java.lang.RuntimeException();
+ }
+ }
+
+ /**
+ * Click event. This event is thrown, when the button is clicked.
+ *
+ * @author IT Mill Ltd.
+ * @version
+ * @VERSION@
+ * @since 3.0
+ */
+ public class ClickEvent extends Component.Event {
+
+ /**
+ * Serial generated by eclipse.
+ */
+ private static final long serialVersionUID = 3546647602931118393L;
+
+ /**
+ * New instance of text change event.
+ *
+ * @param source
+ * the Source of the event.
+ */
+ public ClickEvent(Component source) {
+ super(source);
+ }
+
+ /**
+ * Gets the Button where the event occurred.
+ *
+ * @return the Source of the event.
+ */
+ public Button getButton() {
+ return (Button) getSource();
+ }
+ }
+
+ /**
+ * Button click listener
+ *
+ * @author IT Mill Ltd.
+ * @version
+ * @VERSION@
+ * @since 3.0
+ */
+ public interface ClickListener {
+
+ /**
+ * Button has been pressed.
+ *
+ * @param event
+ * Button click event.
+ */
+ public void buttonClick(ClickEvent event);
+ }
+
+ /**
+ * Adds the button click listener.
+ *
+ * @param listener
+ * the Listener to be added.
+ */
+ public void addListener(ClickListener listener) {
+ addListener(ClickEvent.class, listener, BUTTON_CLICK_METHOD);
+ }
+
+ /**
+ * Removes the button click listener.
+ *
+ * @param listener
+ * the Listener to be removed.
+ */
+ public void removeListener(ClickListener listener) {
+ removeListener(ClickEvent.class, listener, BUTTON_CLICK_METHOD);
+ }
+
+ /**
+ * Emits the options change event.
+ */
+ protected void fireClick() {
+ fireEvent(new Button.ClickEvent(this));
+ }
}