diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java index c0f0c3da185080ea9a9111988cb8be97e15847a5..3651f07e5a89b1e47db56b97d53265759240b927 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java @@ -1,5 +1,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid; +import java.util.ArrayList; +import java.util.List; + import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.GridEvent; @@ -7,6 +10,8 @@ import com.extjs.gxt.ui.client.widget.grid.ColumnHeader; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.grid.GridView; import com.extjs.gxt.ui.client.widget.menu.Menu; +import com.google.gwt.dom.client.Node; +import com.google.gwt.dom.client.NodeList; import com.google.gwt.user.client.Element; /** @@ -83,10 +88,19 @@ class ExtendedGridView extends GridView headerCell.getStyle().setProperty("width", "auto"); for (int i = 0; i < pGrid.getStore().getCount(); i++) { - Element cell = (Element) view.getCell(i, column).getFirstChildElement(); - cell.getStyle().setWidth(0, com.google.gwt.dom.client.Style.Unit.PX); - int width = cell.getScrollWidth(); - cell.getStyle().setProperty("width", "auto"); + Element td = (Element) view.getCell(i, column); + List<Node> nodes = extractNodes(td); + for (Node n : nodes) + { + if (Element.is(n)) + { + Element.as(n).getStyle().setWidth(0, com.google.gwt.dom.client.Style.Unit.PX); + } + } + Element element = (Element) td.getFirstChildElement(); + element.getStyle().setWidth(0, com.google.gwt.dom.client.Style.Unit.PX); + int width = element.getScrollWidth(); + element.getStyle().setProperty("width", "auto"); if (width > max) { max = width; @@ -95,6 +109,32 @@ class ExtendedGridView extends GridView return max; } + private List<Node> extractNodes(Element element) + { + List<Node> visited = new ArrayList<Node>(); + List<Node> toVisit = new ArrayList<Node>(); + toVisit.add(element); + while (toVisit.isEmpty() == false) + { + Node n = toVisit.get(0); + toVisit.remove(n); + if (visited.contains(n) == false) + { + visited.add(n); + NodeList<Node> childNodes = n.getChildNodes(); + for (int j = 0; j < childNodes.getLength(); j++) + { + Node c = childNodes.getItem(j); + if (toVisit.contains(c) == false) + { + toVisit.add(c); + } + } + } + } + return visited; + } + private int calculateHeaderCellIndex(Grid<ModelData> pGrid, int column) { // WORKAROUND: getHeaderCell takes into account only visible columns