diff options
Diffstat (limited to 'src/com/vaadin/ui/AbstractLayout.java')
-rw-r--r-- | src/com/vaadin/ui/AbstractLayout.java | 49 |
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)); + } + } |