Browse Source

Add keyboard shortcut to save grid editor in buffered mode (#16842)

Change-Id: I4f542d166e15a63f12f8033aec4ef7b95578df71
tags/7.7.0.alpha1
Teemu Suo-Anttila 8 years ago
parent
commit
14efb0c7db

+ 9
- 1
client/src/com/vaadin/client/widget/grid/DefaultEditorEventHandler.java View File

@@ -38,7 +38,8 @@ public class DefaultEditorEventHandler<T> implements Editor.EventHandler<T> {
public static final int KEYCODE_OPEN = KeyCodes.KEY_ENTER;
public static final int KEYCODE_MOVE_VERTICAL = KeyCodes.KEY_ENTER;
public static final int KEYCODE_CLOSE = KeyCodes.KEY_ESCAPE;
private static final int KEYCODE_MOVE_HORIZONTAL = KeyCodes.KEY_TAB;
public static final int KEYCODE_MOVE_HORIZONTAL = KeyCodes.KEY_TAB;
public static final int KEYCODE_BUFFERED_SAVE = KeyCodes.KEY_ENTER;

private double lastTouchEventTime = 0;
private int lastTouchEventX = -1;
@@ -222,6 +223,13 @@ public class DefaultEditorEventHandler<T> implements Editor.EventHandler<T> {
+ (e.getShiftKey() ? -1 : +1));

return true;
} else if (e.getType().equals(BrowserEvents.KEYDOWN)
&& e.getKeyCode() == KEYCODE_BUFFERED_SAVE) {
triggerValueChangeEvent(event);

// Save and close.
event.getGrid().getEditor().save();
return true;
}

return false;

+ 63
- 21
uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorBufferedTest.java View File

@@ -29,6 +29,7 @@ import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;

import com.vaadin.shared.ui.grid.GridConstants;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.testbench.elements.GridElement.GridEditorElement;
import com.vaadin.testbench.elements.NotificationElement;
@@ -41,6 +42,52 @@ public class GridEditorBufferedTest extends GridEditorTest {
super.setUp();
}

@Test
public void testKeyboardSave() {
selectMenuPath(EDIT_ITEM_100);

WebElement textField = getEditorWidgets().get(0);

textField.click();
// without this, the click in the middle of the field might not be after
// the old text on some browsers
new Actions(getDriver()).sendKeys(Keys.END).perform();

textField.sendKeys(" changed");

// Save from keyboard
new Actions(getDriver()).sendKeys(Keys.ENTER).perform();

assertEditorClosed();
assertEquals("(100, 0) changed", getGridElement().getCell(100, 0)
.getText());
}

@Test
public void testKeyboardSaveWithInvalidEdition() {
makeInvalidEdition();

GridEditorElement editor = getGridElement().getEditor();
TestBenchElement field = editor.getField(7);

field.click();
new Actions(getDriver()).sendKeys(Keys.ENTER).perform();

assertEditorOpen();
assertEquals("Column 7: Could not convert value to Integer",
editor.getErrorMessage());
assertTrue("Field 7 should have been marked with an error after error",
editor.isFieldErrorMarked(7));

editor.cancel();

selectMenuPath(EDIT_ITEM_100);
assertFalse("Exception should not exist",
isElementPresent(NotificationElement.class));
assertEquals("There should be no editor error message", null,
getGridElement().getEditor().getErrorMessage());
}

@Test
public void testSave() {
selectMenuPath(EDIT_ITEM_100);
@@ -84,18 +131,9 @@ public class GridEditorBufferedTest extends GridEditorTest {

@Test
public void testInvalidEdition() {
selectMenuPath(EDIT_ITEM_5);
assertFalse(logContainsText("Exception occured, java.lang.IllegalStateException"));
makeInvalidEdition();

GridEditorElement editor = getGridElement().getEditor();

assertFalse(
"Field 7 should not have been marked with an error before error",
editor.isFieldErrorMarked(7));

WebElement intField = editor.getField(7);
intField.clear();
intField.sendKeys("banana phone");
editor.save();

assertEquals("Column 7: Could not convert value to Integer",
@@ -111,6 +149,21 @@ public class GridEditorBufferedTest extends GridEditorTest {
getGridElement().getEditor().getErrorMessage());
}

private void makeInvalidEdition() {
selectMenuPath(EDIT_ITEM_5);
assertFalse(logContainsText("Exception occured, java.lang.IllegalStateException"));

GridEditorElement editor = getGridElement().getEditor();

assertFalse(
"Field 7 should not have been marked with an error before error",
editor.isFieldErrorMarked(7));

WebElement intField = editor.getField(7);
intField.clear();
intField.sendKeys("banana phone");
}

@Test
public void testEditorInDisabledGrid() {
int originalScrollPos = getGridVerticalScrollPos();
@@ -231,17 +284,6 @@ public class GridEditorBufferedTest extends GridEditorTest {
getEditorWidgets().get(0).getAttribute("value"));
}

@Test
public void testKeyboardOpeningDisabledWhenOpen() {
selectMenuPath(EDIT_ITEM_5);

new Actions(getDriver()).click(getGridElement().getCell(4, 0))
.sendKeys(Keys.ENTER).perform();

assertEquals("Editor should still edit row 5", "(5, 0)",
getEditorWidgets().get(0).getAttribute("value"));
}

@Test
public void testProgrammaticOpeningDisabledWhenOpen() {
selectMenuPath(EDIT_ITEM_5);

Loading…
Cancel
Save