From: Artur Signell Date: Fri, 2 Mar 2012 08:58:00 +0000 (+0200) Subject: Separated construction of MouseEventDetails (depends on GWT classes) to X-Git-Tag: 7.0.0.alpha2~395 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c7ffbcb9cca8c299e9b7d300cc1e30213cb61d00;p=vaadin-framework.git Separated construction of MouseEventDetails (depends on GWT classes) to a separate class to avoid class loading problems on the server. --- diff --git a/src/com/vaadin/terminal/gwt/client/MouseEventDetails.java b/src/com/vaadin/terminal/gwt/client/MouseEventDetails.java index 57b83701fd..f5ff707eed 100644 --- a/src/com/vaadin/terminal/gwt/client/MouseEventDetails.java +++ b/src/com/vaadin/terminal/gwt/client/MouseEventDetails.java @@ -5,19 +5,18 @@ package com.vaadin.terminal.gwt.client; import java.io.Serializable; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.user.client.Event; - /** * Helper class to store and transfer mouse event details. */ public class MouseEventDetails implements Serializable { - public static final int BUTTON_LEFT = Event.BUTTON_LEFT; - public static final int BUTTON_MIDDLE = Event.BUTTON_MIDDLE; - public static final int BUTTON_RIGHT = Event.BUTTON_RIGHT; + // From com.google.gwt.dom.client.NativeEvent + public static final int BUTTON_LEFT = 1; + public static final int BUTTON_MIDDLE = 4; + public static final int BUTTON_RIGHT = 2; private static final char DELIM = ','; + // From com.google.gwt.user.client.Event + private static final int ONDBLCLICK = 0x00002; private int button; private int clientX; @@ -109,25 +108,6 @@ public class MouseEventDetails implements Serializable { public MouseEventDetails() { } - public MouseEventDetails(NativeEvent evt) { - this(evt, null); - } - - public MouseEventDetails(NativeEvent evt, Element relativeToElement) { - type = Event.getTypeInt(evt.getType()); - clientX = Util.getTouchOrMouseClientX(evt); - clientY = Util.getTouchOrMouseClientY(evt); - button = evt.getButton(); - altKey = evt.getAltKey(); - ctrlKey = evt.getCtrlKey(); - metaKey = evt.getMetaKey(); - shiftKey = evt.getShiftKey(); - if (relativeToElement != null) { - relativeX = getRelativeX(clientX, relativeToElement); - relativeY = getRelativeY(clientY, relativeToElement); - } - } - @Override public String toString() { return serialize(); @@ -173,17 +153,7 @@ public class MouseEventDetails implements Serializable { } public boolean isDoubleClick() { - return type == Event.ONDBLCLICK; - } - - private static int getRelativeX(int clientX, Element target) { - return clientX - target.getAbsoluteLeft() + target.getScrollLeft() - + target.getOwnerDocument().getScrollLeft(); - } - - private static int getRelativeY(int clientY, Element target) { - return clientY - target.getAbsoluteTop() + target.getScrollTop() - + target.getOwnerDocument().getScrollTop(); + return type == ONDBLCLICK; } } diff --git a/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java b/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java new file mode 100644 index 0000000000..88b65962ea --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java @@ -0,0 +1,44 @@ +package com.vaadin.terminal.gwt.client; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.user.client.Event; + +public class MouseEventDetailsBuilder { + + public static MouseEventDetails buildMouseEventDetails(NativeEvent evt) { + return buildMouseEventDetails(evt, null); + } + + public static MouseEventDetails buildMouseEventDetails(NativeEvent evt, + Element relativeToElement) { + MouseEventDetails mouseEventDetails = new MouseEventDetails(); + mouseEventDetails.setType(Event.getTypeInt(evt.getType())); + mouseEventDetails.setClientX(Util.getTouchOrMouseClientX(evt)); + mouseEventDetails.setClientY(Util.getTouchOrMouseClientY(evt)); + mouseEventDetails.setButton(evt.getButton()); + mouseEventDetails.setAltKey(evt.getAltKey()); + mouseEventDetails.setCtrlKey(evt.getCtrlKey()); + mouseEventDetails.setMetaKey(evt.getMetaKey()); + mouseEventDetails.setShiftKey(evt.getShiftKey()); + if (relativeToElement != null) { + mouseEventDetails.setRelativeX(getRelativeX( + mouseEventDetails.getClientX(), relativeToElement)); + mouseEventDetails.setRelativeY(getRelativeY( + mouseEventDetails.getClientY(), relativeToElement)); + } + return mouseEventDetails; + + } + + private static int getRelativeX(int clientX, Element target) { + return clientX - target.getAbsoluteLeft() + target.getScrollLeft() + + target.getOwnerDocument().getScrollLeft(); + } + + private static int getRelativeY(int clientY, Element target) { + return clientY - target.getAbsoluteTop() + target.getScrollTop() + + target.getOwnerDocument().getScrollTop(); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java index c263ec03e6..4029a56e99 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java +++ b/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java @@ -21,6 +21,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; public abstract class ClickEventHandler implements DoubleClickHandler, ContextMenuHandler, MouseUpHandler { @@ -85,8 +86,8 @@ public abstract class ClickEventHandler implements DoubleClickHandler, String pid = ConnectorMap.get(getApplicationConnection()) .getConnectorId(paintable); - MouseEventDetails mouseDetails = new MouseEventDetails(event, - getRelativeToElement()); + MouseEventDetails mouseDetails = MouseEventDetailsBuilder + .buildMouseEventDetails(event, getRelativeToElement()); Map parameters = new HashMap(); parameters.put("mouseDetails", mouseDetails.serialize()); diff --git a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java index cfcbb51042..d4abbeb985 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java +++ b/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java @@ -12,6 +12,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; public abstract class LayoutClickEventHandler extends ClickEventHandler { @@ -28,8 +29,8 @@ public abstract class LayoutClickEventHandler extends ClickEventHandler { String pid = ConnectorMap.get(getApplicationConnection()) .getConnectorId(paintable); - MouseEventDetails mouseDetails = new MouseEventDetails(event, - getRelativeToElement()); + MouseEventDetails mouseDetails = MouseEventDetailsBuilder + .buildMouseEventDetails(event, getRelativeToElement()); ComponentConnector childComponent = getChildComponent((Element) event .getEventTarget().cast()); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VButton.java b/src/com/vaadin/terminal/gwt/client/ui/VButton.java index f5093ee47b..9564d1b300 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VButton.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VButton.java @@ -23,6 +23,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.BrowserInfo; import com.vaadin.terminal.gwt.client.EventId; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.VTooltip; import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc; @@ -305,8 +306,8 @@ public class VButton extends FocusWidget implements ClickHandler, FocusHandler, } // Add mouse details - MouseEventDetails details = new MouseEventDetails( - event.getNativeEvent(), getElement()); + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event.getNativeEvent(), getElement()); buttonRpcProxy.click(details); clickPending = false; diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java b/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java index e1b3bf5fb4..d7be367f97 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java @@ -17,6 +17,7 @@ import com.google.gwt.user.client.Event; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.EventId; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.VTooltip; @@ -50,8 +51,9 @@ public class VCheckBox extends com.google.gwt.user.client.ui.CheckBox implements } // Add mouse details - MouseEventDetails details = new MouseEventDetails( - event.getNativeEvent(), getElement()); + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event.getNativeEvent(), + getElement()); client.updateVariable(id, "mousedetails", details.serialize(), false); client.updateVariable(id, VARIABLE_STATE, getValue(), immediate); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java b/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java index 779df5812b..d2d4ed4f79 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java @@ -26,7 +26,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.Connector; import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.RenderInformation; import com.vaadin.terminal.gwt.client.RenderInformation.Size; import com.vaadin.terminal.gwt.client.Util; @@ -118,8 +118,8 @@ public class VDragAndDropWrapper extends VCustomComponent implements VDragEvent dragEvent = VDragAndDropManager.get().startDrag( transferable, event, true); - transferable.setData("mouseDown", - new MouseEventDetails(event).serialize()); + transferable.setData("mouseDown", MouseEventDetailsBuilder + .buildMouseEventDetails(event).serialize()); if (dragStartMode == WRAPPER) { dragEvent.createDragImage(getElement(), true); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java b/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java index a6a50dc8c1..7866d326ab 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java @@ -19,6 +19,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.BrowserInfo; import com.vaadin.terminal.gwt.client.EventId; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.VTooltip; import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc; @@ -123,8 +124,8 @@ public class VNativeButton extends Button implements ClickHandler, } // Add mouse details - MouseEventDetails details = new MouseEventDetails( - event.getNativeEvent(), getElement()); + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event.getNativeEvent(), getElement()); buttonRpcProxy.click(details); clickPending = false; diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java index fe4919d8ec..a4764f2550 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java @@ -64,6 +64,7 @@ import com.vaadin.terminal.gwt.client.ComponentState; import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.Focusable; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.TooltipInfo; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; @@ -2320,7 +2321,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets, private void fireHeaderClickedEvent(Event event) { if (client.hasEventListeners(VScrollTable.this, HEADER_CLICK_EVENT_ID)) { - MouseEventDetails details = new MouseEventDetails(event); + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event); client.updateVariable(paintableId, "headerClickEvent", details.toString(), false); client.updateVariable(paintableId, "headerClickCID", cid, true); @@ -3377,7 +3379,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets, private void fireFooterClickedEvent(Event event) { if (client.hasEventListeners(VScrollTable.this, FOOTER_CLICK_EVENT_ID)) { - MouseEventDetails details = new MouseEventDetails(event); + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event); client.updateVariable(paintableId, "footerClickEvent", details.toString(), false); client.updateVariable(paintableId, "footerClickCID", cid, true); @@ -4731,7 +4734,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets, false); } - MouseEventDetails details = new MouseEventDetails(event); + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event); client.updateVariable(paintableId, "clickEvent", details.toString(), immediate); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTree.java b/src/com/vaadin/terminal/gwt/client/ui/VTree.java index 6641fe838e..90b45014a0 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTree.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTree.java @@ -42,6 +42,7 @@ import com.vaadin.terminal.gwt.client.BrowserInfo; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.VTooltip; @@ -752,7 +753,8 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, focus(); } } - final MouseEventDetails details = new MouseEventDetails(evt); + final MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(evt); ScheduledCommand command = new ScheduledCommand() { public void execute() { // Determine if we should send the event immediately to the diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java index f76f04b501..4955eea7c6 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java +++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java @@ -25,6 +25,7 @@ import com.google.gwt.user.client.ui.Widget; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.ValueMap; @@ -606,8 +607,9 @@ public class VDragAndDropManager { if (currentDrag.getCurrentGwtEvent() != null) { try { - MouseEventDetails mouseEventDetails = new MouseEventDetails( - currentDrag.getCurrentGwtEvent()); + MouseEventDetails mouseEventDetails = MouseEventDetailsBuilder + .buildMouseEventDetails(currentDrag + .getCurrentGwtEvent()); currentDrag.getDropDetails().put("mouseEvent", mouseEventDetails.serialize()); } catch (Exception e) {