Revision: 9625
Author: [email protected]
Date: Wed Jan 26 11:03:00 2011
Log: Cherry picking r9614 and r9620 into releases/2.2 5917 and 5916.

http://code.google.com/p/google-web-toolkit/source/detail?r=9625

Modified:
/releases/2.2/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java /releases/2.2/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImpl.java /releases/2.2/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
 /releases/2.2/user/src/com/google/gwt/user/cellview/client/SimplePager.java

=======================================
--- /releases/2.2/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java Tue Jan 25 08:46:02 2011 +++ /releases/2.2/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java Wed Jan 26 07:58:14 2011
@@ -240,6 +240,10 @@
         new Receiver<List<PersonProxy>>() {
           @Override
           public void onSuccess(List<PersonProxy> response) {
+            if (lastFetch != start) {
+              return;
+            }
+
             int responses = response.size();
             table.setRowData(start, response);
             pager.setPageStart(start);
=======================================
--- /releases/2.2/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImpl.java Tue Nov 23 05:52:59 2010 +++ /releases/2.2/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImpl.java Wed Jan 26 07:58:14 2011
@@ -50,7 +50,7 @@
   /**
    * The set of natively focusable elements.
    */
-  private final Set<String> focusableTypes;
+  final Set<String> focusableTypes;

   CellBasedWidgetImpl() {
     focusableTypes = new HashSet<String>();
=======================================
--- /releases/2.2/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java Wed Sep 22 12:58:01 2010 +++ /releases/2.2/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java Wed Jan 26 07:58:14 2011
@@ -245,6 +245,12 @@
     changeEventTriggers.add("mouseup");
     changeEventTriggers.add("mousewheel");
   }
+
+  @Override
+  public boolean isFocusable(Element elem) {
+    return focusableTypes.contains(elem.getTagName().toLowerCase())
+        || getTabIndexIfSpecified(elem) >= 0;
+  }

   @Override
   public void onBrowserEvent(final Widget widget, Event event) {
@@ -340,6 +346,16 @@
       return super.sinkEvent(widget, typeName);
     }
   }
+
+  /**
+   * Get the tab index of an element if the tab index is specified.
+   *
+   * @param elem the Element
+   * @return the tab index, or -1 if not specified
+   */
+  private native int getTabIndexIfSpecified(Element elem) /*-{
+ return elem.getAttributeNode('tabIndex').specified ? elem.tabIndex : -1;
+  }-*/;

   /**
    * Initialize the focus event listener.
=======================================
--- /releases/2.2/user/src/com/google/gwt/user/cellview/client/SimplePager.java Wed Oct 6 10:05:51 2010 +++ /releases/2.2/user/src/com/google/gwt/user/cellview/client/SimplePager.java Wed Jan 26 07:58:14 2011
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 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
@@ -24,6 +24,7 @@
 import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.resources.client.ImageResource.ImageOptions;
 import com.google.gwt.uibinder.client.UiConstructor;
+import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.HorizontalPanel;
@@ -34,7 +35,7 @@
 /**
  * A pager for controlling a {@link HasRows} that only supports simple page
  * navigation.
- *
+ *
  * <p>
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.cellview.SimplePagerExample}
@@ -141,6 +142,53 @@
   public static enum TextLocation {
     CENTER, LEFT, RIGHT;
   }
+
+  /**
+   * An {@link Image} that acts as a button.
+   */
+  private static class ImageButton extends Image {
+    private boolean disabled;
+    private final ImageResource resDisabled;
+    private final ImageResource resEnabled;
+    private final String styleDisabled;
+
+    public ImageButton(ImageResource resEnabled, ImageResource resDiabled,
+        String disabledStyle) {
+      super(resEnabled);
+      this.resEnabled = resEnabled;
+      this.resDisabled = resDiabled;
+      this.styleDisabled = disabledStyle;
+    }
+
+    public boolean isDisabled() {
+      return disabled;
+    }
+
+    @Override
+    public void onBrowserEvent(Event event) {
+      // Ignore events if disabled.
+      if (disabled) {
+        return;
+      }
+
+      super.onBrowserEvent(event);
+    }
+
+    public void setDisabled(boolean isDisabled) {
+      if (this.disabled == isDisabled) {
+        return;
+      }
+
+      this.disabled = isDisabled;
+      if (disabled) {
+        setResource(resDisabled);
+        getElement().getParentElement().addClassName(styleDisabled);
+      } else {
+        setResource(resEnabled);
+        getElement().getParentElement().removeClassName(styleDisabled);
+      }
+    }
+  }

   private static int DEFAULT_FAST_FORWARD_ROWS = 1000;
   private static Resources DEFAULT_RESOURCES;
@@ -152,32 +200,20 @@
     return DEFAULT_RESOURCES;
   }

-  private final Image fastForward;
+  private final ImageButton fastForward;

   private final int fastForwardRows;

-  private final Image firstPage;
+  private final ImageButton firstPage;

   /**
    * We use an {@link HTML} so we can embed the loading image.
    */
   private final HTML label = new HTML();

-  private final Image lastPage;
-
-  /**
-   * Set to true when the next and last buttons are disabled.
-   */
-  private boolean nextDisabled;
-
-  private final Image nextPage;
-
-  /**
-   * Set to true when the prev and first buttons are disabled.
-   */
-  private boolean prevDisabled;
-
-  private final Image prevPage;
+  private final ImageButton lastPage;
+  private final ImageButton nextPage;
+  private final ImageButton prevPage;

   /**
    * The {@link Resources} used by this widget.
@@ -198,7 +234,7 @@

   /**
    * Construct a {@link SimplePager} with the specified text location.
-   *
+   *
    * @param location the location of the text relative to the buttons
    */
   @UiConstructor
@@ -210,7 +246,7 @@

   /**
    * Construct a {@link SimplePager} with the specified resources.
-   *
+   *
    * @param location the location of the text relative to the buttons
    * @param resources the {@link Resources} to use
    * @param showFastForwardButton if true, show a fast-forward button that
@@ -227,26 +263,31 @@
     this.style.ensureInjected();

     // Create the buttons.
-    firstPage = new Image(resources.simplePagerFirstPage());
+    String disabledStyle = style.disabledButton();
+    firstPage = new ImageButton(resources.simplePagerFirstPage(),
+        resources.simplePagerFirstPageDisabled(), disabledStyle);
     firstPage.addClickHandler(new ClickHandler() {
       public void onClick(ClickEvent event) {
         firstPage();
       }
     });
-    nextPage = new Image(resources.simplePagerNextPage());
+    nextPage = new ImageButton(resources.simplePagerNextPage(),
+        resources.simplePagerNextPageDisabled(), disabledStyle);
     nextPage.addClickHandler(new ClickHandler() {
       public void onClick(ClickEvent event) {
         nextPage();
       }
     });
-    prevPage = new Image(resources.simplePagerPreviousPage());
+    prevPage = new ImageButton(resources.simplePagerPreviousPage(),
+        resources.simplePagerPreviousPageDisabled(), disabledStyle);
     prevPage.addClickHandler(new ClickHandler() {
       public void onClick(ClickEvent event) {
         previousPage();
       }
     });
     if (showLastPageButton) {
-      lastPage = new Image(resources.simplePagerLastPage());
+      lastPage = new ImageButton(resources.simplePagerLastPage(),
+          resources.simplePagerLastPageDisabled(), disabledStyle);
       lastPage.addClickHandler(new ClickHandler() {
         public void onClick(ClickEvent event) {
           lastPage();
@@ -256,7 +297,8 @@
       lastPage = null;
     }
     if (showFastForwardButton) {
-      fastForward = new Image(resources.simplePagerFastForward());
+      fastForward = new ImageButton(resources.simplePagerFastForward(),
+          resources.simplePagerFastForwardDisabled(), disabledStyle);
       fastForward.addClickHandler(new ClickHandler() {
         public void onClick(ClickEvent event) {
           setPage(getPage() + getFastForwardPages());
@@ -402,7 +444,7 @@

   /**
* Get the text to display in the pager that reflects the state of the pager.
-   *
+   *
    * @return the text
    */
   protected String createText() {
@@ -439,19 +481,19 @@
    * Check if the next button is disabled. Visible for testing.
    */
   boolean isNextButtonDisabled() {
-    return nextDisabled;
+    return nextPage.isDisabled();
   }

   /**
    * Check if the previous button is disabled. Visible for testing.
    */
   boolean isPreviousButtonDisabled() {
-    return prevDisabled;
+    return prevPage.isDisabled();
   }

   /**
* Get the number of pages to fast forward based on the current page size.
-   *
+   *
    * @return the number of pages to fast forward
    */
   private int getFastForwardPages() {
@@ -461,7 +503,7 @@

   /**
    * Enable or disable the fast forward button.
-   *
+   *
    * @param disabled true to disable, false to enable
    */
   private void setFastForwardDisabled(boolean disabled) {
@@ -481,61 +523,23 @@

   /**
    * Enable or disable the next page buttons.
-   *
+   *
    * @param disabled true to disable, false to enable
    */
   private void setNextPageButtonsDisabled(boolean disabled) {
-    if (disabled == nextDisabled) {
-      return;
-    }
-
-    nextDisabled = disabled;
-    if (disabled) {
-      nextPage.setResource(resources.simplePagerNextPageDisabled());
-      nextPage.getElement().getParentElement().addClassName(
-          style.disabledButton());
-      if (lastPage != null) {
-        lastPage.setResource(resources.simplePagerLastPageDisabled());
-        lastPage.getElement().getParentElement().addClassName(
-            style.disabledButton());
-      }
-    } else {
-      nextPage.setResource(resources.simplePagerNextPage());
-      nextPage.getElement().getParentElement().removeClassName(
-          style.disabledButton());
-      if (lastPage != null) {
-        lastPage.setResource(resources.simplePagerLastPage());
-        lastPage.getElement().getParentElement().removeClassName(
-            style.disabledButton());
-      }
+    nextPage.setDisabled(disabled);
+    if (lastPage != null) {
+      lastPage.setDisabled(disabled);
     }
   }

   /**
    * Enable or disable the previous page buttons.
-   *
+   *
    * @param disabled true to disable, false to enable
    */
   private void setPrevPageButtonsDisabled(boolean disabled) {
-    if (disabled == prevDisabled) {
-      return;
-    }
-
-    prevDisabled = disabled;
-    if (disabled) {
-      firstPage.setResource(resources.simplePagerFirstPageDisabled());
-      firstPage.getElement().getParentElement().addClassName(
-          style.disabledButton());
-      prevPage.setResource(resources.simplePagerPreviousPageDisabled());
-      prevPage.getElement().getParentElement().addClassName(
-          style.disabledButton());
-    } else {
-      firstPage.setResource(resources.simplePagerFirstPage());
-      firstPage.getElement().getParentElement().removeClassName(
-          style.disabledButton());
-      prevPage.setResource(resources.simplePagerPreviousPage());
-      prevPage.getElement().getParentElement().removeClassName(
-          style.disabledButton());
-    }
+    firstPage.setDisabled(disabled);
+    prevPage.setDisabled(disabled);
   }
 }

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

Reply via email to