Introduced PagerFactory to allow easy swap of pagers for CellBrowser.
Review at http://gwt-code-reviews.appspot.com/1659803
Review by: jlabanca@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10905 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
index b5bbfe8..b6dd0292 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -57,6 +57,7 @@
import com.google.gwt.user.client.ui.SplitLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.HasData;
+import com.google.gwt.view.client.HasRows;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.TreeViewModel;
@@ -780,6 +781,24 @@
}
/**
+ * Pager factory used to create pagers for each {@link CellList} of the
+ * {@link CellBrowser}.
+ */
+ public static interface PagerFactory {
+ AbstractPager create(HasRows display);
+ }
+
+ /**
+ * Default pager.
+ */
+ private static class PageSizePagerFactory implements PagerFactory {
+ @Override
+ public AbstractPager create(HasRows display) {
+ return new PageSizePager(display.getVisibleRange().getLength());
+ }
+ }
+
+ /**
* Builder object to create CellBrowser.
*
* @param <T> the type of data in the root node
@@ -788,6 +807,8 @@
private final TreeViewModel viewModel;
private final T rootValue;
private Widget loadingIndicator;
+ private PagerFactory pagerFactory = new PageSizePagerFactory();
+ private Integer pageSize;
private Resources resources;
/**
@@ -822,6 +843,32 @@
}
/**
+ * Set the pager factory used to create pagers for each {@link CellList}.
+ * Defaults to {@link PageSizePagerFactory} if not set.
+ *
+ * Can be set to null if no pager should be used. You should also set pageSize
+ * big enough to hold all your data then.
+ *
+ * @param factory the pager factory
+ * @return this
+ */
+ public Builder<T> pagerFactory(PagerFactory factory) {
+ this.pagerFactory = factory;
+ return this;
+ }
+
+ /**
+ * Set the pager size for each {@link CellList}.
+ *
+ * @param pageSize the page size
+ * @return this
+ */
+ public Builder<T> pageSize(int pageSize) {
+ this.pageSize = pageSize;
+ return this;
+ }
+
+ /**
* Set resources used for images.
*
* @param resources the {@link Resources} used for images
@@ -908,6 +955,16 @@
private final SafeHtml openImageHtml;
/**
+ * Factory used to create pagers for CellLists.
+ */
+ private final PagerFactory pagerFactory;
+
+ /**
+ * Page size for CellLists.
+ */
+ private final Integer pageSize;
+
+ /**
* The element used to maintain the scrollbar when columns are removed.
*/
private Element scrollLock;
@@ -954,6 +1011,8 @@
this.style.ensureInjected();
this.cellListResources = new CellListResourcesImpl(resources);
this.loadingIndicator = builder.loadingIndicator;
+ this.pagerFactory = builder.pagerFactory;
+ this.pageSize = builder.pageSize;
initWidget(new SplitLayoutPanel());
getElement().getStyle().setOverflow(Overflow.AUTO);
setStyleName(this.style.cellBrowserWidget());
@@ -1067,7 +1126,10 @@
* @return the pager
*/
protected <C> Widget createPager(HasData<C> display) {
- PageSizePager pager = new PageSizePager(display.getVisibleRange().getLength());
+ if (pagerFactory == null) {
+ return null;
+ }
+ AbstractPager pager = pagerFactory.create(display);
pager.setDisplay(display);
return pager;
}
@@ -1155,6 +1217,9 @@
if (loadingIndicator != null) {
display.setLoadingIndicator(loadingIndicator);
}
+ if (pageSize != null) {
+ display.setPageSize(pageSize);
+ }
display.setValueUpdater(nodeInfo.getValueUpdater());
/*