Fix paging in PagingTableListView, allow setPageSize after construction
Review at http://gwt-code-reviews.appspot.com/381801
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7961 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/src/com/google/gwt/bikeshed/list/client/Header.java b/bikeshed/src/com/google/gwt/bikeshed/list/client/Header.java
index 35f2936..72e0ea5 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/list/client/Header.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/list/client/Header.java
@@ -21,7 +21,7 @@
import com.google.gwt.dom.client.NativeEvent;
/**
- * A table column header.
+ * A table column header or footer.
*
* @param <H> the {#link Cell} type
*/
diff --git a/bikeshed/src/com/google/gwt/sample/bikeshed/cookbook/client/MailRecipe.java b/bikeshed/src/com/google/gwt/sample/bikeshed/cookbook/client/MailRecipe.java
index b178369..e0643f9 100644
--- a/bikeshed/src/com/google/gwt/sample/bikeshed/cookbook/client/MailRecipe.java
+++ b/bikeshed/src/com/google/gwt/sample/bikeshed/cookbook/client/MailRecipe.java
@@ -37,6 +37,7 @@
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
@@ -250,8 +251,20 @@
"Impress your colleagues with bling-bling", "Degree available",
"Rolex Watches", "Re: Re: yo bud", "Important notice"};
+ private Button add1Button;
+
+ private FocusWidget add5Button;
+
private List<Message> messages;
+ private Button nextPageButton;
+
+ private Button prevPageButton;
+
+ private Button remove1Button;
+
+ private Button remove5Button;
+
private MailSelectionModel selectionModel = new MailSelectionModel();
private PagingTableListView<Message> table;
@@ -270,6 +283,18 @@
for (Message item : selectedItems) {
selectionModel.setSelected(item, true);
}
+ } else if ("NEXT".equals(id)) {
+ table.nextPage();
+ updatePagingButtons();
+ } else if ("PREV".equals(id)) {
+ table.previousPage();
+ updatePagingButtons();
+ } else if (id.startsWith("ADD")) {
+ table.setPageSize(table.getPageSize() + Integer.parseInt(id.substring(3)));
+ updatePagingButtons();
+ } else if (id.startsWith("REM")) {
+ table.setPageSize(Math.max(table.getPageSize() - Integer.parseInt(id.substring(3)), 0));
+ updatePagingButtons();
} else {
selectionModel.setType(id);
}
@@ -282,7 +307,7 @@
Date now = new Date();
Random rand = new Random();
- for (int i = 0; i < 1000; i++) {
+ for (int i = 0; i < 25; i++) {
// Go back up to 90 days from the current date
long dateOffset = rand.nextInt(60 * 60 * 24 * 90) * 1000L;
Message message = new Message(10000 + i,
@@ -416,6 +441,18 @@
p.add(makeButton("Search Senders", "SENDER"));
p.add(new HTML("<br>"));
p.add(table);
+ p.add(prevPageButton = makeButton("Previous Page", "PREV"));
+ prevPageButton.setEnabled(false);
+ p.add(nextPageButton = makeButton("Next Page", "NEXT"));
+ nextPageButton.setEnabled(true);
+ p.add(remove1Button = makeButton("Remove row", "REM1"));
+ remove1Button.setEnabled(true);
+ p.add(add1Button = makeButton("Add row", "ADD1"));
+ add1Button.setEnabled(true);
+ p.add(remove5Button = makeButton("Remove 5 rows", "REM5"));
+ remove5Button.setEnabled(true);
+ p.add(add5Button = makeButton("Add 5 rows", "ADD5"));
+ add5Button.setEnabled(true);
p.add(new HTML("<br>"));
p.add(makeButton("Select None", "NONE"));
p.add(makeButton("Select All On This Page", "PAGE"));
@@ -427,12 +464,6 @@
return p;
}
- private Column<Message, String, Void> addColumn(
- PagingTableListView<Message> table, final String text,
- final GetValue<Message, String> getter) {
- return addColumn(table, text, TextCell.getInstance(), getter, null);
- }
-
private <C extends Comparable<C>> Column<Message, C, Void> addColumn(
PagingTableListView<Message> table, final String text,
final Cell<C, Void> cell, final GetValue<Message, C> getter,
@@ -469,6 +500,12 @@
return column;
}
+ private Column<Message, String, Void> addColumn(
+ PagingTableListView<Message> table, final String text,
+ final GetValue<Message, String> getter) {
+ return addColumn(table, text, TextCell.getInstance(), getter, null);
+ }
+
private Button makeButton(String label, String id) {
Button button = new Button(label);
button.getElement().setId(id);
@@ -487,4 +524,13 @@
});
}
}
+
+ private void updatePagingButtons() {
+ add1Button.setEnabled(table.canAddRows(1));
+ remove1Button.setEnabled(table.canRemoveRows(1));
+ add5Button.setEnabled(table.canAddRows(5));
+ remove5Button.setEnabled(table.canRemoveRows(5));
+ prevPageButton.setEnabled(table.hasPreviousPage());
+ nextPageButton.setEnabled(table.hasNextPage());
+ }
}