Package com.google.gwt.events.client

Source Code of com.google.gwt.events.client.EventImpl$WrappedEventListener

/*
* Copyright 2008 Google Inc.
*
* 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 com.google.gwt.events.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
import com.google.gwt.dom.client.Element;

class EventImpl {

  protected static class RemoverImpl implements EventListenerRemover {

    private native static void removeImpl(String type, JavaScriptObject source,
        JavaScriptObject fn) /*-{
      source.removeEventListener(type, fn, false);
    }-*/;

    private final String type;
    private final JavaScriptObject source;
    private final JavaScriptObject listener;

    public RemoverImpl(String type, JavaScriptObject source,
        JavaScriptObject listener) {
      this.type = type;
      this.source = source;
      this.listener = listener;
    }

    public void remove() {
      removeImpl(type, source, listener);
    }

    protected JavaScriptObject getListener() {
      return listener;
    }

    protected JavaScriptObject getSource() {
      return source;
    }

    protected String getType() {
      return type;
    }
  }
 
  protected static class WrappedEventListener implements EventListener {
    private EventListener delegate;
   
    protected WrappedEventListener(EventListener delegate) {
      this.delegate = delegate;
    }
   
    public void handleEvent(Event event) {
      UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler();
      if (handler != null) {
        handleEventAndCatch(event, handler);
      } else {
        delegate.handleEvent(event);
      }
    }
 
    private void handleEventAndCatch(Event event, UncaughtExceptionHandler handler) {
      try {
        delegate.handleEvent(event);
      } catch (Throwable e) {
        handler.onUncaughtException(e);
      }
    }
  }

  static EventImpl impl = GWT.create(EventImpl.class);

  public EventListenerRemover addEventListener(String type,
      JavaScriptObject source, EventListener listener) {
    return new RemoverImpl(type, source, addEventListenerImpl(type, source,
        new WrappedEventListener(listener)));
  }

  public native void cancelBubble(Event evt, boolean cancel) /*-{
    evt.cancelBubble = cancel;
  }-*/;

  public native void dispose(JavaScriptObject source) /*-{
    // Do nothing for browsers that don't leak circular refs.
  }-*/;

  public native boolean getAltKey(Event evt) /*-{
    return !!evt.altKey;
  }-*/;

  public native int getButton(Event evt) /*-{
    return evt.button || -1;
  }-*/;

  public native int getClientX(Event evt) /*-{
    return evt.clientX || -1;
  }-*/;

  public native int getClientY(Event evt) /*-{
    return evt.clientY || -1;
  }-*/;

  public native boolean getCtrlKey(Event evt) /*-{
    return !!evt.ctrlKey;
  }-*/;

  public native Element getCurrentTarget(Event evt) /*-{
    return evt.currentTarget;
  }-*/;

  public final native double getElapsedTime(Event evt) /*-{
    return evt.elapsedTime;
  }-*/;

  public native int getKeyCode(Event evt) /*-{
    // 'which' gives the right key value, except when it doesn't -- in which
    // case, keyCode gives the right value on all browsers.
    // If all else fails, return an error code
    return evt.which || evt.keyCode || -1;
  }-*/;

  public native boolean getMetaKey(Event evt) /*-{
    return !!evt.metaKey;
  }-*/;

  public native int getMouseWheelVelocityY(Event evt) /*-{
    return Math.round(evt.wheelDelta / 120);
  }-*/;

  public native String getPropertyName(Event evt) /*-{
    return evt.propertyName;
  }-*/;

  public native Element getRelatedTarget(Event evt) /*-{
    return evt.relatedTarget || null;
  }-*/;

  public native boolean getRepeat(Event evt) /*-{
    return !!evt.repeat;
  }-*/;

  public native int getScreenX(Event evt) /*-{
    return evt.screenX || -1;
  }-*/;

  public native int getScreenY(Event evt) /*-{
    return evt.screenY || -1;
  }-*/;

  public String getScrollWheelEventName() {
    return "mousewheel";
  }

  public native boolean getShiftKey(Event evt) /*-{
    return !!evt.shiftKey;
  }-*/;

  public native Element getTarget(Event evt) /*-{
    return evt.target || null;
  }-*/;
 
  public native String getType(Event evt) /*-{
    return evt.type;
  }-*/;
    
  public native void preventDefault(Event evt) /*-{
    evt.preventDefault();
  }-*/;
 
  private native JavaScriptObject addEventListenerImpl(String type,
      JavaScriptObject source, EventListener listener) /*-{
    var f = function(event) {
      listener.@com.google.gwt.events.client.EventListener::handleEvent(Lcom/google/gwt/events/client/Event;)(event);
    };

    source.addEventListener(type, f, false);
    return f;
  }-*/;
TOP

Related Classes of com.google.gwt.events.client.EventImpl$WrappedEventListener

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.