Browse Source

Separated construction of MouseEventDetails (depends on GWT classes) to

a separate class to avoid class loading problems on the server.
tags/7.0.0.alpha2
Artur Signell 12 years ago
parent
commit
c7ffbcb9cc

+ 7
- 37
src/com/vaadin/terminal/gwt/client/MouseEventDetails.java View File

@@ -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;
}

}

+ 44
- 0
src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java View File

@@ -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();
}

}

+ 3
- 2
src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java View File

@@ -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());

+ 3
- 2
src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java View File

@@ -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());


+ 3
- 2
src/com/vaadin/terminal/gwt/client/ui/VButton.java View File

@@ -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;

+ 4
- 2
src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java View File

@@ -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);

+ 3
- 3
src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java View File

@@ -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);

+ 3
- 2
src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java View File

@@ -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;

+ 7
- 3
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java View File

@@ -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);

+ 3
- 1
src/com/vaadin/terminal/gwt/client/ui/VTree.java View File

@@ -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

+ 4
- 2
src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java View File

@@ -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) {

Loading…
Cancel
Save