Revision: 10662
Author:   pengzhu...@google.com
Date:     Wed Sep 21 06:39:41 2011
Log:      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: jlaba...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=10662

Modified:
 /trunk/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
/trunk/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java
 /trunk/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java
 /trunk/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java

=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java Tue Sep 20 12:53:34 2011 +++ /trunk/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java Wed Sep 21 06:39:41 2011
@@ -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);
         }
       }
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java Wed Aug 31 03:58:11 2011 +++ /trunk/user/src/com/google/gwt/user/cellview/client/AbstractHeaderOrFooterBuilder.java Wed Sep 21 06:39:41 2011
@@ -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()) {
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java Wed Aug 31 03:58:11 2011 +++ /trunk/user/src/com/google/gwt/user/cellview/client/FooterBuilder.java Wed Sep 21 06:39:41 2011
@@ -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
@@ -78,6 +79,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.
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java Wed Aug 31 03:58:11 2011 +++ /trunk/user/src/com/google/gwt/user/cellview/client/HeaderBuilder.java Wed Sep 21 06:39:41 2011
@@ -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
@@ -78,6 +79,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.

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to