summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur.signell@itmill.com>2009-11-25 18:45:15 +0000
committerArtur Signell <artur.signell@itmill.com>2009-11-25 18:45:15 +0000
commit64a18bebab112db175996be19f60e5ae5e174395 (patch)
treeb375d846496fd40ff0e4ca6ef3bf2342c0a3f674
parentd03292c6bb40b2e2388e554c84e8e83ef73520ad (diff)
downloadvaadin-framework-64a18bebab112db175996be19f60e5ae5e174395.tar.gz
vaadin-framework-64a18bebab112db175996be19f60e5ae5e174395.zip
Separated client side listeners to a ClickEventHandler class
svn changeset:10042/svn branch:event-framework-3234
-rw-r--r--src/TestListeners.java82
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java126
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java36
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayout.java66
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VEmbedded.java59
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java85
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VOrderedLayout.java66
-rw-r--r--src/com/vaadin/ui/AbsoluteLayout.java8
-rw-r--r--src/com/vaadin/ui/AbstractOrderedLayout.java8
-rw-r--r--src/com/vaadin/ui/Embedded.java6
-rw-r--r--src/com/vaadin/ui/GridLayout.java9
11 files changed, 386 insertions, 165 deletions
diff --git a/src/TestListeners.java b/src/TestListeners.java
index 1c415bd0aa..9650c2269a 100644
--- a/src/TestListeners.java
+++ b/src/TestListeners.java
@@ -9,10 +9,14 @@ import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.event.MouseEvents.ClickListener;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Component;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
public class TestListeners extends Application implements LayoutClickListener,
@@ -22,7 +26,8 @@ public class TestListeners extends Application implements LayoutClickListener,
public void init() {
Window w = new Window("main window");
setMainWindow(w);
-
+ HorizontalLayout hl = new HorizontalLayout();
+ w.setContent(hl);
// Panel p = new Panel("My panel");
// p.addListener(new ClickListener() {
//
@@ -37,7 +42,7 @@ public class TestListeners extends Application implements LayoutClickListener,
// }
// VerticalLayout vl = new VerticalLayout();
- AbsoluteLayout al = new AbsoluteLayout();
+ final AbsoluteLayout al = new AbsoluteLayout();
al.setWidth("200px");
al.setHeight("200px");
al.addComponent(new TextField("This is its caption",
@@ -45,15 +50,18 @@ public class TestListeners extends Application implements LayoutClickListener,
al.addComponent(new TextField("Antoerh caption",
"This is another textfield"),
"top: 120px; left: 0px; width: 100px;");
- al.addListener(new LayoutClickListener() {
+
+ final LayoutClickListener lcl = new LayoutClickListener() {
public void layoutClick(LayoutClickEvent event) {
- System.out.println("Click on " + event.getChildComponent());
+ System.out.println("AL: Click on " + event.getChildComponent());
+ // al.removeListener(this);
}
- });
+ };
+ al.addListener(lcl);
- GridLayout vl = new GridLayout();
+ final GridLayout vl = new GridLayout();
vl.addComponent(al);
vl.setSpacing(true);
for (int i = 0; i < 10; i++) {
@@ -99,12 +107,69 @@ public class TestListeners extends Application implements LayoutClickListener,
public void layoutClick(LayoutClickEvent event) {
TestListeners.this.layoutClick(event);
-
+ vl.removeListener(this);
}
});
vl.setMargin(true);
- w.setContent(vl);
+ hl.addComponent(vl);
+ hl.addComponent(createClickableGridLayout());
+ hl.addComponent(createClickableVerticalLayout());
+ }
+
+ private Layout createClickableGridLayout() {
+
+ GridLayout gl = new GridLayout(3, 3);
+ addContent(gl, 5);
+
+ gl.addListener(new LayoutClickListener() {
+
+ public void layoutClick(LayoutClickEvent event) {
+ getMainWindow().showNotification(
+ "GL-click on " + event.getChildComponent());
+
+ }
+ });
+
+ return wrap(gl, "Clickable GridLayout");
+ }
+
+ private Layout createClickableVerticalLayout() {
+
+ VerticalLayout gl = new VerticalLayout();
+ addContent(gl, 5);
+
+ gl.addListener(new LayoutClickListener() {
+
+ public void layoutClick(LayoutClickEvent event) {
+ getMainWindow().showNotification(
+ "VL-click on " + event.getChildComponent());
+
+ }
+ });
+
+ return wrap(gl, "Clickable VerticalLayout");
+ }
+
+ private void addContent(Layout gl, int nr) {
+ for (int i = 1; i < nr; i++) {
+ Label l = new Label("This is label " + i);
+ l.setWidth(null);
+ gl.addComponent(l);
+ }
+ for (int i = nr; i < nr * 2; i++) {
+ gl.addComponent(new TextField("This is tf" + i, "this is tf " + i));
+ }
+ }
+
+ private Layout wrap(Component c, String caption) {
+ VerticalLayout vl = new VerticalLayout();
+ Label l = new Label(caption);
+ l.setWidth(null);
+ vl.addComponent(l);
+ vl.addComponent(c);
+
+ return vl;
}
public void layoutClick(LayoutClickEvent event) {
@@ -114,7 +179,6 @@ public class TestListeners extends Application implements LayoutClickListener,
getMainWindow().showNotification(
"Clicked on " + event.getChildComponent() + "!");
// getMainWindow().removeComponent(event.getChildComponent());
-
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java
new file mode 100644
index 0000000000..aae416ba6a
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java
@@ -0,0 +1,126 @@
+package com.vaadin.terminal.gwt.client.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.ContextMenuEvent;
+import com.google.gwt.event.dom.client.ContextMenuHandler;
+import com.google.gwt.event.dom.client.DomEvent;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
+import com.google.gwt.event.dom.client.MouseUpEvent;
+import com.google.gwt.event.dom.client.MouseUpHandler;
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.terminal.gwt.client.Paintable;
+
+abstract class ClickEventHandler implements ClickHandler, DoubleClickHandler,
+ ContextMenuHandler, MouseUpHandler {
+
+ private HandlerRegistration clickHandlerRegistration;
+ private HandlerRegistration doubleClickHandlerRegistration;
+ private HandlerRegistration mouseUpHandlerRegistration;
+ private HandlerRegistration contextMenuHandlerRegistration;
+
+ protected String clickEventIdentifier;
+ protected Paintable paintable;
+
+ ClickEventHandler(Paintable paintable, String clickEventIdentifier) {
+ this.paintable = paintable;
+ this.clickEventIdentifier = clickEventIdentifier;
+ }
+
+ public void handleHandlerRegistration() {
+ // Handle registering/unregistering of click handler depending on if
+ // server side listeners have been added or removed.
+ if (hasEventListener()) {
+ if (clickHandlerRegistration == null) {
+ clickHandlerRegistration = registerHandler(this, ClickEvent
+ .getType());
+ mouseUpHandlerRegistration = registerHandler(this, MouseUpEvent
+ .getType());
+ contextMenuHandlerRegistration = registerHandler(this,
+ ContextMenuEvent.getType());
+ doubleClickHandlerRegistration = registerHandler(this,
+ DoubleClickEvent.getType());
+ }
+ } else {
+ if (clickHandlerRegistration != null) {
+ // Remove existing handlers
+ clickHandlerRegistration.removeHandler();
+ doubleClickHandlerRegistration.removeHandler();
+ mouseUpHandlerRegistration.removeHandler();
+ contextMenuHandlerRegistration.removeHandler();
+
+ contextMenuHandlerRegistration = null;
+ mouseUpHandlerRegistration = null;
+ doubleClickHandlerRegistration = null;
+ clickHandlerRegistration = null;
+
+ }
+ }
+
+ }
+
+ protected abstract <H extends EventHandler> HandlerRegistration registerHandler(
+ final H handler, DomEvent.Type<H> type);
+
+ public abstract ApplicationConnection getApplicationConnection();
+
+ public boolean hasEventListener() {
+ return getApplicationConnection().hasEventListeners(paintable,
+ clickEventIdentifier);
+ }
+
+ public void onClick(ClickEvent event) {
+ if (hasEventListener()) {
+ fireClick(event.getNativeEvent());
+ }
+ }
+
+ protected void fireClick(NativeEvent event) {
+ ApplicationConnection client = getApplicationConnection();
+ String pid = getApplicationConnection().getPid(paintable);
+
+ MouseEventDetails mouseDetails = new MouseEventDetails(event);
+
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("mouseDetails", mouseDetails.serialize());
+ client.updateVariable(pid, clickEventIdentifier, parameters, true);
+
+ }
+
+ public void onContextMenu(ContextMenuEvent event) {
+ if (hasEventListener()) {
+ // Prevent showing the browser's context menu when there is a right
+ // click listener.
+ event.preventDefault();
+ }
+
+ }
+
+ public void onMouseUp(MouseUpEvent event) {
+ // TODO For perfect accuracy we should check that a mousedown has
+ // occured on this element before this mouseup and that no mouseup
+ // has occured anywhere after that.
+ if (hasEventListener()) {
+ if (event.getNativeButton() != NativeEvent.BUTTON_LEFT) {
+ // "Click" with right or middle button
+ fireClick(event.getNativeEvent());
+
+ }
+ }
+ }
+
+ public void onDoubleClick(DoubleClickEvent event) {
+ if (hasEventListener()) {
+ fireClick(event.getNativeEvent());
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java
new file mode 100644
index 0000000000..c19d0b1c7d
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java
@@ -0,0 +1,36 @@
+package com.vaadin.terminal.gwt.client.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.user.client.Element;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.terminal.gwt.client.Paintable;
+
+abstract class LayoutClickEventHandler extends ClickEventHandler {
+
+ LayoutClickEventHandler(Paintable paintable, String clickEventIdentifier) {
+ super(paintable, clickEventIdentifier);
+ }
+
+ protected abstract Paintable getChildComponent(Element element);
+
+ @Override
+ protected void fireClick(NativeEvent event) {
+ ApplicationConnection client = getApplicationConnection();
+ String pid = getApplicationConnection().getPid(paintable);
+
+ MouseEventDetails mouseDetails = new MouseEventDetails(event);
+ Paintable childComponent = getChildComponent((Element) event
+ .getEventTarget().cast());
+
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("mouseDetails", mouseDetails.serialize());
+ parameters.put("component", childComponent);
+
+ client.updateVariable(pid, clickEventIdentifier, parameters, true);
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayout.java
index ff26e4b005..a83df137f4 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayout.java
@@ -10,8 +10,8 @@ import java.util.Map.Entry;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Style;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DomEvent.Type;
+import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
@@ -21,14 +21,12 @@ import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.Container;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.RenderSpace;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.VCaption;
-public class VAbsoluteLayout extends ComplexPanel implements Container,
- ClickHandler {
+public class VAbsoluteLayout extends ComplexPanel implements Container {
/** Tag name for widget creation */
public static final String TAGNAME = "absolutelayout";
@@ -54,6 +52,26 @@ public class VAbsoluteLayout extends ComplexPanel implements Container,
private boolean rendering;
+ private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler(
+ this, CLICK_EVENT_IDENTIFIER) {
+
+ @Override
+ public ApplicationConnection getApplicationConnection() {
+ return client;
+ }
+
+ @Override
+ protected Paintable getChildComponent(Element element) {
+ return getComponent(element);
+ }
+
+ @Override
+ protected <H extends EventHandler> HandlerRegistration registerHandler(
+ H handler, Type<H> type) {
+ return addDomHandler(handler, type);
+ }
+ };
+
public VAbsoluteLayout() {
setElement(Document.get().createDivElement());
setStyleName(CLASSNAME);
@@ -62,7 +80,6 @@ public class VAbsoluteLayout extends ComplexPanel implements Container,
canvas.getStyle().setProperty("overflow", "hidden");
marginElement.appendChild(canvas);
getElement().appendChild(marginElement);
- addDomHandler(this, ClickEvent.getType());
}
public RenderSpace getAllocatedSpace(Widget child) {
@@ -137,7 +154,7 @@ public class VAbsoluteLayout extends ComplexPanel implements Container,
return;
}
- handleHandlerRegistration();
+ clickEventHandler.handleHandlerRegistration();
HashSet<String> unrenderedPids = new HashSet<String>(
pidToComponentWrappper.keySet());
@@ -158,26 +175,6 @@ public class VAbsoluteLayout extends ComplexPanel implements Container,
rendering = false;
}
- private HandlerRegistration clickHandlerRegistration;
-
- private void handleHandlerRegistration() {
- // Handle registering/unregistering of click handler depending on if
- // server side listeners have been added or removed.
- if (client.hasEventListeners(this, CLICK_EVENT_IDENTIFIER)) {
- if (clickHandlerRegistration == null) {
- clickHandlerRegistration = addDomHandler(this, ClickEvent
- .getType());
- }
- } else {
- if (clickHandlerRegistration != null) {
- clickHandlerRegistration.removeHandler();
- clickHandlerRegistration = null;
-
- }
- }
-
- }
-
private AbsoluteWrapper getWrapper(ApplicationConnection client,
UIDL componentUIDL) {
AbsoluteWrapper wrapper = pidToComponentWrappper.get(componentUIDL
@@ -420,21 +417,8 @@ public class VAbsoluteLayout extends ComplexPanel implements Container,
}
}
- public void onClick(ClickEvent event) {
- // This is only called if there are click listeners registered on server
- // side
- Paintable childComponent = getChildComponent((Element) event
- .getNativeEvent().getEventTarget().cast());
- final MouseEventDetails details = new MouseEventDetails(event
- .getNativeEvent());
-
- Object[] parameters = new Object[] { details, childComponent };
-
- client.updateVariable(client.getPid(this), CLICK_EVENT_IDENTIFIER,
- parameters, true);
- }
- private Paintable getChildComponent(Element target) {
+ private Paintable getComponent(Element target) {
while (target != null && target != canvas) {
Paintable paintable = client.getPaintable(target);
if (paintable != null) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VEmbedded.java b/src/com/vaadin/terminal/gwt/client/ui/VEmbedded.java
index 2c00a68f92..adf8d7c354 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VEmbedded.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VEmbedded.java
@@ -11,24 +11,21 @@ import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.ObjectElement;
import com.google.gwt.dom.client.Style;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.MouseUpEvent;
-import com.google.gwt.event.dom.client.MouseUpHandler;
+import com.google.gwt.event.dom.client.DomEvent.Type;
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTML;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;
-public class VEmbedded extends HTML implements Paintable, ClickHandler,
- MouseUpHandler {
+public class VEmbedded extends HTML implements Paintable {
public static final String CLICK_EVENT_IDENTIFIER = "click";
private static String CLASSNAME = "v-embedded";
@@ -39,10 +36,24 @@ public class VEmbedded extends HTML implements Paintable, ClickHandler,
private ApplicationConnection client;
+ private ClickEventHandler clickEventHandler = new ClickEventHandler(this,
+ CLICK_EVENT_IDENTIFIER) {
+
+ @Override
+ public ApplicationConnection getApplicationConnection() {
+ return client;
+ }
+
+ @Override
+ protected <H extends EventHandler> HandlerRegistration registerHandler(
+ H handler, Type<H> type) {
+ return addDomHandler(handler, type);
+ }
+
+ };
+
public VEmbedded() {
setStyleName(CLASSNAME);
- addClickHandler(this);
- addMouseUpHandler(this);
}
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
@@ -53,6 +64,8 @@ public class VEmbedded extends HTML implements Paintable, ClickHandler,
boolean clearBrowserElement = true;
+ clickEventHandler.handleHandlerRegistration();
+
if (uidl.hasAttribute("type")) {
final String type = uidl.getStringAttribute("type");
if (type.equals("image")) {
@@ -227,8 +240,7 @@ public class VEmbedded extends HTML implements Paintable, ClickHandler,
protected void onDetach() {
if (BrowserInfo.get().isIE()) {
// Force browser to fire unload event when component is detached
- // from
- // the view (IE doesn't do this automatically)
+ // from the view (IE doesn't do this automatically)
if (browserElement != null) {
DOM.setElementAttribute(browserElement, "src",
"javascript:false");
@@ -247,29 +259,4 @@ public class VEmbedded extends HTML implements Paintable, ClickHandler,
client.handleTooltipEvent(event, this);
}
- private void fireClick(MouseEventDetails mouseDetails) {
- client.updateVariable(client.getPid(this), CLICK_EVENT_IDENTIFIER,
- mouseDetails.serialize(), true);
- }
-
- public void onClick(ClickEvent event) {
- if (client.hasEventListeners(this, CLICK_EVENT_IDENTIFIER)) {
- MouseEventDetails mouseDetails = new MouseEventDetails(event
- .getNativeEvent());
- fireClick(mouseDetails);
- }
- }
-
- public void onMouseUp(MouseUpEvent event) {
- if (client.hasEventListeners(this, CLICK_EVENT_IDENTIFIER)) {
-
- MouseEventDetails mouseDetails = new MouseEventDetails(event
- .getNativeEvent());
- if (mouseDetails.getButton() != MouseEventDetails.BUTTON_LEFT) {
- // "Click" with right or middle button
- fireClick(mouseDetails);
-
- }
- }
- }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java
index 29f4c77769..8e658d0930 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java
@@ -14,8 +14,9 @@ import java.util.Set;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DomEvent.Type;
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.AbsolutePanel;
@@ -23,7 +24,6 @@ import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Container;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.RenderSpace;
import com.vaadin.terminal.gwt.client.StyleConstants;
@@ -32,8 +32,7 @@ import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.layout.CellBasedLayout;
import com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer;
-public class VGridLayout extends SimplePanel implements Paintable, Container,
- ClickHandler {
+public class VGridLayout extends SimplePanel implements Paintable, Container {
public static final String CLASSNAME = "v-gridlayout";
@@ -73,13 +72,31 @@ public class VGridLayout extends SimplePanel implements Paintable, Container,
private boolean sizeChangedDuringRendering = false;
+ private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler(
+ this, CLICK_EVENT_IDENTIFIER) {
+
+ @Override
+ public ApplicationConnection getApplicationConnection() {
+ return client;
+ }
+
+ @Override
+ protected Paintable getChildComponent(Element element) {
+ return getComponent(element);
+ }
+
+ @Override
+ protected <H extends EventHandler> HandlerRegistration registerHandler(
+ H handler, Type<H> type) {
+ return addDomHandler(handler, type);
+ }
+ };
+
public VGridLayout() {
super();
getElement().appendChild(margin);
setStyleName(CLASSNAME);
setWidget(canvas);
-
- addDomHandler(this, ClickEvent.getType());
}
@Override
@@ -95,6 +112,7 @@ public class VGridLayout extends SimplePanel implements Paintable, Container,
rendering = false;
return;
}
+ clickEventHandler.handleHandlerRegistration();
canvas.setWidth("0px");
@@ -204,6 +222,26 @@ public class VGridLayout extends SimplePanel implements Paintable, Container,
}
+ // private HandlerRegistration clickHandlerRegistration;
+ //
+ // private void handleHandlerRegistration() {
+ // // Handle registering/unregistering of click handler depending on if
+ // // server side listeners have been added or removed.
+ // if (client.hasEventListeners(this, CLICK_EVENT_IDENTIFIER)) {
+ // if (clickHandlerRegistration == null) {
+ // clickHandlerRegistration = addDomHandler(this, ClickEvent
+ // .getType());
+ // }
+ // } else {
+ // if (clickHandlerRegistration != null) {
+ // clickHandlerRegistration.removeHandler();
+ // clickHandlerRegistration = null;
+ //
+ // }
+ // }
+ //
+ // }
+
private static int[] cloneArray(int[] toBeCloned) {
int[] clone = new int[toBeCloned.length];
for (int i = 0; i < clone.length; i++) {
@@ -1031,22 +1069,23 @@ public class VGridLayout extends SimplePanel implements Paintable, Container,
return cell;
}
- public void onClick(ClickEvent event) {
- // This is only called if there are click listeners registered on server
- // side
-
- Paintable childComponent = getChildComponent((Element) event
- .getNativeEvent().getEventTarget().cast());
- final MouseEventDetails details = new MouseEventDetails(event
- .getNativeEvent());
-
- Object[] parameters = new Object[] { details, childComponent };
- client.updateVariable(client.getPid(this), CLICK_EVENT_IDENTIFIER,
- parameters, true);
-
- }
-
- private Paintable getChildComponent(Element element) {
+ // public void onClick(ClickEvent event) {
+ // // This is only called if there are click listeners registered on server
+ // // side
+ //
+ // Paintable childComponent = getChildComponent((Element) event
+ // .getNativeEvent().getEventTarget().cast());
+ // final MouseEventDetails details = new MouseEventDetails(event
+ // .getNativeEvent());
+ //
+ // Object[] parameters = new Object[] { details.serialize(),
+ // childComponent };
+ // client.updateVariable(client.getPid(this), CLICK_EVENT_IDENTIFIER,
+ // parameters, true);
+ //
+ // }
+
+ private Paintable getComponent(Element element) {
Element rootElement = getElement();
while (element != null && element != rootElement) {
Paintable paintable = client.getPaintable(element);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VOrderedLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VOrderedLayout.java
index 9c07d61196..e32c88859f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VOrderedLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VOrderedLayout.java
@@ -5,14 +5,13 @@ import java.util.Iterator;
import java.util.Set;
import com.google.gwt.core.client.JsArrayString;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DomEvent.Type;
+import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.RenderSpace;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -23,7 +22,7 @@ import com.vaadin.terminal.gwt.client.RenderInformation.Size;
import com.vaadin.terminal.gwt.client.ui.layout.CellBasedLayout;
import com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer;
-public class VOrderedLayout extends CellBasedLayout implements ClickHandler {
+public class VOrderedLayout extends CellBasedLayout {
public static final String CLASSNAME = "v-orderedlayout";
@@ -53,6 +52,26 @@ public class VOrderedLayout extends CellBasedLayout implements ClickHandler {
private ValueMap alignments;
+ private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler(
+ this, CLICK_EVENT_IDENTIFIER) {
+
+ @Override
+ public ApplicationConnection getApplicationConnection() {
+ return client;
+ }
+
+ @Override
+ protected Paintable getChildComponent(Element element) {
+ return getComponent(element);
+ }
+
+ @Override
+ protected <H extends EventHandler> HandlerRegistration registerHandler(
+ H handler, Type<H> type) {
+ return addDomHandler(handler, type);
+ }
+ };
+
public VOrderedLayout() {
this(CLASSNAME, ORIENTATION_VERTICAL);
allowOrientationUpdate = true;
@@ -81,7 +100,7 @@ public class VOrderedLayout extends CellBasedLayout implements ClickHandler {
return;
}
- handleHandlerRegistration();
+ clickEventHandler.handleHandlerRegistration();
if (allowOrientationUpdate) {
handleOrientationUpdate(uidl);
@@ -248,26 +267,6 @@ public class VOrderedLayout extends CellBasedLayout implements ClickHandler {
sizeHasChangedDuringRendering = false;
}
- private HandlerRegistration clickHandlerRegistration;
-
- private void handleHandlerRegistration() {
- // Handle registering/unregistering of click handler depending on if
- // server side listeners have been added or removed.
- if (client.hasEventListeners(this, CLICK_EVENT_IDENTIFIER)) {
- if (clickHandlerRegistration == null) {
- clickHandlerRegistration = addDomHandler(this, ClickEvent
- .getType());
- }
- } else {
- if (clickHandlerRegistration != null) {
- clickHandlerRegistration.removeHandler();
- clickHandlerRegistration = null;
-
- }
- }
-
- }
-
private void layoutSizeMightHaveChanged() {
Size oldSize = new Size(activeLayoutSize.getWidth(), activeLayoutSize
.getHeight());
@@ -943,28 +942,13 @@ public class VOrderedLayout extends CellBasedLayout implements ClickHandler {
}
}
- public void onClick(ClickEvent event) {
- // This is only called if there are click listeners registered on server
- // side
-
- Paintable childComponent = getChildComponent((Element) event
- .getNativeEvent().getEventTarget().cast());
- final MouseEventDetails details = new MouseEventDetails(event
- .getNativeEvent());
-
- Object[] parameters = new Object[] { details, childComponent };
-
- client.updateVariable(client.getPid(this), CLICK_EVENT_IDENTIFIER,
- parameters, true);
- }
-
/**
* Returns the child component which contains "element".
*
* @param element
* @return
*/
- private Paintable getChildComponent(Element element) {
+ private Paintable getComponent(Element element) {
Element rootElement = getElement();
while (element != null && element != rootElement) {
Paintable paintable = client.getPaintable(element);
diff --git a/src/com/vaadin/ui/AbsoluteLayout.java b/src/com/vaadin/ui/AbsoluteLayout.java
index b2f0a5be76..6461a64da2 100644
--- a/src/com/vaadin/ui/AbsoluteLayout.java
+++ b/src/com/vaadin/ui/AbsoluteLayout.java
@@ -362,15 +362,15 @@ public class AbsoluteLayout extends AbstractLayout {
public void changeVariables(Object source, Map variables) {
super.changeVariables(source, variables);
if (variables.containsKey(CLICK_EVENT)) {
- fireClick((Object[]) variables.get(CLICK_EVENT));
+ fireClick((Map<String, Object>) variables.get(CLICK_EVENT));
}
}
- private void fireClick(Object[] parameters) {
+ private void fireClick(Map<String, Object> parameters) {
MouseEventDetails mouseDetails = MouseEventDetails
- .deserialize((String) parameters[0]);
- Component childComponent = (Component) parameters[1];
+ .deserialize((String) parameters.get("mouseDetails"));
+ Component childComponent = (Component) parameters.get("component");
fireEvent(new LayoutClickEvent(this, mouseDetails, childComponent));
}
diff --git a/src/com/vaadin/ui/AbstractOrderedLayout.java b/src/com/vaadin/ui/AbstractOrderedLayout.java
index b3cfebc212..505009bf3d 100644
--- a/src/com/vaadin/ui/AbstractOrderedLayout.java
+++ b/src/com/vaadin/ui/AbstractOrderedLayout.java
@@ -317,15 +317,15 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
public void changeVariables(Object source, Map variables) {
super.changeVariables(source, variables);
if (variables.containsKey(CLICK_EVENT)) {
- fireClick((Object[]) variables.get(CLICK_EVENT));
+ fireClick((Map<String, Object>) variables.get(CLICK_EVENT));
}
}
- private void fireClick(Object[] parameters) {
+ private void fireClick(Map<String, Object> parameters) {
MouseEventDetails mouseDetails = MouseEventDetails
- .deserialize((String) parameters[0]);
- Component childComponent = (Component) parameters[1];
+ .deserialize((String) parameters.get("mouseDetails"));
+ Component childComponent = (Component) parameters.get("component");
fireEvent(new LayoutClickEvent(this, mouseDetails, childComponent));
}
diff --git a/src/com/vaadin/ui/Embedded.java b/src/com/vaadin/ui/Embedded.java
index c670de86a2..bd4003a231 100644
--- a/src/com/vaadin/ui/Embedded.java
+++ b/src/com/vaadin/ui/Embedded.java
@@ -433,14 +433,14 @@ public class Embedded extends AbstractComponent {
public void changeVariables(Object source, Map variables) {
super.changeVariables(source, variables);
if (variables.containsKey(CLICK_EVENT)) {
- fireClick(variables.get(CLICK_EVENT));
+ fireClick((Map<String, Object>) variables.get(CLICK_EVENT));
}
}
- private void fireClick(Object parameters) {
+ private void fireClick(Map<String, Object> parameters) {
MouseEventDetails mouseDetails = MouseEventDetails
- .deserialize((String) parameters);
+ .deserialize((String) parameters.get("mouseDetails"));
fireEvent(new ClickEvent(this, mouseDetails));
}
diff --git a/src/com/vaadin/ui/GridLayout.java b/src/com/vaadin/ui/GridLayout.java
index 530b5fc7dd..599c6a71a9 100644
--- a/src/com/vaadin/ui/GridLayout.java
+++ b/src/com/vaadin/ui/GridLayout.java
@@ -1307,16 +1307,17 @@ public class GridLayout extends AbstractLayout implements
@Override
public void changeVariables(Object source, Map variables) {
super.changeVariables(source, variables);
+
if (variables.containsKey(CLICK_EVENT)) {
- fireClick((Object[]) variables.get(CLICK_EVENT));
+ fireClick((Map<String, Object>) variables.get(CLICK_EVENT));
}
}
- private void fireClick(Object[] parameters) {
+ private void fireClick(Map<String, Object> parameters) {
MouseEventDetails mouseDetails = MouseEventDetails
- .deserialize((String) parameters[0]);
- Component childComponent = (Component) parameters[1];
+ .deserialize((String) parameters.get("mouseDetails"));
+ Component childComponent = (Component) parameters.get("component");
fireEvent(new LayoutClickEvent(this, mouseDetails, childComponent));
}