blob: 3f89763d7858d8e0a218f06635a48388bef4dadc [file] [log] [blame]
/*
* 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.user.client.impl;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
/**
* Native implementation associated with {@link com.google.gwt.user.client.DOM}.
*/
public abstract class DOMImpl {
protected static boolean eventSystemIsInitialized;
/**
* Returns <code>true</code>if the object is an instance of EventListener and
* the object belongs to this module.
*/
protected static boolean isMyListener(Object object) {
/*
* The first test ensures the Object belongs to this module in web mode by
* ensuring this is not a JavaScriptObject. In web mode, foreign Java
* objects appear to be JavaScriptObject. See Cast.isJavaScriptObject().
*
* The second test then checks the exact type.
*
* TODO: make the generated code smaller!
*/
return !(object instanceof JavaScriptObject)
&& (object instanceof com.google.gwt.user.client.EventListener);
}
public native void eventCancelBubble(Event evt, boolean cancel) /*-{
evt.cancelBubble = cancel;
}-*/;
public abstract Element eventGetFromElement(Event evt);
public native boolean eventGetRepeat(Event evt) /*-{
return !!evt.repeat;
}-*/;
public abstract Element eventGetToElement(Event evt);
public final int eventGetTypeInt(Event evt) {
return eventGetTypeInt(evt.getType());
}
public native int eventGetTypeInt(String eventType) /*-{
switch (eventType) {
case "blur": return 0x01000;
case "change": return 0x00400;
case "click": return 0x00001;
case "dblclick": return 0x00002;
case "focus": return 0x00800;
case "keydown": return 0x00080;
case "keypress": return 0x00100;
case "keyup": return 0x00200;
case "load": return 0x08000;
case "losecapture": return 0x02000;
case "mousedown": return 0x00004;
case "mousemove": return 0x00040;
case "mouseout": return 0x00020;
case "mouseover": return 0x00010;
case "mouseup": return 0x00008;
case "scroll": return 0x04000;
case "error": return 0x10000;
case "mousewheel": return 0x20000;
case "DOMMouseScroll": return 0x20000;
case "contextmenu": return 0x40000;
case "paste": return 0x80000;
default: return -1;
}
}-*/;
public native void eventSetKeyCode(Event evt, char key) /*-{
evt.keyCode = key;
}-*/;
public abstract Element getChild(Element elem, int index);
public abstract int getChildCount(Element elem);
public abstract int getChildIndex(Element parent, Element child);
public native EventListener getEventListener(Element elem) /*-{
return elem.__listener;
}-*/;
public native int getEventsSunk(Element elem) /*-{
return elem.__eventBits || 0;
}-*/;
public abstract void insertChild(Element parent, Element child, int index);
public void maybeInitializeEventSystem() {
if (!eventSystemIsInitialized) {
initEventSystem();
eventSystemIsInitialized = true;
}
}
public abstract void releaseCapture(Element elem);
public abstract void setCapture(Element elem);
public native void setEventListener(Element elem, EventListener listener) /*-{
elem.__listener = listener;
}-*/;
public abstract void sinkEvents(Element elem, int eventBits);
/**
* Initializes the event dispatch system.
*/
protected abstract void initEventSystem();
}