Browse Source

Force-table-to-recalculate-column-widths feature. Fixes #1983 (see ticket for more)

svn changeset:5389/svn branch:trunk
tags/6.7.0.beta1
Marc Englund 15 years ago
parent
commit
0bd4eba37b

+ 21
- 5
src/com/itmill/toolkit/terminal/gwt/client/ui/IScrollTable.java View File

@@ -131,6 +131,13 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
private int oldAvailPixels;
private boolean emitClickEvents;

/*
* Read from the "recalcWidths" -attribute. When it is true, the table will
* recalculate the widths for columns - desirable in some cases. For #1983,
* marked experimental.
*/
boolean recalcWidths = false;

public IScrollTable() {

bodyContainer.addScrollListener(this);
@@ -170,6 +177,8 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
totalRows = newTotalRows;
}

recalcWidths = uidl.hasAttribute("recalcWidths");

pageLength = uidl.getIntAttribute("pagelength");
if (pageLength == 0) {
pageLength = totalRows;
@@ -245,7 +254,7 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
}
updateHeader(uidl.getStringArrayAttribute("vcolorder"));

if (initializedAndAttached) {
if (!recalcWidths && initializedAndAttached) {
updateBody(rowData, uidl.getIntAttribute("firstrow"), uidl
.getIntAttribute("rows"));
} else {
@@ -973,10 +982,15 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
DOM.setStyleAttribute(captionContainer, "overflow", "");
}
width = w;
DOM.setStyleAttribute(captionContainer, "width", (w
- DRAG_WIDGET_WIDTH - 4)
+ "px");
setWidth(w + "px");
if (w == -1) {
DOM.setStyleAttribute(captionContainer, "width", "");
setWidth("");
} else {
DOM.setStyleAttribute(captionContainer, "width", (w
- DRAG_WIDGET_WIDTH - 4)
+ "px");
setWidth(w + "px");
}
}

public int getWidth() {
@@ -1323,6 +1337,8 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
if (col.hasAttribute("width")) {
final String width = col.getStringAttribute("width");
c.setWidth(Integer.parseInt(width));
} else if (recalcWidths) {
c.setWidth(-1);
}
}
// check for orphaned header cells

+ 54
- 3
src/com/itmill/toolkit/tests/tickets/Ticket1983.java View File

@@ -9,6 +9,7 @@ import com.itmill.toolkit.ui.OrderedLayout;
import com.itmill.toolkit.ui.SplitPanel;
import com.itmill.toolkit.ui.Table;
import com.itmill.toolkit.ui.Window;
import com.itmill.toolkit.ui.Button.ClickEvent;

/**
* Test class for ticket 1983
@@ -23,6 +24,9 @@ public class Ticket1983 extends Application {

private static class TestLayout extends SplitPanel {
boolean isLong = true;
final Table table = new MyTable();
final String propId = "col";
final String propId2 = "col2";

public TestLayout() {
super(ORIENTATION_HORIZONTAL);
@@ -44,13 +48,26 @@ public class Ticket1983 extends Application {
leftSide.setHeight("100%");

final IndexedContainer dataSource = new IndexedContainer();
final String propId = "col";
dataSource.addContainerProperty(propId, String.class, null);
dataSource.addContainerProperty(propId2, String.class, null);
final Object itemId = dataSource.addItem();
dataSource.getItem(itemId).getItemProperty(propId).setValue(
"Very long value that makes a scrollbar appear for sure");
dataSource.getItem(itemId).getItemProperty(propId2).setValue(
"Very long value that makes a scrollbar appear for sure");

for (int i = 0; i < 150; i++) {
Object id = dataSource.addItem();
dataSource
.getItem(id)
.getItemProperty(propId)
.setValue(
(i == 100 ? "Very long value that makes a scrollbar appear for sure"
: "Short"));
dataSource.getItem(id).getItemProperty(propId2).setValue(
"Short");
}

final Table table = new Table();
table.setSizeFull();
table.setContainerDataSource(dataSource);
table.setVisibleColumns(new Object[] { propId });
@@ -65,6 +82,8 @@ public class Ticket1983 extends Application {
if (isLong) {
dataSource.getItem(itemId).getItemProperty(propId)
.setValue("Short value");
dataSource.getItem(itemId).getItemProperty(propId2)
.setValue("Short value");
isLong = false;
} else {
dataSource
@@ -72,15 +91,47 @@ public class Ticket1983 extends Application {
.getItemProperty(propId)
.setValue(
"Very long value that makes a scrollbar appear for sure");
dataSource
.getItem(itemId)
.getItemProperty(propId2)
.setValue(
"Very long value that makes a scrollbar appear for sure");
isLong = true;
}
// Works the same way with or without repaint request
table.requestRepaint();
}
});
leftSide.setFirstComponent(button);

OrderedLayout ol = new OrderedLayout();
ol.addComponent(button);
leftSide.setFirstComponent(ol);

button = new Button("Two col");
button.addListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
if (((Boolean) b.getValue()).booleanValue()) {
table
.setVisibleColumns(new Object[] { propId,
propId2 });
} else {
table.setVisibleColumns(new Object[] { propId });
}

}

});
button.setSwitchMode(true);
ol.addComponent(button);

return leftSide;
}
}

static class MyTable extends Table {
MyTable() {
alwaysRecalculateColumnWidths = true;
}
}
}

+ 13
- 0
src/com/itmill/toolkit/ui/Table.java View File

@@ -312,6 +312,12 @@ public class Table extends AbstractSelect implements Action.Container,

private int clickListenerCount;

/*
* EXPERIMENTAL feature: will tell the client to re-calculate column widths
* if set to true. Currently no setter: extend to enable.
*/
protected boolean alwaysRecalculateColumnWidths = false;

/* Table constructors */

/**
@@ -1795,6 +1801,13 @@ public class Table extends AbstractSelect implements Action.Container,
rows = reqRowsToPaint;
} else {
rows = cells[0].length;
if (alwaysRecalculateColumnWidths) {
// TODO experimental feature for now: tell the client to
// recalculate column widths.
// We'll only do this for paints that do not originate from
// table scroll/cache requests (i.e when reqRowsToPaint<0)
target.addAttribute("recalcWidths", true);
}
}

if (!isNullSelectionAllowed() && getNullSelectionItemId() != null

Loading…
Cancel
Save