aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/VAADIN/themes/base/grid/grid.scss4
-rw-r--r--WebContent/VAADIN/themes/valo/components/_grid.scss4
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java51
-rw-r--r--server/src/com/vaadin/ui/Grid.java3
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/GridEditorClientTest.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java15
6 files changed, 72 insertions, 7 deletions
diff --git a/WebContent/VAADIN/themes/base/grid/grid.scss b/WebContent/VAADIN/themes/base/grid/grid.scss
index f587dfef4f..6b3b017070 100644
--- a/WebContent/VAADIN/themes/base/grid/grid.scss
+++ b/WebContent/VAADIN/themes/base/grid/grid.scss
@@ -396,6 +396,10 @@ $v-grid-details-border-bottom-stripe: 1px solid darken($v-grid-row-background-co
min-width: 100%;
max-width: 100%;
}
+
+ &.not-editable.#{$primaryStyleName}-cell {
+ float: none;
+ }
}
.error::before {
diff --git a/WebContent/VAADIN/themes/valo/components/_grid.scss b/WebContent/VAADIN/themes/valo/components/_grid.scss
index d00ddf30a4..11134262eb 100644
--- a/WebContent/VAADIN/themes/valo/components/_grid.scss
+++ b/WebContent/VAADIN/themes/valo/components/_grid.scss
@@ -119,6 +119,10 @@ $v-grid-details-border-bottom-stripe: $v-grid-cell-horizontal-border !default;
vertical-align: middle;
}
+ &.not-editable.#{$primary-stylename}-cell {
+ float: none;
+ }
+
.error::before {
border-top: round($v-unit-size / 4) solid $v-error-indicator-color;
border-right: round($v-unit-size / 4) solid transparent;
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java
index 18407dccc9..a17c59c795 100644
--- a/client/src/com/vaadin/client/widgets/Grid.java
+++ b/client/src/com/vaadin/client/widgets/Grid.java
@@ -80,6 +80,7 @@ import com.vaadin.client.Focusable;
import com.vaadin.client.WidgetUtil;
import com.vaadin.client.data.DataChangeHandler;
import com.vaadin.client.data.DataSource;
+import com.vaadin.client.data.DataSource.RowHandle;
import com.vaadin.client.renderers.ComplexRenderer;
import com.vaadin.client.renderers.Renderer;
import com.vaadin.client.renderers.WidgetRenderer;
@@ -1265,6 +1266,7 @@ public class Grid<T> extends ResizeComposite implements
private double originalTop;
/** Original scroll position of grid when editor was opened */
private double originalScrollTop;
+ private RowHandle<T> pinnedRowHandle;
public Editor() {
saveButton = new Button();
@@ -1626,6 +1628,50 @@ public class Grid<T> extends ResizeComposite implements
}
} else {
cell.addClassName(NOT_EDITABLE_CLASS_NAME);
+ cell.addClassName(tr.getCells().getItem(i).getClassName());
+ // If the focused stylename is present it should not be
+ // inherited by the editor cell as it is not useful in the
+ // editor and would look broken without additional style
+ // rules. This is a bit of a hack.
+ cell.removeClassName(grid.cellFocusStyleName);
+
+ if (column == grid.selectionColumn) {
+ // Duplicate selection column CheckBox
+
+ pinnedRowHandle = grid.getDataSource().getHandle(
+ grid.getDataSource().getRow(rowIndex));
+ pinnedRowHandle.pin();
+
+ // We need to duplicate the selection CheckBox for the
+ // editor overlay since the original one is hidden by
+ // the overlay
+ final CheckBox checkBox = GWT.create(CheckBox.class);
+ checkBox.setValue(grid.isSelected(pinnedRowHandle
+ .getRow()));
+ checkBox.sinkEvents(Event.ONCLICK);
+
+ checkBox.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ T row = pinnedRowHandle.getRow();
+ if (grid.isSelected(row)) {
+ grid.deselect(row);
+ } else {
+ grid.select(row);
+ }
+ }
+ });
+ attachWidget(checkBox, cell);
+ columnToWidget.put(column, checkBox);
+
+ // Only enable CheckBox in non-buffered mode
+ checkBox.setEnabled(!isBuffered());
+
+ } else if (!(column.getRenderer() instanceof WidgetRenderer)) {
+ // Copy non-widget content directly
+ cell.setInnerHTML(tr.getCells().getItem(i)
+ .getInnerHTML());
+ }
}
}
@@ -1697,6 +1743,11 @@ public class Grid<T> extends ResizeComposite implements
return;
}
+ if (pinnedRowHandle != null) {
+ pinnedRowHandle.unpin();
+ pinnedRowHandle = null;
+ }
+
for (Widget w : columnToWidget.values()) {
setParent(w, null);
}
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java
index ab4236fdf0..eabd3e00c7 100644
--- a/server/src/com/vaadin/ui/Grid.java
+++ b/server/src/com/vaadin/ui/Grid.java
@@ -6150,6 +6150,9 @@ public class Grid extends AbstractFocusable implements SelectionNotifier,
* Opens the editor interface for the provided item. Scrolls the Grid to
* bring the item to view if it is not already visible.
*
+ * Note that any cell content rendered by a WidgetRenderer will not be
+ * visible in the editor row.
+ *
* @param itemId
* the id of the item to edit
* @throws IllegalStateException
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/GridEditorClientTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/GridEditorClientTest.java
index 43fe29bc02..58d6559bfb 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/GridEditorClientTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/GridEditorClientTest.java
@@ -143,7 +143,7 @@ public class GridEditorClientTest extends GridBasicClientFeaturesTest {
List<WebElement> selectorDivs = editorCells.findElements(By
.cssSelector("div"));
- assertTrue("selector column cell should've been empty", selectorDivs
+ assertFalse("selector column cell should've had contents", selectorDivs
.get(0).getAttribute("innerHTML").isEmpty());
assertFalse("normal column cell shoul've had contents", selectorDivs
.get(1).getAttribute("innerHTML").isEmpty());
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java
index f7592ce922..0a77d690a4 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java
@@ -197,13 +197,16 @@ public abstract class GridEditorTest extends GridBasicFeaturesTest {
GridEditorElement editor = getGridElement().getEditor();
assertFalse("Uneditable column should not have an editor widget",
editor.isEditable(3));
- assertEquals(
- "Not editable cell did not contain correct classname",
- "not-editable",
- editor.findElements(By.className("v-grid-editor-cells")).get(1)
- .findElements(By.xpath("./div")).get(3)
- .getAttribute("class"));
+ String classNames = editor
+ .findElements(By.className("v-grid-editor-cells")).get(1)
+ .findElements(By.xpath("./div")).get(3).getAttribute("class");
+
+ assertTrue("Noneditable cell should contain not-editable classname",
+ classNames.contains("not-editable"));
+
+ assertTrue("Noneditable cell should contain v-grid-cell classname",
+ classNames.contains("v-grid-cell"));
}
@Test