Upgrading DynaTableRf and MobileWebApp to use DataGrid. The apps look identical, except that scrolling the table no longer scrolls the column headers out of view.

Review at http://gwt-code-reviews.appspot.com/1452803

Review by: rjrjr@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10264 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DataGridPatch.css b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DataGridPatch.css
new file mode 100644
index 0000000..1f40459
--- /dev/null
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DataGridPatch.css
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2011 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+/*
+ * This file is used by SummaryWidget to patch the CSS styles used in DataGrid.
+ * The style rules defined in this file are appended to the default styles in
+ * DataGrid's CssResource. If there are conflicts, the styles defined in this
+ * file take precedence over the defaults because these styles appear after the
+ * default styles.
+ */
+.dataGridCell {
+  cursor: pointer;
+}
\ No newline at end of file
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java
index 889594c..b66331c 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java
@@ -35,8 +35,8 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.cellview.client.CellTable;
 import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.DataGrid;
 import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
 import com.google.gwt.user.cellview.client.SimplePager;
 import com.google.gwt.user.client.ui.Composite;
@@ -66,9 +66,10 @@
   interface Style extends CssResource {
   }
 
-  interface TableResources extends CellTable.Resources {
-    @Source(value = {CellTable.Style.DEFAULT_CSS, "CellTablePatch.css"})
-    CellTable.Style cellTableStyle();
+  interface TableResources extends DataGrid.Resources {
+    @Override
+    @Source(value = {DataGrid.Style.DEFAULT_CSS, "DataGridPatch.css"})
+    DataGrid.Style dataGridStyle();
   }
 
   private class DescriptionColumn extends Column<PersonProxy, String> {
@@ -111,7 +112,7 @@
   SimplePager pager = new SimplePager();
 
   @UiField(provided = true)
-  CellTable<PersonProxy> table;
+  DataGrid<PersonProxy> table;
 
   private final EventBus eventBus;
   private List<Boolean> filter = new ArrayList<Boolean>(ALL_DAYS);
@@ -127,11 +128,9 @@
     this.requestFactory = requestFactory;
     this.numRows = numRows;
 
-    table = new CellTable<PersonProxy>(numRows,
+    table = new DataGrid<PersonProxy>(numRows,
         GWT.<TableResources> create(TableResources.class));
     initWidget(GWT.<Binder> create(Binder.class).createAndBindUi(this));
-    dock.getWidgetContainerElement(table).getStyle().setProperty("overflowY",
-        "visible");
 
     Column<PersonProxy, String> nameColumn = new NameColumn();
     table.addColumn(nameColumn, "Name");
@@ -146,17 +145,20 @@
 
     EntityProxyChange.registerForProxyType(eventBus, PersonProxy.class,
         new EntityProxyChange.Handler<PersonProxy>() {
+          @Override
           public void onProxyChange(EntityProxyChange<PersonProxy> event) {
             SummaryWidget.this.onPersonChanged(event);
           }
         });
 
     FilterChangeEvent.register(eventBus, new FilterChangeEvent.Handler() {
+      @Override
       public void onFilterChanged(FilterChangeEvent e) {
         filter.set(e.getDay(), e.isSelected());
         if (!pending) {
           pending = true;
           Scheduler.get().scheduleFinally(new ScheduledCommand() {
+            @Override
             public void execute() {
               pending = false;
               fetch(0);
@@ -167,6 +169,7 @@
     });
 
     selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
+      @Override
       public void onSelectionChange(SelectionChangeEvent event) {
         SummaryWidget.this.refreshSelection();
       }
@@ -255,7 +258,7 @@
   }
 
   private int offsetOf(EntityProxyId<PersonProxy> personId) {
-    List<PersonProxy> displayedItems = table.getDisplayedItems();
+    List<PersonProxy> displayedItems = table.getVisibleItems();
     for (int offset = 0, j = displayedItems.size(); offset < j; offset++) {
       if (personId.equals(displayedItems.get(offset).stableId())) {
         return offset;
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.ui.xml b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.ui.xml
index 1017417..8376f7e 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.ui.xml
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.ui.xml
@@ -30,7 +30,7 @@
       </g:DockLayoutPanel>
     </g:north>
     <g:center>
-      <cv:CellTable ui:field="table" stylePrimaryName="{style.table}" />
+      <cv:DataGrid ui:field="table" stylePrimaryName="{style.table}" />
     </g:center>
   </g:DockLayoutPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/TimeSlotListWidget.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/TimeSlotListWidget.java
index 41960ce..67fe878 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/TimeSlotListWidget.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/TimeSlotListWidget.java
@@ -20,7 +20,6 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.editor.client.EditorDelegate;
 import com.google.gwt.editor.client.ValueAwareEditor;
-import com.google.gwt.sample.dynatablerf.client.widgets.SummaryWidget.TableResources;
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory;
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.ScheduleRequest;
 import com.google.gwt.sample.dynatablerf.shared.TimeSlotProxy;
@@ -44,6 +43,12 @@
  */
 public class TimeSlotListWidget extends Composite implements ValueAwareEditor<List<TimeSlotProxy>> {
 
+  interface TableResources extends CellTable.Resources {
+    @Override
+    @Source(value = {CellTable.Style.DEFAULT_CSS, "CellTablePatch.css"})
+    CellTable.Style cellTableStyle();
+  }
+
   interface TimeSlotListWidgetUiBinder extends UiBinder<Widget, TimeSlotListWidget> {
   }
   
@@ -202,6 +207,7 @@
           columnDay = day;
         }
         
+        @Override
         public void update(int index, ScheduleRow row, String value) {
           if (acceptClicks) {
             row.toggleInUse(columnDay);
@@ -219,6 +225,7 @@
     initWidget(uiBinder.createAndBindUi(this));
   }
   
+  @Override
   public void flush() {
     HashMap<TimeSlotProxy, TimeSlotKey> index = new HashMap<TimeSlotProxy, TimeSlotKey>();
     
@@ -238,12 +245,15 @@
     }    
   }
 
+  @Override
   public void onPropertyChange(String... paths) {
   }
 
+  @Override
   public void setDelegate(EditorDelegate<List<TimeSlotProxy>> delegate) {
   }
 
+  @Override
   public void setValue(List<TimeSlotProxy> value) {
     backing = value;
     currentSchedule = new HashSet<TimeSlotKey>();
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java
index 4d67f48..69fac21 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java
@@ -16,17 +16,13 @@
 package com.google.gwt.sample.mobilewebapp.client.desktop;
 
 import com.google.gwt.cell.client.DateCell;
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.sample.mobilewebapp.client.activity.TaskListView;
 import com.google.gwt.sample.mobilewebapp.shared.TaskProxy;
-import com.google.gwt.uibinder.client.UiBinder;
-import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.user.cellview.client.CellTable;
 import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.DataGrid;
 import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
 import com.google.gwt.user.cellview.client.TextColumn;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.ResizeComposite;
 import com.google.gwt.view.client.NoSelectionModel;
 import com.google.gwt.view.client.SelectionChangeEvent;
 import com.google.gwt.view.client.SelectionModel;
@@ -37,25 +33,12 @@
 /**
  * View used to display the list of Tasks.
  */
-public class DesktopTaskListView extends Composite implements TaskListView {
-
-  /**
-   * The UiBinder interface.
-   */
-  interface DesktopTaskListViewUiBinder extends UiBinder<Widget, DesktopTaskListView> {
-  }
-
-  /**
-   * The UiBinder used to generate the view.
-   */
-  private static DesktopTaskListViewUiBinder uiBinder =
-      GWT.create(DesktopTaskListViewUiBinder.class);
+public class DesktopTaskListView extends ResizeComposite implements TaskListView {
 
   /**
    * Displays the list of tasks.
    */
-  @UiField(provided = true)
-  CellTable<TaskProxy> taskList;
+  DataGrid<TaskProxy> taskList;
 
   /**
    * The presenter for this view.
@@ -68,7 +51,7 @@
   public DesktopTaskListView() {
 
     // Create the CellTable.
-    taskList = new CellTable<TaskProxy>();
+    taskList = new DataGrid<TaskProxy>();
     taskList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED);
     taskList.setWidth("100%");
 
@@ -105,6 +88,7 @@
     final NoSelectionModel<TaskProxy> selectionModel = new NoSelectionModel<TaskProxy>();
     taskList.setSelectionModel(selectionModel);
     selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
+      @Override
       public void onSelectionChange(SelectionChangeEvent event) {
         // Edit the task.
         if (presenter != null) {
@@ -114,13 +98,15 @@
     });
 
     // Initialize the widget.
-    initWidget(uiBinder.createAndBindUi(this));
+    initWidget(taskList);
   }
 
+  @Override
   public void clearList() {
     taskList.setVisibleRangeAndClearData(taskList.getVisibleRange(), true);
   }
 
+  @Override
   public void setPresenter(Presenter presenter) {
     this.presenter = presenter;
   }
@@ -129,6 +115,7 @@
     taskList.setSelectionModel(selectionModel);
   }
 
+  @Override
   public void setTasks(List<TaskProxy> tasks) {
     taskList.setRowData(tasks);
   }
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.ui.xml b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.ui.xml
index 266cf6d..5ab10c9 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.ui.xml
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.ui.xml
@@ -9,7 +9,7 @@
   </ui:style>
 
   <g:ScrollPanel>
-    <c:CellTable
+    <c:DataGrid
       ui:field="taskList" />
   </g:ScrollPanel>