summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/ui/AbstractLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/vaadin/ui/AbstractLayout.java')
-rw-r--r--src/com/vaadin/ui/AbstractLayout.java49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/com/vaadin/ui/AbstractLayout.java b/src/com/vaadin/ui/AbstractLayout.java
index 5cb698e688..d0cc549138 100644
--- a/src/com/vaadin/ui/AbstractLayout.java
+++ b/src/com/vaadin/ui/AbstractLayout.java
@@ -4,8 +4,14 @@
package com.vaadin.ui;
+import java.util.Map;
+
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.EventId;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.ui.Layout.MarginHandler;
/**
@@ -21,6 +27,8 @@ import com.vaadin.ui.Layout.MarginHandler;
public abstract class AbstractLayout extends AbstractComponentContainer
implements Layout, MarginHandler {
+ private static final String CLICK_EVENT = EventId.LAYOUT_CLICK;
+
protected MarginInfo margins = new MarginInfo(false);
/*
@@ -77,4 +85,45 @@ public abstract class AbstractLayout extends AbstractComponentContainer
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractComponent#changeVariables(java.lang.Object,
+ * java.util.Map)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void changeVariables(Object source, Map<String, Object> variables) {
+ super.changeVariables(source, variables);
+ // not all subclasses use these events
+ if (this instanceof LayoutClickNotifier
+ && variables.containsKey(CLICK_EVENT)) {
+ fireClick((Map<String, Object>) variables.get(CLICK_EVENT));
+ }
+
+ }
+
+ /**
+ * Fire a layout click event.
+ *
+ * Note that this method is only used by the subclasses that implement
+ * {@link LayoutClickNotifier}, and can be overridden for custom click event
+ * firing.
+ *
+ * @param parameters
+ * The parameters received from the client side implementation
+ */
+ protected void fireClick(Map<String, Object> parameters) {
+ MouseEventDetails mouseDetails = MouseEventDetails
+ .deSerialize((String) parameters.get("mouseDetails"));
+ Component clickedComponent = (Component) parameters.get("component");
+ Component childComponent = clickedComponent;
+ while (childComponent != null && childComponent.getParent() != this) {
+ childComponent = childComponent.getParent();
+ }
+
+ fireEvent(new LayoutClickEvent(this, mouseDetails, clickedComponent,
+ childComponent));
+ }
+
}