Revision: 8527
Author: [email protected]
Date: Thu Aug 12 09:42:27 2010
Log: This patch allow empty row data lists that start on the pageStart to
pass through the AbstractListViewAdapter and HasDataPresenter down to the
HasData implementation (such as CellList). This ensures that Cell Widgets
clear the view when the row count goes to 0. Before this change, setting
the rowCount to zero would redraw with the empty list, but the empty list
was considered "out of range."
http://code.google.com/p/google-web-toolkit/issues/detail?id=5149
Review at http://gwt-code-reviews.appspot.com/756801
Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=8527
Modified:
/trunk/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java
/trunk/user/src/com/google/gwt/view/client/AbstractListViewAdapter.java
/trunk/user/src/com/google/gwt/view/client/ListViewAdapter.java
/trunk/user/test/com/google/gwt/user/cellview/client/HasDataPresenterTest.java
/trunk/user/test/com/google/gwt/view/client/AbstractListViewAdapterTest.java
/trunk/user/test/com/google/gwt/view/client/ListViewAdapterTest.java
=======================================
---
/trunk/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java
Tue Aug 10 07:37:40 2010
+++
/trunk/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java
Thu Aug 12 09:42:27 2010
@@ -381,8 +381,9 @@
int pageEnd = pageStart + pageSize;
int boundedStart = Math.max(start, pageStart);
int boundedEnd = Math.min(valuesEnd, pageEnd);
- if (boundedStart >= boundedEnd) {
+ if (start != pageStart && boundedStart >= boundedEnd) {
// The data is out of range for the current page.
+ // Intentionally allow empty lists that start on the page start.
return;
}
=======================================
--- /trunk/user/src/com/google/gwt/view/client/AbstractListViewAdapter.java
Tue Aug 10 07:37:40 2010
+++ /trunk/user/src/com/google/gwt/view/client/AbstractListViewAdapter.java
Thu Aug 12 09:42:27 2010
@@ -207,8 +207,9 @@
int curStart = range.getStart();
int curLength = range.getLength();
int curEnd = curStart + curLength;
- if (curStart < end && curEnd > start) {
+ if (start == curStart || (curStart < end && curEnd > start)) {
// Fire the handler with the data that is in the range.
+ // Allow an empty list that starts on the page start.
int realStart = curStart < start ? start : curStart;
int realEnd = curEnd > end ? end : curEnd;
int realLength = realEnd - realStart;
=======================================
--- /trunk/user/src/com/google/gwt/view/client/ListViewAdapter.java Tue Aug
10 10:18:55 2010
+++ /trunk/user/src/com/google/gwt/view/client/ListViewAdapter.java Thu Aug
12 09:42:27 2010
@@ -489,6 +489,10 @@
@Override
protected void onRangeChanged(HasData<T> view) {
- updateViewData(view, 0, listWrapper.size(), listWrapper);
+ int size = listWrapper.size();
+ if (size > 0) {
+ // Do not push data if the data set is empty.
+ updateViewData(view, 0, size, listWrapper);
+ }
}
}
=======================================
---
/trunk/user/test/com/google/gwt/user/cellview/client/HasDataPresenterTest.java
Tue Aug 10 07:37:40 2010
+++
/trunk/user/test/com/google/gwt/user/cellview/client/HasDataPresenterTest.java
Thu Aug 12 09:42:27 2010
@@ -508,6 +508,27 @@
assertEquals(15, presenter.getRowCount());
view.assertLoadingState(LoadingState.LOADED);
}
+
+ /**
+ * Setting an empty list that starts on the page start should pass
through to
+ * the view.
+ */
+ public void testSetRowValuesEmptySet() {
+ HasData<String> listView = new MockHasData<String>();
+ MockView<String> view = new MockView<String>();
+ HasDataPresenter<String> presenter = new HasDataPresenter<String>(
+ listView, view, 10);
+
+ // Set the initial data size.
+ presenter.setRowCount(10, true);
+ view.assertLoadingState(LoadingState.LOADING);
+
+ // Set an empty list of row values.
+ presenter.setRowValues(0, createData(0, 0));
+ view.assertLoadingState(LoadingState.LOADING);
+ view.assertReplaceAllChildrenCalled(true);
+ view.assertReplaceChildrenCalled(false);
+ }
public void testSetRowValuesOutsideRange() {
HasData<String> listView = new MockHasData<String>();
=======================================
---
/trunk/user/test/com/google/gwt/view/client/AbstractListViewAdapterTest.java
Tue Aug 10 07:37:40 2010
+++
/trunk/user/test/com/google/gwt/view/client/AbstractListViewAdapterTest.java
Thu Aug 12 09:42:27 2010
@@ -216,6 +216,15 @@
assertEquals(new Range(12, 2), view.getLastRowValuesRange());
view.clearLastRowValuesAndRange();
}
+
+ // Empty data list starting at page start.
+ {
+ List<String> values = createData(10, 0);
+ adapter.updateViewData(10, 0, values);
+ assertEquals(values, view.getLastRowValues());
+ assertEquals(new Range(10, 0), view.getLastRowValuesRange());
+ view.clearLastRowValuesAndRange();
+ }
// Data before range.
{
=======================================
--- /trunk/user/test/com/google/gwt/view/client/ListViewAdapterTest.java
Tue Aug 10 07:37:40 2010
+++ /trunk/user/test/com/google/gwt/view/client/ListViewAdapterTest.java
Thu Aug 12 09:42:27 2010
@@ -460,9 +460,9 @@
List<String> replace = new ArrayList<String>();
adapter.setList(replace);
assertEquals(0, view.getRowCount());
- // An empty set should NOT set the row values.
- assertEquals(null, view.getLastRowValues());
- assertEquals(null, view.getLastRowValuesRange());
+ // An empty set should set the row values.
+ assertEquals(replace, view.getLastRowValues());
+ assertEquals(new Range(0, 0), view.getLastRowValuesRange());
}
@Override
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors