diff options
3 files changed, 113 insertions, 1 deletions
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index 88a3195857..e5eebff879 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -3533,6 +3533,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, private final Footer footer = new Footer(this); private Object editedItemId = null; + private boolean editorActive = false; private FieldGroup editorFieldGroup = new CustomFieldGroup(); private CellStyleGenerator cellStyleGenerator; @@ -5691,7 +5692,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * @return true iff the editor is open */ public boolean isEditorActive() { - return editedItemId != null; + return editorActive; } private void checkColumnExists(Object propertyId) { @@ -5765,6 +5766,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, .getPropertyId()); } + editorActive = true; // Must ensure that all fields, recursively, are sent to the client // This is needed because the fields are hidden using isRendered for (Field<?> f : getEditorFields()) { @@ -5816,6 +5818,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, protected void doCancelEditor() { editedItemId = null; + editorActive = false; editorFieldGroup.discard(); editorFieldGroup.setItemDataSource(null); } @@ -5833,6 +5836,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, } editedItemId = null; + editorActive = false; editorFieldGroup = new CustomFieldGroup(); } diff --git a/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java new file mode 100644 index 0000000000..a9075a77d1 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java @@ -0,0 +1,46 @@ +package com.vaadin.tests.components.grid; + +import com.vaadin.data.util.IndexedContainer; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Grid; + +@SuppressWarnings("serial") +// @Push +public class ProgrammaticEditorControl extends AbstractTestUIWithLog { + + private Grid grid; + private IndexedContainer container = new IndexedContainer(); + + @Override + protected void setup(VaadinRequest request) { + container.addContainerProperty("name", String.class, null); + container.addItem("test").getItemProperty("name").setValue("test"); + grid = new Grid(); + grid.setContainerDataSource(container); + grid.setEditorEnabled(true); + addComponent(grid); + + Button button = new Button("Edit", new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + grid.editItem("test"); + } + }); + addComponent(button); + Button button2 = new Button("Cancel", new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + grid.cancelEditor(); + } + }); + addComponent(button2); + + } + +}
\ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java new file mode 100644 index 0000000000..811bd03a64 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java @@ -0,0 +1,62 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.grid; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.TextFieldElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class ProgrammaticEditorControlTest extends SingleBrowserTest { + + @Test + public void multipleOpenFromServerSide() { + openTestURL(); + GridElement grid = $(GridElement.class).first(); + ButtonElement editButton = $(ButtonElement.class).caption("Edit") + .first(); + ButtonElement cancelButton = $(ButtonElement.class).caption("Cancel") + .first(); + + editButton.click(); + assertEditorFieldContents(grid, "test"); + cancelButton.click(); + + assertEditorNotPresent(grid); + + editButton.click(); + assertEditorFieldContents(grid, "test"); + } + + private void assertEditorFieldContents(GridElement grid, String text) { + TextFieldElement editorField = wrap(TextFieldElement.class, grid + .getEditor().getField(0)); + Assert.assertEquals(text, editorField.getValue()); + } + + private void assertEditorNotPresent(GridElement grid) { + try { + grid.getEditor(); + Assert.fail("Editor should not be present"); + } catch (Exception e) { + + } + } + +}
\ No newline at end of file |