Adding a couple of useful methods to AbstractCellTable. getColumnWidth() can be used to access the width of a column set using setColumnWidth(). flush() will immediately flush pending changes into the view. Review at http://gwt-code-reviews.appspot.com/1453801 Review by: pengzhuang@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10259 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java index 019f4d4..169d915 100644 --- a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java +++ b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
@@ -635,6 +635,20 @@ } /** + * Flush all pending changes to the table and render immediately. + * + * <p> + * Modifications to the table, such as adding columns or setting data, are not + * rendered immediately. Instead, changes are coalesced at the end of the + * current event loop to avoid rendering the table multiple times. Use this + * method to force the table to render all pending modifications immediately. + * </p> + */ + public void flush() { + getPresenter().flush(); + } + + /** * Get the column at the specified index. * * @param col the index of the column to retrieve @@ -676,6 +690,17 @@ } /** + * Get the width of a {@link Column}. + * + * @param column the column + * @return the width of the column, or null if not set + * @see #setColumnWidth(Column, double, Unit) + */ + public String getColumnWidth(Column<T, ?> column) { + return columnWidths.get(column); + } + + /** * Get the widget displayed when the table has no rows. * * @return the empty table widget @@ -703,7 +728,7 @@ * current page */ public TableRowElement getRowElement(int row) { - getPresenter().flush(); + flush(); checkRowBounds(row); NodeList<TableRowElement> rows = getTableBodyElement().getRows(); return rows.getLength() > row ? rows.getItem(row) : null;
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java index 59f3178..185ff86 100644 --- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java +++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java
@@ -21,6 +21,7 @@ import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.TableCellElement; +import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.LoadingStateChangeEvent.LoadingState; import com.google.gwt.user.client.ui.HasHorizontalAlignment; @@ -272,6 +273,28 @@ } } + public void testSetColumnWidth() { + AbstractCellTable<String> table = createAbstractHasData(new TextCell()); + Column<String, ?> col0 = new MockColumn<String, String>(); + Column<String, ?> col1 = new MockColumn<String, String>(); + Column<String, ?> col2 = new MockColumn<String, String>(); + + // Set a column width. + table.setColumnWidth(col0, "100px"); + table.setColumnWidth(col1, 200.0, Unit.EM); + assertEquals("100px", table.getColumnWidth(col0)); + + // Some browsers return 200.0, others 200. + assertTrue(table.getColumnWidth(col1).contains("200")); + + // Check a column that has not been set. + assertNull(table.getColumnWidth(col2)); + + // Check a column that has been cleared. + table.clearColumnWidth(col0); + assertNull(table.getColumnWidth(col0)); + } + public void testSetEmptyTableWidget() { AbstractCellTable<String> table = createAbstractHasData(new TextCell());