a separate class to avoid class loading problems on the server.tags/7.0.0.alpha2
@@ -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; | |||
} | |||
} |
@@ -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(); | |||
} | |||
} |
@@ -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<String, Object> parameters = new HashMap<String, Object>(); | |||
parameters.put("mouseDetails", mouseDetails.serialize()); |
@@ -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()); | |||
@@ -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; |
@@ -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); |
@@ -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); |
@@ -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; |
@@ -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); |
@@ -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 |
@@ -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) { |