Revision: 7903
Author: [email protected]
Date: Fri Apr  9 11:02:02 2010
Log: Fixing a bug in HTMLTable where cols are removed when a lower indexed col is accessed.
http://gwt-code-reviews.appspot.com/314803/show

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=7903

Modified:
 /trunk/user/src/com/google/gwt/user/client/ui/Grid.java
 /trunk/user/src/com/google/gwt/user/client/ui/HTMLTable.java
 /trunk/user/test/com/google/gwt/user/client/ui/GridTest.java

=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/Grid.java Tue Jan 26 10:25:12 2010 +++ /trunk/user/src/com/google/gwt/user/client/ui/Grid.java Fri Apr 9 11:02:02 2010
@@ -200,7 +200,7 @@
     numColumns = columns;

     // Update the size of the colgroup.
-    getColumnFormatter().resizeColumnGroup(columns);
+    getColumnFormatter().resizeColumnGroup(columns, false);
   }

   /**
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/HTMLTable.java Thu Feb 11 05:07:55 2010 +++ /trunk/user/src/com/google/gwt/user/client/ui/HTMLTable.java Fri Apr 9 11:02:02 2010
@@ -482,8 +482,9 @@
      * Resize the column group element.
      *
      * @param columns the number of columns
+     * @param growOnly true to only grow, false to shrink if needed
      */
-    void resizeColumnGroup(int columns) {
+    void resizeColumnGroup(int columns, boolean growOnly) {
       // The colgroup should always have at least one element.  See
       // prepareColumnGroup() for more details.
       columns = Math.max(columns, 1);
@@ -493,7 +494,7 @@
         for (int i = num; i < columns; i++) {
           columnGroup.appendChild(Document.get().createColElement());
         }
-      } else if (num > columns) {
+      } else if (!growOnly && num > columns) {
         for (int i = num; i > columns; i--) {
           columnGroup.removeChild(columnGroup.getLastChild());
         }
@@ -503,7 +504,7 @@
     private Element ensureColumn(int col) {
       prepareColumn(col);
       prepareColumnGroup();
-      resizeColumnGroup(col + 1);
+      resizeColumnGroup(col + 1, true);
       return columnGroup.getChild(col).cast();
     }

=======================================
--- /trunk/user/test/com/google/gwt/user/client/ui/GridTest.java Mon Jan 11 13:16:12 2010 +++ /trunk/user/test/com/google/gwt/user/client/ui/GridTest.java Fri Apr 9 11:02:02 2010
@@ -89,14 +89,18 @@
     columns.removeStyleName(0, "c");
     assertEquals("base b", columns.getStyleName(0));

-    // Only one column should be created.
+    // All five cols should be created.
     Element e = DOM.getChild(r.getElement(), 0);
-    assertEquals(1, DOM.getChildCount(e));
+    assertEquals(5, DOM.getChildCount(e));

     columns.addStyleName(3, "a");
-    // Now there shoud be three such columns .
+    // There should still be five columns.
     e = DOM.getChild(r.getElement(), 0);
-    assertEquals(4, DOM.getChildCount(e));
+    assertEquals(5, DOM.getChildCount(e));
+
+    // Querying column 0 should not invalidate column 3.
+    assertEquals("base b", columns.getStyleName(0));
+    assertEquals("a", columns.getStyleName(3));
   }

   public void testColumnMessage() {

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

To unsubscribe, reply using "remove me" as the subject.

Reply via email to