/* GNU LESSER GENERAL PUBLIC LICENSE Copyright (C) 2006 The XAMJ Project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Contact info: lobochief@users.sourceforge.net */ package org.lobobrowser.html.js; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import org.lobobrowser.js.AbstractScriptableDelegate; import org.lobobrowser.js.HideFromJS; import org.w3c.dom.Node; import org.w3c.dom.events.EventTarget; import org.w3c.dom.html.HTMLElement; public class Event extends AbstractScriptableDelegate implements org.w3c.dom.events.Event { private boolean cancelBubble; private HTMLElement fromElement, toElement; private int leafX, leafY; private boolean returnValue; private Node srcElement; private String type; private final java.awt.event.InputEvent inputEvent; private boolean propagationStopped = false; public Event(final String type, final Node srcElement, final java.awt.event.InputEvent mouseEvent, final int leafX, final int leafY) { this.type = type; this.srcElement = srcElement; this.leafX = leafX; this.leafY = leafY; this.inputEvent = mouseEvent; } public Event(final String type, final Node srcElement, final java.awt.event.KeyEvent keyEvent) { this.type = type; this.srcElement = srcElement; this.inputEvent = keyEvent; } public Event(final String type, final Node srcElement) { this.type = type; this.srcElement = srcElement; this.inputEvent = null; } public boolean getAltKey() { final InputEvent ie = this.inputEvent; return ie == null ? false : ie.isAltDown(); } public boolean getShiftKey() { final InputEvent ie = this.inputEvent; return ie == null ? false : ie.isShiftDown(); } public boolean getCtrlKey() { final InputEvent ie = this.inputEvent; return ie == null ? false : ie.isControlDown(); } public int getButton() { final InputEvent ie = this.inputEvent; if (ie instanceof MouseEvent) { // return ((MouseEvent) ie).getButton(); // range of button is 0 to N in DOM spec, but 1 to N in AWT return ((MouseEvent) ie).getButton() - 1; } else { return 0; } } public boolean isCancelBubble() { return cancelBubble; } public void setCancelBubble(final boolean cancelBubble) { System.out.println("Event.setCancelBubble()"); this.cancelBubble = cancelBubble; } public String getType() { return type; } public void setType(final String type) { this.type = type; } public int getClientX() { final InputEvent ie = this.inputEvent; if (ie instanceof MouseEvent) { return ((MouseEvent) ie).getX(); } else { return 0; } } public int getClientY() { final InputEvent ie = this.inputEvent; if (ie instanceof MouseEvent) { return ((MouseEvent) ie).getY(); } else { return 0; } } public int getKeyCode() { final InputEvent ie = this.inputEvent; if (ie instanceof KeyEvent) { return ((KeyEvent) ie).getKeyCode(); } else { return 0; } } // public int getOffsetX() { // // Despite advertising that it returns an element-relative offset, // // IE doesn't do this. // //TODO: Must be relative to top viewport. // return this.getClientX() - 2; // } // // public int getOffsetY() { // // Despite advertising that it returns an element-relative offset, // // IE doesn't do this. // //TODO: Must be relative to top viewport. // return this.getClientY() - 2; // } public boolean isReturnValue() { return returnValue; } public void setReturnValue(final boolean returnValue) { this.returnValue = returnValue; } public Node getSrcElement() { return srcElement; } public void setSrcElement(final HTMLElement srcElement) { this.srcElement = srcElement; } public HTMLElement getFromElement() { return fromElement; } public void setFromElement(final HTMLElement fromElement) { this.fromElement = fromElement; } public HTMLElement getToElement() { return toElement; } public void setToElement(final HTMLElement toElement) { this.toElement = toElement; } public int getLeafX() { return leafX; } public void setLeafX(final int leafX) { this.leafX = leafX; } public int getLeafY() { return leafY; } public void setLeafY(final int leafY) { this.leafY = leafY; } @Override public EventTarget getTarget() { System.out.println("TODO: Event.getTarget()"); // TODO: Target and source may not be always same. Need to add a constructor param for target. return (EventTarget) srcElement; } @Override public EventTarget getCurrentTarget() { System.out.println("TODO: Event.getCurrentTarget()"); return null; } private short currentPhase = 0; @Override public short getEventPhase() { System.out.println("Event.getEventPhase() : " + currentPhase); return currentPhase; } @HideFromJS public void setPhase(final short newPhase) { currentPhase = newPhase; } @Override public boolean getBubbles() { System.out.println("TODO: Event.getBubbles()"); return false; } @Override public boolean getCancelable() { System.out.println("TODO: Event.getCancelable()"); return false; } @Override public long getTimeStamp() { System.out.println("Event.getTimeStamp()"); return 0; } @Override public void stopPropagation() { propagationStopped = true; System.out.println("Event.stopPropagation()"); } // TODO: Hide from JS public boolean isPropagationStopped() { return propagationStopped; } @Override public void preventDefault() { System.out.println("TODO: Event.preventDefault()"); } @Override public void initEvent(final String eventTypeArg, final boolean canBubbleArg, final boolean cancelableArg) { System.out.println("TODO: Event.initEvent()"); } @Override public String toString() { return "Event [phase=" + currentPhase + ", type=" + type + ", leafX=" + leafX + ", leafY=" + leafY + ", srcElement=" + srcElement + "]"; } }