Add a support for header builder to return row index for multi-row header/footer. Review at http://gwt-code-reviews.appspot.com/1555803 Review by: jlabanca@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10662 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 3aaffe8..4804345 100644 --- a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java +++ b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
@@ -1745,7 +1745,9 @@ isHeader ? headerBuilder.getHeader(headerParent) : footerBuilder .getHeader(footerParent); if (header != null && cellConsumesEventType(header.getCell(), eventType)) { - Context context = new Context(0, col, header.getKey()); + int headerIndex = isHeader ? headerBuilder.getRowIndex(targetTableRow) : + footerBuilder.getRowIndex(targetTableRow); + Context context = new Context(headerIndex, col, header.getKey()); header.onBrowserEvent(context, headerParent, event); } }
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java b/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java index fdec154..c29f8b2 100644 --- a/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java +++ b/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java
@@ -27,6 +27,7 @@ import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Position; import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.dom.client.TableRowElement; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; @@ -81,6 +82,11 @@ * The attribute used to indicate that an element contains a header. */ private static final String HEADER_ATTRIBUTE = "__gwt_header"; + + /** + * The attribute used to specify the row index of a TR element in the header. + */ + private static final String ROW_ATTRIBUTE = "__gwt_header_row"; private static final int ICON_PADDING = 6; @@ -93,6 +99,7 @@ private SafeHtml sortDescIconHtml; private final int sortDescIconWidth; private final AbstractCellTable<T> table; + private int rowIndex; // The following fields are reset on every build. private HtmlTableSectionBuilder section; @@ -163,6 +170,11 @@ return (headerId == null) ? null : idToHeaderMap.getValue(headerId); } + @Override + public int getRowIndex(TableRowElement row) { + return Integer.parseInt(row.getAttribute(ROW_ATTRIBUTE)); + } + /** * Check if this builder is building a header or footer table. * @@ -348,6 +360,8 @@ // Start the next row. TableRowBuilder row = section.startTR(); + row.attribute(ROW_ATTRIBUTE, rowIndex); + rowIndex++; return row; } @@ -358,6 +372,7 @@ .createTHeadBuilder(); idToHeaderMap.clear(); idToColumnMap.clear(); + rowIndex = 0; // Build the header. if (!buildHeaderOrFooterImpl()) {
diff --git a/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java b/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java index cef7c20..4eca4a3 100644 --- a/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java +++ b/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java
@@ -17,6 +17,7 @@ import com.google.gwt.dom.builder.shared.TableSectionBuilder; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.TableRowElement; /** * Builds the DOM elements for the footer section of a CellTable. It also @@ -79,6 +80,15 @@ Header<?> getHeader(Element elem); /** + * Get the row index from the associated + * {@link TableRowElement} (an TR element). + * + * @param row the row element + * @return the row value index + */ + int getRowIndex(TableRowElement row); + + /** * Check if an element contains a {@link Column}. This method should return * false if and only if {@link #getColumn(Element)} would return null. *
diff --git a/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java b/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java index f13c011..5f7bd7a 100644 --- a/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java +++ b/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java
@@ -17,6 +17,7 @@ import com.google.gwt.dom.builder.shared.TableSectionBuilder; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.TableRowElement; /** * Builds the DOM elements for the header section of a CellTable. It also @@ -79,6 +80,15 @@ Header<?> getHeader(Element elem); /** + * Get the row index from the associated + * {@link TableRowElement} (an TR element). + * + * @param row the row element + * @return the row value index + */ + int getRowIndex(TableRowElement row); + + /** * Check if an element contains a {@link Column}. This method should return * false if and only if {@link #getColumn(Element)} would return null. *