Skip to content

Commit

Permalink
Select all checkbox when pressing space on the cell (#16685)
Browse files Browse the repository at this point in the history
Change-Id: I71ca4d7d390bdaf42cf3d9317564e6ad8f96cc25
  • Loading branch information
Artur- authored and tepi committed May 27, 2015
1 parent 7925e4c commit 7ff6cc3
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 25 deletions.
20 changes: 19 additions & 1 deletion client/src/com/vaadin/client/widgets/Grid.java
Expand Up @@ -2299,8 +2299,26 @@ public void onValueChange(ValueChangeEvent<Boolean> event) {
}
});
checkBox.setValue(selected);

selectionCell.setWidget(checkBox);
// Select all with space when "select all" cell is active
addHeaderKeyUpHandler(new HeaderKeyUpHandler() {
@Override
public void onKeyUp(GridKeyUpEvent event) {
if (event.getNativeKeyCode() != KeyCodes.KEY_SPACE) {
return;
}
HeaderRow targetHeaderRow = getHeader().getRow(
event.getFocusedCell().getRowIndex());
if (!targetHeaderRow.isDefault()) {
return;
}
if (event.getFocusedCell().getColumn() == SelectionColumn.this) {
// Send events to ensure row selection state is
// updated
checkBox.setValue(!checkBox.getValue(), true);
}
}
});

}
}
Expand Down
Expand Up @@ -87,4 +87,28 @@ protected void toggleColumnReorder() {
selectMenuPath("Component", "State", "Column Reordering");
}

protected boolean isRowSelected(int index) {
boolean selected = getGridElement().getRow(index).isSelected();
return selected;
}

protected void setSelectionModelMulti() {
setSelectionModel("multi");
}

protected void setSelectionModelSingle(boolean deselectAllowed) {
String mode = "single";
if (!deselectAllowed) {
mode += " (no deselect)";
}
setSelectionModel(mode);
}

protected void setSelectionModelNone() {
setSelectionModel("none");
}

protected void setSelectionModel(String model) {
selectMenuPath("Component", "State", "Selection mode", model);
}
}
Expand Up @@ -22,6 +22,7 @@
import java.util.Arrays;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.Keys;
import org.openqa.selenium.interactions.Actions;
Expand Down Expand Up @@ -84,6 +85,36 @@ public void testHeaderKeyEvents() throws IOException {
}
}

@Test
public void selectAllUsingKeyboard() {
openTestURL();

selectMenuPath("Component", "Header", "Prepend row");
selectMenuPath("Component", "Header", "Append row");
selectMenuPath("Component", "State", "Selection mode", "multi");

// Focus cell above select all checkbox
getGridElement().getHeaderCell(0, 0).click();
Assert.assertFalse(isRowSelected(1));
new Actions(getDriver()).sendKeys(" ").perform();
Assert.assertFalse(isRowSelected(1));

// Move down to select all checkbox cell
new Actions(getDriver()).sendKeys(Keys.ARROW_DOWN).perform();
Assert.assertFalse(isRowSelected(1));
new Actions(getDriver()).sendKeys(" ").perform(); // select all
Assert.assertTrue(isRowSelected(1));
new Actions(getDriver()).sendKeys(" ").perform(); // deselect all
Assert.assertFalse(isRowSelected(1));

// Move down to header below select all checkbox cell
new Actions(getDriver()).sendKeys(Keys.ARROW_DOWN).perform();
Assert.assertFalse(isRowSelected(1));
new Actions(getDriver()).sendKeys(" ").perform(); // deselect all
Assert.assertFalse(isRowSelected(1));

}

@Test
public void testFooterKeyEvents() throws IOException {
openTestURL();
Expand Down
Expand Up @@ -195,28 +195,4 @@ public void testDeselectNotAllowedKeyboardInput() {
isRowSelected(1));
}

private boolean isRowSelected(int index) {
boolean selected = getGridElement().getRow(index).isSelected();
return selected;
}

private void setSelectionModelMulti() {
setSelectionModel("multi");
}

private void setSelectionModelSingle(boolean deselectAllowed) {
String mode = "single";
if (!deselectAllowed) {
mode += " (no deselect)";
}
setSelectionModel(mode);
}

private void setSelectionModelNone() {
setSelectionModel("none");
}

private void setSelectionModel(String model) {
selectMenuPath("Component", "State", "Selection mode", model);
}
}

0 comments on commit 7ff6cc3

Please sign in to comment.