Browse Source

Fix for #6934

svn changeset:20101/svn branch:6.6
tags/6.7.0.beta1
John Alhroos 13 years ago
parent
commit
32adeff6d6
1 changed files with 65 additions and 12 deletions
  1. 65
    12
      src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

+ 65
- 12
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java View File

@@ -1074,13 +1074,13 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// cell to accomodate for the size of the sort arrow.
HeaderCell sortedHeader = tHead.getHeaderCell(sortColumn);
if (sortedHeader != null) {
sortedHeader.resizeCaptionContainer();
tHead.resizeCaptionContainer(sortedHeader);
}
// Also recalculate the width of the captionContainer element in the
// previously sorted header, since this now has more room.
HeaderCell oldSortedHeader = tHead.getHeaderCell(oldSortColumn);
if (oldSortedHeader != null) {
oldSortedHeader.resizeCaptionContainer();
tHead.resizeCaptionContainer(oldSortedHeader);
}

rendering = false;
@@ -1355,6 +1355,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// Set header column width
hcell.setWidth(w, isDefinedWidth);

// Ensure indicators have been taken into account
tHead.resizeCaptionContainer(hcell);

// Set body column width
scrollBody.setColWidth(colIndex, w);

@@ -2008,7 +2011,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
* header cell belongs to is sorted. This is done by resizing the width
* of the caption container element by the correct amount
*/
public void resizeCaptionContainer() {
public void resizeCaptionContainer(int rightSpacing) {
if (BrowserInfo.get().isIE6() || td.getClassName().contains("-asc")
|| td.getClassName().contains("-desc")) {
/*
@@ -2018,7 +2021,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
*/
int captionContainerWidth = width
- sortIndicator.getOffsetWidth()
- colResizeWidget.getOffsetWidth();
- colResizeWidget.getOffsetWidth() - rightSpacing;
captionContainer.getStyle().setPropertyPx("width",
captionContainerWidth);
} else {
@@ -2026,7 +2029,15 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
* Set the caption container element as wide as possible when
* the sorting indicator is not visible.
*/
captionContainer.getStyle().setPropertyPx("width", width);
captionContainer.getStyle().setPropertyPx("width",
width - rightSpacing);
}

// Apply/Remove spacing if defined
if (rightSpacing > 0) {
colResizeWidget.getStyle().setMarginLeft(rightSpacing, Unit.PX);
} else {
colResizeWidget.getStyle().clearMarginLeft();
}
}

@@ -2083,7 +2094,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
DOM.setStyleAttribute(captionContainer, "width", "");
setWidth("");
} else {
resizeCaptionContainer();
tHead.resizeCaptionContainer(this);

/*
* if we already have tBody, set the header width properly, if
@@ -2367,6 +2378,13 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
isResizing = false;
DOM.releaseCapture(getElement());
tHead.disableAutoColumnWidthCalculation(this);

// Ensure last header cell is taking into account possible
// column selector
HeaderCell lastCell = tHead.getHeaderCell(tHead
.getVisibleCellCount() - 1);
tHead.resizeCaptionContainer(lastCell);

fireColumnResizeEvent(cid, originalWidth, getColWidth(cid));
break;
case Event.ONMOUSEMOVE:
@@ -2552,6 +2570,38 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
new RowHeadersHeaderCell());
}

public void resizeCaptionContainer(HeaderCell cell) {
HeaderCell lastcell = getHeaderCell(visibleCells.size() - 1);

// Measure column widths
int columnTotalWidth = 0;
for (Widget w : visibleCells) {
columnTotalWidth += w.getOffsetWidth();
}

if (cell == lastcell && columnSelector.getOffsetWidth() > 0
&& columnTotalWidth >= div.getOffsetWidth()
- columnSelector.getOffsetWidth()
&& !hasVerticalScrollbar()) {
// Ensure column caption is visible when placed under the column
// selector widget by shifting and resizing the caption.
int offset = 0;
int diff = div.getOffsetWidth() - columnTotalWidth;
if (diff < columnSelector.getOffsetWidth() && diff > 0) {
// If the difference is less than the column selectors width
// then just offset by the
// difference
offset = columnSelector.getOffsetWidth() - diff;
} else {
// Else offset by the whole column selector
offset = columnSelector.getOffsetWidth();
}
lastcell.resizeCaptionContainer(offset);
} else {
cell.resizeCaptionContainer(0);
}
}

@Override
public void clear() {
for (String cid : availableCells.keySet()) {
@@ -5917,16 +5967,19 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
*/
public boolean isFocusable() {
if (scrollBody != null && enabled) {
boolean hasVerticalScrollbars = scrollBody.getOffsetHeight() > scrollBodyPanel
.getOffsetHeight();
boolean hasHorizontalScrollbars = scrollBody.getOffsetWidth() > scrollBodyPanel
.getOffsetWidth();
return !(!hasHorizontalScrollbars && !hasVerticalScrollbars && selectMode == SELECT_MODE_NONE);
return !(!hasHorizontalScrollbar() && !hasVerticalScrollbar() && selectMode == SELECT_MODE_NONE);
}

return false;
}

private boolean hasHorizontalScrollbar() {
return scrollBody.getOffsetWidth() > scrollBodyPanel.getOffsetWidth();
}
private boolean hasVerticalScrollbar() {
return scrollBody.getOffsetHeight() > scrollBodyPanel.getOffsetHeight();
}

/*
* (non-Javadoc)
*

Loading…
Cancel
Save