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..b6dd029 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()); /*