Package bufferings.ktr.wjr.client.ui.widget

Source Code of bufferings.ktr.wjr.client.ui.widget.WjrAbstractButton

/*
* Copyright 2010 bufferings[at]gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package bufferings.ktr.wjr.client.ui.widget;

import static bufferings.ktr.wjr.client.ui.widget.JQueryUI.*;

import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Composite;

/**
* The button base with JQueryUI theme
*
* @author bufferings[at]gmail.com
*/
public abstract class WjrAbstractButton extends Composite implements
    HasClickHandlers {

  /**
   * Check if the key code is assigned or not.
   *
   * @param code
   *          The key code.
   * @return True if the key is assigned, false if not.
   */
  protected static boolean isKeyAssigned(int code) {
    switch (code) {
    case KeyCodes.KEY_ENTER:
      return true;
    default:
      return false;
    }
  }

  /**
   * Whether this button is disabled or not.
   */
  protected boolean disabled = false;

  /**
   * For controling key events.
   */
  protected boolean lastWasKeyDown;

  /**
   * Constructs the WjrAbstractButton.
   */
  public WjrAbstractButton() {
    sinkEvents(Event.ONMOUSEOVER | Event.ONMOUSEOUT | Event.KEYEVENTS);
  }

  /**
   * {@inheritDoc}
   */
  public void onBrowserEvent(Event event) {
    int eventType = DOM.eventGetType(event);

    switch (eventType) {
    case Event.ONMOUSEOVER:
      addStyleName(UI_STATE_HOVER);
      break;
    case Event.ONMOUSEOUT:
      removeStyleName(UI_STATE_HOVER);
      break;
    case Event.ONCLICK:
      if (disabled) {
        return;
      }
    }

    switch (eventType) {
    case Event.ONKEYDOWN:
    case Event.ONKEYPRESS:
    case Event.ONKEYUP:
      if (DOM.eventGetAltKey(event) || DOM.eventGetMetaKey(event)) {
        super.onBrowserEvent(event);
        return;
      }
    }
    switch (eventType) {
    case Event.ONKEYDOWN: {
      keyboardNavigation(event);
      lastWasKeyDown = true;
      break;
    }
    case Event.ONKEYPRESS: {
      if (!lastWasKeyDown) {
        keyboardNavigation(event);
      }
      lastWasKeyDown = false;
      break;
    }
    case Event.ONKEYUP: {
      lastWasKeyDown = false;
      break;
    }
    }

    switch (eventType) {
    case Event.ONKEYDOWN:
    case Event.ONKEYUP: {
      if (isKeyAssigned(DOM.eventGetKeyCode(event))) {
        DOM.eventCancelBubble(event, true);
        DOM.eventPreventDefault(event);
        return;
      }
    }
    }

    super.onBrowserEvent(event);
  }

  /**
   * Sets whether this is disabled or not.
   *
   * @param disabled
   *          Whether this is disabled or not.
   */
  public void setDisabled(boolean disabled) {
    this.disabled = disabled;
    setStyleName(this.getElement(), UI_STATE_DISABLED, disabled);
  }

  /**
   * Gets whether this is disabled or not.
   *
   * @return Whether this is disabled or not.
   */
  public boolean isDisabled() {
    return disabled;
  }

  /**
   * {@inheritDoc}
   */
  public HandlerRegistration addClickHandler(ClickHandler handler) {
    return addDomHandler(handler, ClickEvent.getType());
  }

  /**
   * Sets the id of this element.
   *
   * @param id
   *          id to set
   */
  public void setElemId(String id) {
    getElement().setId(id);
  }

  private void keyboardNavigation(Event event) {
    if (disabled) {
      return;
    }

    int code = DOM.eventGetKeyCode(event);
    switch (code) {
    case KeyCodes.KEY_ENTER: {
      NativeEvent nativeEvent =
        Document.get().createClickEvent(
          0,
          0,
          0,
          0,
          0,
          false,
          false,
          false,
          false);
      ClickEvent.fireNativeEvent(nativeEvent, this);
      break;
    }
    }
  }

}
TOP

Related Classes of bufferings.ktr.wjr.client.ui.widget.WjrAbstractButton

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.