Revision: 8658
Author: [email protected]
Date: Fri Aug 27 05:03:20 2010
Log: Adding RTL support to Cell Widgets. CellBrowser opens from the right
in RTL mode. CellTree open/close icons appear on the right in RTL mode.
IconCell shows the image on the right. As part of this change, I had to
change the location of the ruler in LayoutImpl. It used to be shifted to
the top and left out of view, but this causes unintended scrollbars in RTL
mode. Shifting it off to the top does not affect scrollbars, but still
hides the ruler completely.
We will add bidi support to cells in a seperate pass, which will set the
direction of text based on the content being rendered.
Review at http://gwt-code-reviews.appspot.com/783802
Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=8658
Modified:
/trunk/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java
/trunk/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/RangeLabelPager.java
/trunk/user/src/com/google/gwt/cell/client/IconCellDecorator.java
/trunk/user/src/com/google/gwt/layout/client/LayoutImpl.java
/trunk/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
/trunk/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
/trunk/user/src/com/google/gwt/user/cellview/client/CellTree.java
/trunk/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
/trunk/user/src/com/google/gwt/user/cellview/client/SimplePager.java
=======================================
---
/trunk/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java
Tue Aug 17 10:14:36 2010
+++
/trunk/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java
Fri Aug 27 05:03:20 2010
@@ -156,7 +156,7 @@
sb.append("\"></input>");
if (invalid) {
- sb.append("<span style='color:red;'>");
+ sb.append(" <span style='color:red;'>");
sb.append(errorMessage);
sb.append("</span>");
}
=======================================
---
/trunk/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/RangeLabelPager.java
Tue Aug 17 10:14:36 2010
+++
/trunk/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/RangeLabelPager.java
Fri Aug 27 05:03:20 2010
@@ -15,6 +15,7 @@
*/
package com.google.gwt.sample.showcase.client.content.cell;
+import com.google.gwt.i18n.client.HasDirection;
import com.google.gwt.user.cellview.client.AbstractPager;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.view.client.HasRows;
@@ -44,6 +45,7 @@
Range range = display.getVisibleRange();
int start = range.getStart();
int end = start + range.getLength();
- label.setText(start + " - " + end + " : " + display.getRowCount());
+ label.setText(start + " - " + end + " : " + display.getRowCount(),
+ HasDirection.Direction.LTR);
}
}
=======================================
--- /trunk/user/src/com/google/gwt/cell/client/IconCellDecorator.java Thu
Aug 5 10:37:27 2010
+++ /trunk/user/src/com/google/gwt/cell/client/IconCellDecorator.java Fri
Aug 27 05:03:20 2010
@@ -17,6 +17,7 @@
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import
com.google.gwt.user.client.ui.HasVerticalAlignment.VerticalAlignmentConstant;
@@ -37,6 +38,7 @@
private final Cell<C> cell;
private final String iconHtml;
private final int imageWidth;
+ private final String outerDivHtml;
private final String placeHolderHtml;
/**
@@ -64,6 +66,16 @@
this.iconHtml = getImageHtml(icon, valign, false);
this.imageWidth = icon.getWidth() + 6;
this.placeHolderHtml = getImageHtml(icon, valign, true);
+
+ // Cache the HTML for the outer div.
+ String theOuterDivHtml = "<div style='position:relative;";
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ theOuterDivHtml += "padding-right:";
+ } else {
+ theOuterDivHtml += "padding-left:";
+ }
+ theOuterDivHtml += imageWidth + "px;'>";
+ this.outerDivHtml = theOuterDivHtml;
}
public boolean dependsOnSelection() {
@@ -77,7 +89,7 @@
public boolean handlesSelection() {
return cell.handlesSelection();
}
-
+
public boolean isEditing(Element element, C value, Object key) {
return cell.isEditing(element, value, key);
}
@@ -88,9 +100,7 @@
}
public void render(C value, Object key, StringBuilder sb) {
- sb.append("<div style='position:relative;padding-left:");
- sb.append(imageWidth);
- sb.append("px;'>");
+ sb.append(outerDivHtml);
if (isIconUsed(value)) {
sb.append(getIconHtml(value));
} else {
@@ -141,7 +151,12 @@
boolean isPlaceholder) {
// Add the position and dimensions.
StringBuilder sb = new StringBuilder();
- sb.append("<div
style=\"position:absolute;left:0px;top:0px;height:100%;");
+ sb.append("<div style=\"position:absolute;top:0px;height:100%;");
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ sb.append("right:0px;");
+ } else {
+ sb.append("left:0px;");
+ }
sb.append("width:").append(res.getWidth()).append("px;");
// Add the background, vertically centered.
=======================================
--- /trunk/user/src/com/google/gwt/layout/client/LayoutImpl.java Fri Nov 20
06:21:44 2009
+++ /trunk/user/src/com/google/gwt/layout/client/LayoutImpl.java Fri Aug 27
05:03:20 2010
@@ -52,9 +52,8 @@
style.setPosition(Position.ABSOLUTE);
style.setZIndex(-32767);
- // Position the ruler off the left/top edges, double the size just to
be
+ // Position the ruler off the top edge, double the size just to be
// extra sure it doesn't show up on the screen.
- style.setLeft(-20, widthUnit);
style.setTop(-20, heightUnit);
// Note that we are making the ruler element 10x10, because some
browsers
@@ -79,7 +78,8 @@
Element beforeContainer = null;
if (before != null) {
beforeContainer = before.getParentElement();
- assert beforeContainer.getParentElement() == parent : "Element to
insert before must be a sibling";
+ assert beforeContainer.getParentElement()
+ == parent : "Element to insert before must be a sibling";
}
parent.insertBefore(container, beforeContainer);
return container;
@@ -100,28 +100,30 @@
public void finalizeLayout(Element parent) {
}
- public double getUnitSizeInPixels(Element parent, Unit unit, boolean
vertical) {
+ public double getUnitSizeInPixels(
+ Element parent, Unit unit, boolean vertical) {
if (unit == null) {
return 1;
}
switch (unit) {
case PCT:
- return (vertical ? parent.getClientHeight() :
parent.getClientWidth()) / 100.0;
+ return (vertical ? parent.getClientHeight() :
parent.getClientWidth())
+ / 100.0;
case EM:
return relativeRuler.getOffsetWidth() / 10.0;
case EX:
return relativeRuler.getOffsetHeight() / 10.0;
case CM:
- return fixedRuler.getOffsetWidth() * 0.1; // 1.0 cm / cm
+ return fixedRuler.getOffsetWidth() * 0.1; // 1.0 cm / cm
case MM:
- return fixedRuler.getOffsetWidth() * 0.01; // 0.1 cm / mm
+ return fixedRuler.getOffsetWidth() * 0.01; // 0.1 cm / mm
case IN:
- return fixedRuler.getOffsetWidth() * 0.254; // 2.54 cm / in
+ return fixedRuler.getOffsetWidth() * 0.254; // 2.54 cm / in
case PT:
return fixedRuler.getOffsetWidth() * 0.00353; // 0.0353 cm / pt
case PC:
- return fixedRuler.getOffsetWidth() * 0.0423; // 0.423 cm / pc
+ return fixedRuler.getOffsetWidth() * 0.0423; // 0.423 cm / pc
default:
case PX:
return 1;
@@ -136,18 +138,18 @@
public void layout(Layer layer) {
Style style = layer.container.getStyle();
- style.setProperty("left", layer.setLeft
- ? (layer.left + layer.leftUnit.getType()) : "");
- style.setProperty("top", layer.setTop
- ? (layer.top + layer.topUnit.getType()) : "");
- style.setProperty("right", layer.setRight
- ? (layer.right + layer.rightUnit.getType()) : "");
- style.setProperty("bottom", layer.setBottom
- ? (layer.bottom + layer.bottomUnit.getType()) : "");
- style.setProperty("width", layer.setWidth
- ? (layer.width + layer.widthUnit.getType()) : "");
- style.setProperty("height", layer.setHeight
- ? (layer.height + layer.heightUnit.getType()) : "");
+ style.setProperty(
+ "left", layer.setLeft ? (layer.left +
layer.leftUnit.getType()) : "");
+ style.setProperty(
+ "top", layer.setTop ? (layer.top + layer.topUnit.getType()) : "");
+ style.setProperty("right",
+ layer.setRight ? (layer.right + layer.rightUnit.getType()) : "");
+ style.setProperty("bottom",
+ layer.setBottom ? (layer.bottom +
layer.bottomUnit.getType()) : "");
+ style.setProperty("width",
+ layer.setWidth ? (layer.width + layer.widthUnit.getType()) : "");
+ style.setProperty("height",
+ layer.setHeight ? (layer.height +
layer.heightUnit.getType()) : "");
style = layer.child.getStyle();
switch (layer.hPos) {
=======================================
---
/trunk/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
Mon Aug 2 11:31:26 2010
+++
/trunk/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
Fri Aug 27 05:03:20 2010
@@ -22,6 +22,7 @@
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
+import com.google.gwt.dom.client.InputElement;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
@@ -53,7 +54,7 @@
/**
* The last value of the focused input element.
*/
- private static String focusedInputValue;
+ private static Object focusedInputValue;
/**
* The set of input types that can receive change events.
@@ -97,12 +98,26 @@
}-*/;
/**
- * Get the value of an element that has a value.
+ * Get the value of an element that has a value or checked state.
*
* @param elem the input element
* @return the value of the input
*/
- private static native String getInputValue(Element elem) /*-{
+ private static Object getInputValue(Element elem) {
+ if (isCheckbox(elem)) {
+ return InputElement.as(elem).isChecked();
+ }
+ return getInputValueImpl(elem);
+ }
+
+ /**
+ * Get the value of an element that has a value, such as an input
element,
+ * textarea, or select box.
+ *
+ * @param elem the input element
+ * @return the value of the input
+ */
+ private static native String getInputValueImpl(Element elem) /*-{
return elem.value;
}-*/;
@@ -147,7 +162,8 @@
if (inputTypes.contains(tagName)) {
focusedInput = target;
focusedInputValue = getInputValue(target);
- focusedInputChangesOnBlurOnly = !"select".equals(tagName);
+ focusedInputChangesOnBlurOnly = !"select".equals(tagName)
+ && !isCheckbox(target);
}
// The focus event has not fired yet, so we just need to set the
@@ -165,6 +181,20 @@
dispatchEvent(event, widget.getElement(), listener);
}
}
+
+ /**
+ * Check whether or not an element is a checkbox or radio button.
+ *
+ * @param elem the element to check
+ * @return true if a checkbox, false if not
+ */
+ private static boolean isCheckbox(Element elem) {
+ if (elem == null || !"input".equalsIgnoreCase(elem.getTagName())) {
+ return false;
+ }
+ String inputType = InputElement.as(elem).getType().toLowerCase();
+ return "checkbox".equals(inputType) || "radio".equals(inputType);
+ }
/**
* Synthesize a change event on the focused input element if the value
has
@@ -177,7 +207,7 @@
return;
}
- String newValue = getInputValue(focusedInput);
+ Object newValue = getInputValue(focusedInput);
if (!newValue.equals(focusedInputValue)) {
// Save the new value in case it changes again.
focusedInputValue = newValue;
@@ -273,7 +303,7 @@
// Sink the events required for focus. We use an attribute on the
widget
// to remember whether or not we've sunk the events.
- int eventsToSink = -1;
+ int eventsToSink = 0;
Element elem = widget.getElement();
String attr = "__gwtCellBasedWidgetImplDispatchingFocus";
if (!"true".equals(elem.getAttribute(attr))) {
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
Tue Aug 24 17:28:21 2010
+++ /trunk/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
Fri Aug 27 05:03:20 2010
@@ -31,6 +31,7 @@
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
@@ -59,6 +60,12 @@
/**
* A "browsable" view of a tree in which only a single node per level may
be
* open at one time.
+ *
+ * <p>
+ * This widget will <em>only</em> work in standards mode, which requires
that
+ * the HTML page in which it is run have an explicit <!DOCTYPE>
+ * declaration.
+ * </p>
*/
public class CellBrowser extends AbstractCellTree
implements ProvidesResize, RequiresResize, HasAnimation {
@@ -71,24 +78,26 @@
/**
* An image indicating a closed branch.
*/
+ @ImageOptions(flipRtl = true)
ImageResource cellBrowserClosed();
/**
* An image indicating an open branch.
*/
+ @ImageOptions(flipRtl = true)
ImageResource cellBrowserOpen();
/**
* The background used for open items.
*/
- @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal, flipRtl = true)
ImageResource cellBrowserOpenBackground();
/**
* The background used for selected items.
*/
@Source("cellTreeSelectedBackground.png")
- @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal, flipRtl = true)
ImageResource cellBrowserSelectedBackground();
/**
@@ -311,6 +320,9 @@
void scrollToEnd() {
Element elem = getElement();
targetScrollLeft = elem.getScrollWidth() - elem.getClientWidth();
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ targetScrollLeft *= -1;
+ }
if (isAnimationEnabled()) {
// Animate the scrolling.
@@ -593,9 +605,12 @@
scrollLock.getStyle().setPosition(Position.ABSOLUTE);
scrollLock.getStyle().setVisibility(Visibility.HIDDEN);
scrollLock.getStyle().setZIndex(-32767);
- scrollLock.getStyle().setBackgroundColor("red");
scrollLock.getStyle().setTop(0, Unit.PX);
- scrollLock.getStyle().setLeft(0, Unit.PX);
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ scrollLock.getStyle().setRight(0, Unit.PX);
+ } else {
+ scrollLock.getStyle().setLeft(0, Unit.PX);
+ }
scrollLock.getStyle().setHeight(1, Unit.PX);
scrollLock.getStyle().setWidth(1, Unit.PX);
getElement().appendChild(scrollLock);
@@ -708,7 +723,7 @@
* scroll bar.
*/
private void adjustScrollLock() {
- int scrollLeft = getElement().getScrollLeft();
+ int scrollLeft = Math.abs(getElement().getScrollLeft());
if (scrollLeft > 0) {
int clientWidth = getElement().getClientWidth();
scrollLock.getStyle().setWidth(scrollLeft + clientWidth, Unit.PX);
@@ -758,7 +773,11 @@
// Add the view to the LayoutPanel.
SplitLayoutPanel splitPanel = getSplitLayoutPanel();
- splitPanel.insertWest(scrollable, defaultWidth, null);
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ splitPanel.insertEast(scrollable, defaultWidth, null);
+ } else {
+ splitPanel.insertWest(scrollable, defaultWidth, null);
+ }
splitPanel.setWidgetMinSize(scrollable, minWidth);
splitPanel.forceLayout();
@@ -775,7 +794,12 @@
private String getImageHtml(ImageResource res) {
// Add the position and dimensions.
StringBuilder sb = new StringBuilder();
- sb.append("<div
style=\"position:absolute;right:0px;top:0px;height:100%;");
+ sb.append("<div style=\"position:absolute;top:0px;height:100%;");
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ sb.append("left:0px;");
+ } else {
+ sb.append("right:0px;");
+ }
sb.append("width:").append(res.getWidth()).append("px;");
// Add the background, vertically centered.
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/CellTree.java Tue
Aug 24 17:28:21 2010
+++ /trunk/user/src/com/google/gwt/user/cellview/client/CellTree.java Fri
Aug 27 05:03:20 2010
@@ -22,6 +22,7 @@
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
@@ -36,6 +37,12 @@
/**
* A view of a tree.
+ *
+ * <p>
+ * This widget will <em>only</em> work in standards mode, which requires
that
+ * the HTML page in which it is run have an explicit <!DOCTYPE>
+ * declaration.
+ * </p>
*/
public class CellTree extends AbstractCellTree implements HasAnimation {
@@ -568,7 +575,7 @@
CellTreeNodeView<?> nodeView = findItemByChain(chain, 0, rootNode);
if (nodeView != null && nodeView != rootNode) {
- if ("click".equals(event.getType())) {
+ if ("click".equals(eventType)) {
// Open the node when the open image is clicked.
Element showMoreElem = nodeView.getShowMoreElement();
if (nodeView.getImageElement().isOrHasChild(target)) {
@@ -578,7 +585,7 @@
nodeView.showMore();
return;
}
-
+ } else if ("mouseup".equals(eventType)) {
// Move the keyboard focus to the clicked item
keyboardSelectedNode.keyboardExit();
keyboardSelectedNode = nodeView.getParentNode();
@@ -737,7 +744,12 @@
sb.append("' ");
// Add the position and dimensions.
- sb.append("style=\"position:absolute;left:0px;top:0px;");
+ sb.append("style=\"position:absolute;top:0px;");
+ if (LocaleInfo.getCurrentLocale().isRTL()) {
+ sb.append("right:0px;");
+ } else {
+ sb.append("left:0px;");
+ }
sb.append("height:").append(res.getHeight()).append("px;");
sb.append("width:").append(res.getWidth()).append("px;");
=======================================
---
/trunk/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
Tue Aug 24 17:28:21 2010
+++
/trunk/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
Fri Aug 27 05:03:20 2010
@@ -27,9 +27,10 @@
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
-import com.google.gwt.event.shared.GwtEvent.Type;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.event.shared.GwtEvent.Type;
+import com.google.gwt.i18n.client.LocaleInfo;
import
com.google.gwt.user.cellview.client.HasDataPresenter.ElementIterator;
import com.google.gwt.user.cellview.client.HasDataPresenter.LoadingState;
import com.google.gwt.user.client.ui.UIObject;
@@ -102,13 +103,13 @@
SelectionModel<? super C> selectionModel) {
// Cache the style names that will be used for each child.
CellTree.Style style = nodeView.tree.getStyle();
- String selectedStyle = style.selectedItem();
+ String selectedStyle = " " + style.selectedItem();
String itemStyle = style.item();
String itemImageValueStyle = style.itemImageValue();
String itemValueStyle = style.itemValue();
- String openStyle = style.openItem();
- String topStyle = style.topItem();
- String topImageValueStyle = style.topItemImageValue();
+ String openStyle = " " + style.openItem();
+ String topStyle = " " + style.topItem();
+ String topImageValueStyle = " " + style.topItemImageValue();
boolean isRootNode = nodeView.isRootNode();
String openImage = nodeView.tree.getOpenImageHtml(isRootNode);
String closedImage = nodeView.tree.getClosedImageHtml(isRootNode);
@@ -128,6 +129,7 @@
}
// Render the child nodes.
+ boolean isRtl = LocaleInfo.getCurrentLocale().isRTL();
ProvidesKey<C> providesKey = nodeInfo.getProvidesKey();
TreeViewModel model = nodeView.tree.getTreeViewModel();
for (C value : values) {
@@ -138,26 +140,35 @@
sb.append("<div>");
// The selection pads the content based on the depth.
- sb.append("<div style='padding-left:");
+ if (isRtl) {
+ sb.append("<div style='padding-right:");
+ } else {
+ sb.append("<div style='padding-left:");
+ }
sb.append(paddingLeft);
sb.append("px;' class='").append(itemStyle);
if (isOpen) {
- sb.append(" ").append(openStyle);
+ sb.append(openStyle);
}
if (isRootNode) {
- sb.append(" ").append(topStyle);
+ sb.append(topStyle);
}
if (selectionModel != null && selectionModel.isSelected(value)) {
- sb.append(" ").append(selectedStyle);
+ sb.append(selectedStyle);
}
sb.append("'>");
// Inner div contains image and value.
- sb.append("<div onclick=''
style='position:relative;padding-left:");
+ if (isRtl) {
+ sb.append(
+ "<div onclick='' style='position:relative;padding-right:");
+ } else {
+ sb.append("<div onclick=''
style='position:relative;padding-left:");
+ }
sb.append(imageWidth);
sb.append("px;' class='").append(itemImageValueStyle);
if (isRootNode) {
- sb.append(" ").append(topImageValueStyle);
+ sb.append(topImageValueStyle);
}
sb.append("'>");
@@ -1124,8 +1135,9 @@
if (keyboardSelection == null) {
return;
}
- Element child =
- keyboardSelection.getFirstChildElement().getFirstChildElement();
+
+ Element parent = keyboardSelection.getFirstChildElement();
+ Element child = parent.getFirstChildElement();
child.removeAttribute("tabIndex");
child.removeClassName(tree.getStyle().keyboardSelectedItem());
keyboardSelection = null;
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/SimplePager.java
Tue Aug 17 10:14:36 2010
+++ /trunk/user/src/com/google/gwt/user/cellview/client/SimplePager.java
Fri Aug 27 05:03:20 2010
@@ -22,6 +22,7 @@
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
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.ui.HTML;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
@@ -44,51 +45,61 @@
/**
* The image used to skip ahead multiple pages.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerFastForward();
/**
* The disabled "fast forward" image.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerFastForwardDisabled();
/**
* The image used to go to the first page.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerFirstPage();
/**
* The disabled first page image.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerFirstPageDisabled();
/**
* The image used to go to the last page.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerLastPage();
/**
* The disabled last page image.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerLastPageDisabled();
/**
* The image used to go to the next page.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerNextPage();
/**
* The disabled next page image.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerNextPageDisabled();
/**
* The image used to go to the previous page.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerPreviousPage();
/**
* The disabled previous page image.
*/
+ @ImageOptions(flipRtl = true)
ImageResource simplePagerPreviousPageDisabled();
/**
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors