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.
*