net.sf.mmm.client.ui.gwt.widgets.SimpleToggleButton.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.mmm.client.ui.gwt.widgets.SimpleToggleButton.java

Source

/* Copyright (c) The m-m-m Team, Licensed under the Apache License, Version 2.0
 * http://www.apache.org/licenses/LICENSE-2.0 */
package net.sf.mmm.client.ui.gwt.widgets;

import net.sf.mmm.client.ui.api.common.CssStyles;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasValue;

/**
 * This is a simple GWT toggle button. Unlike {@link com.google.gwt.user.client.ui.ToggleButton} it does not
 * contain internal hacks such as a text input. It is completely styled with CSS and needs no temporary hover
 * styles or different down/up icons.
 * 
 * @author Joerg Hohwiller (hohwille at users.sourceforge.net)
 * @since 1.0.0
 */
public class SimpleToggleButton extends Button implements HasValue<Boolean>, HasChangeHandlers {

    /** @see #addValueChangeHandler(ValueChangeHandler) */
    private HandlerRegistration changeHandlerRegistration;

    /** @see #getValue() */
    private boolean value;

    /**
     * The constructor.
     */
    public SimpleToggleButton() {

        super();
        addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                setValue(Boolean.valueOf(!SimpleToggleButton.this.value), true);
            }
        });
    }

    /**
     * The constructor.
     * 
     * @param text is the {@link #setText(String) text to set}.
     */
    public SimpleToggleButton(String text) {

        this();
        setText(text);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public HandlerRegistration addChangeHandler(ChangeHandler handler) {

        return addDomHandler(handler, ChangeEvent.getType());
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Boolean> handler) {

        if (this.changeHandlerRegistration == null) {
            this.changeHandlerRegistration = addChangeHandler(new ChangeHandler() {

                @Override
                public void onChange(ChangeEvent event) {

                    ValueChangeEvent.fire(SimpleToggleButton.this, getValue());
                }
            });
        }
        return addHandler(handler, ValueChangeEvent.getType());
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Boolean getValue() {

        return Boolean.valueOf(this.value);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setValue(Boolean value) {

        setValue(value, false);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setValue(Boolean newValue, boolean fireEvents) {

        if (newValue.booleanValue() == this.value) {
            return;
        }
        this.value = newValue.booleanValue();
        if (this.value) {
            addStyleName(CssStyles.PRESSED);
        } else {
            removeStyleName(CssStyles.PRESSED);
        }
        if (fireEvents) {
            ValueChangeEvent.fire(this, newValue);
        }
    }

}