Change-Id: Ibbbffbfe2e8bcb763031ac277c2c36ce4eb4e3fctags/7.4.3
@@ -569,6 +569,7 @@ public class MultiSelectionRenderer<T> extends ComplexRenderer<Boolean> { | |||
InputElement checkbox = InputElement.as(cell.getElement() | |||
.getFirstChildElement()); | |||
checkbox.setChecked(data.booleanValue()); | |||
checkbox.setDisabled(grid.isEditorActive()); | |||
checkbox.setPropertyInt(LOGICAL_ROW_PROPERTY_INT, cell.getRowIndex()); | |||
} | |||
@@ -1157,6 +1157,7 @@ public class Grid<T> extends ResizeComposite implements | |||
+ "Grid editor"); | |||
grid.getEscalator().setScrollLocked(Direction.VERTICAL, | |||
false); | |||
updateSelectionCheckboxesAsNeeded(true); | |||
} | |||
} | |||
}; | |||
@@ -1256,6 +1257,16 @@ public class Grid<T> extends ResizeComposite implements | |||
null); | |||
handler.cancel(request); | |||
state = State.INACTIVE; | |||
updateSelectionCheckboxesAsNeeded(true); | |||
} | |||
private void updateSelectionCheckboxesAsNeeded(boolean isEnabled) { | |||
if (grid.getSelectionModel() instanceof Multi) { | |||
grid.refreshBody(); | |||
CheckBox checkBox = (CheckBox) grid.getDefaultHeaderRow() | |||
.getCell(grid.selectionColumn).getWidget(); | |||
checkBox.setEnabled(isEnabled); | |||
} | |||
} | |||
/** | |||
@@ -1282,6 +1293,7 @@ public class Grid<T> extends ResizeComposite implements | |||
EditorRequest<T> request = new EditorRequestImpl<T>(grid, rowIndex, | |||
saveRequestCallback); | |||
handler.save(request); | |||
updateSelectionCheckboxesAsNeeded(true); | |||
} | |||
/** | |||
@@ -1346,6 +1358,7 @@ public class Grid<T> extends ResizeComposite implements | |||
rowIndex, bindRequestCallback); | |||
handler.bind(request); | |||
grid.getEscalator().setScrollLocked(Direction.VERTICAL, true); | |||
updateSelectionCheckboxesAsNeeded(false); | |||
} | |||
} | |||
@@ -0,0 +1,35 @@ | |||
package com.vaadin.tests.components.grid; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Grid; | |||
public class GridEditorMultiselect extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
Grid grid = new Grid(); | |||
grid.addColumn("name"); | |||
grid.addColumn("age", Integer.class); | |||
for (int i = 0; i < 30; i++) { | |||
grid.addRow("name " + i, i); | |||
} | |||
grid.setEditorEnabled(true); | |||
grid.setSelectionMode(Grid.SelectionMode.MULTI); | |||
addComponent(grid); | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 17132; | |||
} | |||
@Override | |||
public String getDescription() { | |||
return "Grid Multiselect: Edit mode allows invalid selection"; | |||
} | |||
} |
@@ -0,0 +1,55 @@ | |||
package com.vaadin.tests.components.grid; | |||
import java.util.List; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import org.openqa.selenium.WebElement; | |||
import com.vaadin.testbench.By; | |||
import com.vaadin.testbench.elements.GridElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
public class GridEditorMultiselectTest extends MultiBrowserTest { | |||
@Test | |||
public void testSelectCheckboxesDisabled() { | |||
openTestURL(); | |||
GridElement grid = openEditor(); | |||
assertCheckboxesEnabled(grid, false); | |||
} | |||
@Test | |||
public void testSelectCheckboxesEnabledBackOnSave() { | |||
openTestURL(); | |||
GridElement grid = openEditor(); | |||
grid.getEditor().save(); | |||
assertCheckboxesEnabled(grid, true); | |||
} | |||
@Test | |||
public void testSelectCheckboxesEnabledBackOnCancel() { | |||
openTestURL(); | |||
GridElement grid = openEditor(); | |||
grid.getEditor().cancel(); | |||
assertCheckboxesEnabled(grid, true); | |||
} | |||
private GridElement openEditor() { | |||
GridElement grid = $(GridElement.class).first(); | |||
grid.getRow(0).doubleClick(); | |||
Assert.assertTrue("Grid editor should be displayed.", grid.getEditor() | |||
.isDisplayed()); | |||
return grid; | |||
} | |||
private void assertCheckboxesEnabled(GridElement grid, boolean isEnabled) { | |||
List<WebElement> checkboxes = grid.findElements(By | |||
.xpath("//input[@type='checkbox']")); | |||
for (WebElement checkbox : checkboxes) { | |||
Assert.assertEquals("Select checkboxes should be " | |||
+ (isEnabled ? "enabled" : "disabled"), isEnabled, | |||
checkbox.isEnabled()); | |||
} | |||
} | |||
} |