Browse Source

Fix for #5211

svn changeset:13765/svn branch:6.4
tags/6.7.0.beta1
John Alhroos 14 years ago
parent
commit
30a6925ab9
1 changed files with 81 additions and 1 deletions
  1. 81
    1
      src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

+ 81
- 1
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java View File

@@ -1240,6 +1240,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
*/

Iterator<Widget> headCells = tHead.iterator();
Iterator<Widget> footCells = tFoot.iterator();
int i = 0;
int totalExplicitColumnsWidths = 0;
int total = 0;
@@ -1253,6 +1254,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// first loop: collect natural widths
while (headCells.hasNext()) {
final HeaderCell hCell = (HeaderCell) headCells.next();
final FooterCell fCell = (FooterCell) footCells.next();
int w = hCell.getWidth();
if (hCell.isDefinedWidth()) {
// server has defined column width explicitly
@@ -1265,9 +1267,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// get and store greater of header width and column width,
// and
// store it as a minimumn natural col width
w = hCell.getNaturalColumnWidth(i);
int headerWidth = hCell.getNaturalColumnWidth(i);
int footerWidth = fCell.getNaturalColumnWidth(i);
w = headerWidth > footerWidth ? headerWidth : footerWidth;
}
hCell.setNaturalMinimumColumnWidth(w);
fCell.setNaturalMinimumColumnWidth(w);
}
widths[i] = w;
total += w;
@@ -1433,6 +1438,17 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
}
}

/*
* Ensures the column alignments are correct at initial loading. <br/>
* (child components widths are correct)
*/
scrollBody.reLayoutComponents();
DeferredCommand.addCommand(new Command() {
public void execute() {
Util.runWebkitOverflowAutoFix(scrollBodyPanel.getElement());
}
});
}

/**
@@ -2458,6 +2474,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
private int width = -1;
private float expandRatio = 0;
private String cid;
boolean definedWidth = false;
private int naturalWidth = -1;

public FooterCell(String colId, String headerText) {
cid = colId;
@@ -2535,6 +2553,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
public void setWidth(int w, boolean ensureDefinedWidth) {

if (ensureDefinedWidth) {
definedWidth = true;
// on column resize expand ratio becomes zero
expandRatio = 0;
}
@@ -2599,6 +2618,25 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
setWidth(-1, false);
}

/**
* Detects if width is fixed by developer on server side or resized to
* current width by user.
*
* @return true if defined, false if "natural" width
*/
public boolean isDefinedWidth() {
return definedWidth;
}

/**
* Returns the pixels width of the footer cell
*
* @return The width in pixels
*/
public int getWidth() {
return width;
}

/**
* Sets the expand ratio of the cell
*
@@ -2680,6 +2718,48 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
public String getColKey() {
return cid;
}

/**
* Detects the natural minimum width for the column of this header cell.
* If column is resized by user or the width is defined by server the
* actual width is returned. Else the natural min width is returned.
*
* @param columnIndex
* column index hint, if -1 (unknown) it will be detected
*
* @return
*/
public int getNaturalColumnWidth(int columnIndex) {
if (isDefinedWidth()) {
return width;
} else {
if (naturalWidth < 0) {
// This is recently revealed column. Try to detect a proper
// value (greater of header and data
// cols)

final int hw = ((Element) getElement().getLastChild())
.getOffsetWidth()
+ scrollBody.getCellExtraWidth();
if (columnIndex < 0) {
columnIndex = 0;
for (Iterator<Widget> it = tHead.iterator(); it
.hasNext(); columnIndex++) {
if (it.next() == this) {
break;
}
}
}
final int cw = scrollBody.getColWidth(columnIndex);
naturalWidth = (hw > cw ? hw : cw);
}
return naturalWidth;
}
}

public void setNaturalMinimumColumnWidth(int w) {
naturalWidth = w;
}
}

/**

Loading…
Cancel
Save