public void reapplyColumnWidths() {
Element row = root.getFirstChildElement();
while (row != null) {
- Element cell = row.getFirstChildElement();
- int columnIndex = 0;
- while (cell != null) {
- final double width = getCalculatedColumnWidthWithColspan(
- cell, columnIndex);
+ // Only handle non-spacer rows
+ if (!body.spacerContainer.isSpacer(row)) {
+ Element cell = row.getFirstChildElement();
+ int columnIndex = 0;
+ while (cell != null) {
+ final double width = getCalculatedColumnWidthWithColspan(
+ cell, columnIndex);
- /*
- * TODO Should Escalator implement ProvidesResize at some
- * point, this is where we need to do that.
- */
- cell.getStyle().setWidth(width, Unit.PX);
+ /*
+ * TODO Should Escalator implement ProvidesResize at
+ * some point, this is where we need to do that.
+ */
+ cell.getStyle().setWidth(width, Unit.PX);
- cell = cell.getNextSiblingElement();
- columnIndex++;
+ cell = cell.getNextSiblingElement();
+ columnIndex++;
+ }
}
row = row.getNextSiblingElement();
}
}
/** Checks if a given element is a spacer element */
- public boolean isSpacer(TableRowElement focusedRow) {
+ public boolean isSpacer(Element row) {
/*
* If this needs optimization, we could do a more heuristic check
*/
for (SpacerImpl spacer : rowIndexToSpacer.values()) {
- if (spacer.getRootElement().equals(focusedRow)) {
+ if (spacer.getRootElement().equals(row)) {
return true;
}
}
--- /dev/null
+/*
+ * 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 com.vaadin.event.ItemClickEvent;
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.Column;
+import com.vaadin.ui.Grid.DetailsGenerator;
+import com.vaadin.ui.Grid.RowReference;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.VerticalLayout;
+
+public class GridDetailsWidth extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final VerticalLayout layout = new VerticalLayout();
+ layout.setMargin(true);
+
+ final Grid grid = new Grid();
+
+ Column column = grid.addColumn("Hello", String.class);
+ for (int i = 0; i < 3; i++) {
+ grid.addRow("Hello " + i);
+ }
+
+ column.setWidth(600);
+ grid.setWidth(400, Unit.PIXELS);
+
+ grid.setDetailsGenerator(new DetailsGenerator() {
+
+ @Override
+ public Component getDetails(RowReference rowReference) {
+ HorizontalLayout myLayout = new HorizontalLayout();
+ TextArea textArea1 = new TextArea();
+ TextArea textArea2 = new TextArea();
+ textArea1.setSizeFull();
+ textArea2.setSizeFull();
+ myLayout.addComponent(textArea1);
+ myLayout.addComponent(textArea2);
+ myLayout.setWidth(100, Unit.PERCENTAGE);
+ myLayout.setHeight(null);
+ myLayout.setMargin(true);
+ return myLayout;
+ }
+ });
+
+ grid.addItemClickListener(new ItemClickListener() {
+
+ @Override
+ public void itemClick(ItemClickEvent event) {
+ grid.setDetailsVisible(event.getItemId(),
+ !grid.isDetailsVisible(event.getItemId()));
+
+ }
+ });
+
+ layout.addComponent(grid);
+
+ addComponent(layout);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 18223;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Tests that Escalator will not set explicit widths to the TD element in a details row.";
+ }
+
+}
--- /dev/null
+/*
+ * 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 java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class GridDetailsWidthTest extends SingleBrowserTest {
+
+ @Test
+ public void testSpacerTDsHaveNoWidth() {
+ openTestURL();
+ GridElement grid = $(GridElement.class).first();
+
+ // Open all details rows
+ grid.getCell(0, 0).click();
+ checkSpacersHaveNoWidths(1);
+
+ grid.getCell(1, 0).click();
+ checkSpacersHaveNoWidths(2);
+
+ grid.getCell(2, 0).click();
+ checkSpacersHaveNoWidths(3);
+
+ // Close all details rows
+ grid.getCell(2, 0).click();
+ checkSpacersHaveNoWidths(2);
+
+ grid.getCell(1, 0).click();
+ checkSpacersHaveNoWidths(1);
+
+ grid.getCell(0, 0).click();
+ checkSpacersHaveNoWidths(0);
+ }
+
+ private void checkSpacersHaveNoWidths(int expectedCount) {
+ List<WebElement> spacers = findElements(By.className("v-grid-spacer"));
+ Assert.assertEquals("Wrong amount of spacers visible.", expectedCount,
+ spacers.size());
+ for (WebElement spacer : spacers) {
+ Assert.assertFalse("Spacer element had an unexpected width set.",
+ spacer.findElement(By.tagName("td")).getAttribute("style")
+ .contains("width"));
+ }
+ }
+
+}