From cd9eb7cd9945ef623c5169903e4f884395fcc821 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Tue, 27 May 2014 15:45:37 +0300 Subject: [PATCH] Provide RowContainer method to query if element is in container #13334 Change-Id: I640e8e9dfc0d68e18d72f904531277fe1e4f9414 --- .../com/vaadin/client/ui/grid/Escalator.java | 19 +++++++++++ .../src/com/vaadin/client/ui/grid/Grid.java | 32 ++++--------------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/client/src/com/vaadin/client/ui/grid/Escalator.java b/client/src/com/vaadin/client/ui/grid/Escalator.java index 95b93fc2b8..3b015fbc8e 100644 --- a/client/src/com/vaadin/client/ui/grid/Escalator.java +++ b/client/src/com/vaadin/client/ui/grid/Escalator.java @@ -4551,4 +4551,23 @@ public class Escalator extends Widget { public HeightMode getHeightMode() { return heightMode; } + + /** + * Returns the {@link RowContainer} which contains the element. + * + * @param element + * the element to check for + * @return the container the element is in or null if element + * is not present in any container. + */ + public RowContainer findRowContainer(Element element) { + if (getHeader().getElement().isOrHasChild(element)) { + return getHeader(); + } else if (getBody().getElement().isOrHasChild(element)) { + return getBody(); + } else if (getFooter().getElement().isOrHasChild(element)) { + return getFooter(); + } + return null; + } } diff --git a/client/src/com/vaadin/client/ui/grid/Grid.java b/client/src/com/vaadin/client/ui/grid/Grid.java index 25a0cd3f81..ebc67e294c 100644 --- a/client/src/com/vaadin/client/ui/grid/Grid.java +++ b/client/src/com/vaadin/client/ui/grid/Grid.java @@ -1591,32 +1591,14 @@ public class Grid extends Composite implements SubPartAware { EventTarget target = event.getEventTarget(); if (Element.is(target)) { Element e = Element.as(target); - - /* - * FIXME This is an ugly way to resolve if the event comes from the - * header, footer or body. But it is currently the only way since - * RowContainer doesn't provide the root element or a method to - * check if the element is inside the row container externally. - */ - Cell cell = escalator.getHeader().getCell(e); - Renderer renderer = null; - if (cell == null) { - cell = escalator.getBody().getCell(e); - if (cell == null) { - cell = escalator.getFooter().getCell(e); - if (cell != null) { - renderer = columns.get(cell.getColumn()) - .getFooterRenderer(); - } - } else { - renderer = columns.get(cell.getColumn()).getRenderer(); + RowContainer container = escalator.findRowContainer(e); + if (container != null) { + Cell cell = container.getCell(e); + Renderer renderer = columns.get(cell.getColumn()) + .getRenderer(); + if (renderer instanceof ComplexRenderer) { + ((ComplexRenderer) renderer).onBrowserEvent(cell, event); } - } else { - renderer = columns.get(cell.getColumn()).getHeaderRenderer(); - } - - if (renderer instanceof ComplexRenderer) { - ((ComplexRenderer) renderer).onBrowserEvent(cell, event); } } } -- 2.39.5