Change-Id: I2efd6d48502360d14d21456077d50b37fa8a4be6tags/7.4.0.beta1
private Grid<?> grid; | private Grid<?> grid; | ||||
protected Cell activeCell; | protected Cell activeCell; | ||||
protected GridSection activeSection; | |||||
private final Type<HANDLER> associatedType = new Type<HANDLER>( | private final Type<HANDLER> associatedType = new Type<HANDLER>( | ||||
getBrowserEventType(), this); | getBrowserEventType(), this); | ||||
@Override | @Override | ||||
protected void dispatch(HANDLER handler) { | protected void dispatch(HANDLER handler) { | ||||
activeCell = grid.activeCellHandler.getActiveCell(); | |||||
activeSection = GridSection.FOOTER; | |||||
final RowContainer container = grid.activeCellHandler.container; | |||||
if (container == grid.escalator.getHeader()) { | |||||
activeSection = GridSection.HEADER; | |||||
} else if (container == grid.escalator.getBody()) { | |||||
activeSection = GridSection.BODY; | |||||
EventTarget target = getNativeEvent().getEventTarget(); | |||||
if (Element.is(target) | |||||
&& Util.findWidget(Element.as(target), null) == grid) { | |||||
activeCell = grid.activeCellHandler.getActiveCell(); | |||||
GridSection section = GridSection.FOOTER; | |||||
final RowContainer container = grid.activeCellHandler.container; | |||||
if (container == grid.escalator.getHeader()) { | |||||
section = GridSection.HEADER; | |||||
} else if (container == grid.escalator.getBody()) { | |||||
section = GridSection.BODY; | |||||
} | |||||
doDispatch(handler, section); | |||||
} | } | ||||
} | } | ||||
protected abstract void doDispatch(HANDLER handler, GridSection seciton); | |||||
@Override | @Override | ||||
public Type<HANDLER> getAssociatedType() { | public Type<HANDLER> getAssociatedType() { | ||||
return associatedType; | return associatedType; |
} | } | ||||
@Override | @Override | ||||
protected void dispatch(GridKeyDownHandler handler) { | |||||
super.dispatch(handler); | |||||
if ((activeSection == GridSection.BODY && handler instanceof BodyKeyDownHandler) | |||||
|| (activeSection == GridSection.HEADER && handler instanceof HeaderKeyDownHandler) | |||||
|| (activeSection == GridSection.FOOTER && handler instanceof FooterKeyDownHandler)) { | |||||
protected void doDispatch(GridKeyDownHandler handler, GridSection section) { | |||||
if ((section == GridSection.BODY && handler instanceof BodyKeyDownHandler) | |||||
|| (section == GridSection.HEADER && handler instanceof HeaderKeyDownHandler) | |||||
|| (section == GridSection.FOOTER && handler instanceof FooterKeyDownHandler)) { | |||||
handler.onKeyDown(this); | handler.onKeyDown(this); | ||||
} | } | ||||
} | } |
} | } | ||||
@Override | @Override | ||||
protected void dispatch(GridKeyPressHandler handler) { | |||||
super.dispatch(handler); | |||||
if ((activeSection == GridSection.BODY && handler instanceof BodyKeyPressHandler) | |||||
|| (activeSection == GridSection.HEADER && handler instanceof HeaderKeyPressHandler) | |||||
|| (activeSection == GridSection.FOOTER && handler instanceof FooterKeyPressHandler)) { | |||||
protected void doDispatch(GridKeyPressHandler handler, GridSection section) { | |||||
if ((section == GridSection.BODY && handler instanceof BodyKeyPressHandler) | |||||
|| (section == GridSection.HEADER && handler instanceof HeaderKeyPressHandler) | |||||
|| (section == GridSection.FOOTER && handler instanceof FooterKeyPressHandler)) { | |||||
handler.onKeyPress(this); | handler.onKeyPress(this); | ||||
} | } | ||||
} | } |
} | } | ||||
@Override | @Override | ||||
protected void dispatch(GridKeyUpHandler handler) { | |||||
super.dispatch(handler); | |||||
if ((activeSection == GridSection.BODY && handler instanceof BodyKeyUpHandler) | |||||
|| (activeSection == GridSection.HEADER && handler instanceof HeaderKeyUpHandler) | |||||
|| (activeSection == GridSection.FOOTER && handler instanceof FooterKeyUpHandler)) { | |||||
protected void doDispatch(GridKeyUpHandler handler, GridSection section) { | |||||
if ((section == GridSection.BODY && handler instanceof BodyKeyUpHandler) | |||||
|| (section == GridSection.HEADER && handler instanceof HeaderKeyUpHandler) | |||||
|| (section == GridSection.FOOTER && handler instanceof FooterKeyUpHandler)) { | |||||
handler.onKeyUp(this); | handler.onKeyUp(this); | ||||
} | } | ||||
} | } |
import org.openqa.selenium.interactions.Actions; | import org.openqa.selenium.interactions.Actions; | ||||
import com.vaadin.testbench.By; | import com.vaadin.testbench.By; | ||||
import com.vaadin.tests.components.grid.GridElement.GridCellElement; | |||||
import com.vaadin.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest; | import com.vaadin.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest; | ||||
public class GridClientKeyEventsTest extends GridBasicClientFeaturesTest { | public class GridClientKeyEventsTest extends GridBasicClientFeaturesTest { | ||||
} | } | ||||
} | } | ||||
@Test | |||||
public void testNoKeyEventsFromWidget() { | |||||
openTestURL(); | |||||
selectMenuPath("Component", "Columns", "Column 2", "Header Type", | |||||
"Widget Header"); | |||||
GridCellElement header = getGridElement().getHeaderCell(0, 2); | |||||
header.findElement(By.tagName("button")).click(); | |||||
new Actions(getDriver()).sendKeys(Keys.ENTER).perform(); | |||||
for (int i = 0; i < 3; ++i) { | |||||
assertTrue("Header key event handler got called unexpectedly.", | |||||
findElements(By.className("v-label")).get(i * 3 + 1) | |||||
.getText().isEmpty()); | |||||
} | |||||
} | |||||
} | } |