From 2d5a10718e1ef794e223a143f387595c0ef68ca4 Mon Sep 17 00:00:00 2001 From: denisanisimov Date: Tue, 6 Aug 2013 16:19:40 +0300 Subject: [PATCH] Update "lastRequestedFirstvisible" field value right away (#10666). Change-Id: Idef31fa74f4720b5c55511de0545cd8ae1b77b26 --- .../com/vaadin/client/ui/VScrollTable.java | 19 ++- .../table/SetCurrentPageFirstItemIndex.html | 43 +++++++ .../table/SetCurrentPageFirstItemIndex.java | 112 ++++++++++++++++++ 3 files changed, 168 insertions(+), 6 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html create mode 100644 uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.java diff --git a/client/src/com/vaadin/client/ui/VScrollTable.java b/client/src/com/vaadin/client/ui/VScrollTable.java index 2d177f29b5..3733ee204a 100644 --- a/client/src/com/vaadin/client/ui/VScrollTable.java +++ b/client/src/com/vaadin/client/ui/VScrollTable.java @@ -1123,6 +1123,9 @@ public class VScrollTable extends FlowPanel implements HasWidgets, if (firstvisible != lastRequestedFirstvisible && scrollBody != null) { // received 'surprising' firstvisible from server: scroll there firstRowInViewPort = firstvisible; + // Update lastRequestedFirstvisible right away here + // (don't rely on update in the timer which could be cancelled). + lastRequestedFirstvisible = firstRowInViewPort; /* * Schedule the scrolling to be executed last so no updates to the @@ -2406,12 +2409,16 @@ public class VScrollTable extends FlowPanel implements HasWidgets, firstToBeRendered, false); client.updateVariable(paintableId, "lastToBeRendered", lastToBeRendered, false); - // remember which firstvisible we requested, in case the server - // has - // a differing opinion - lastRequestedFirstvisible = firstRowInViewPort; - client.updateVariable(paintableId, "firstvisible", - firstRowInViewPort, false); + + // don't request server to update page first index in case it + // has not been changed + if (firstRowInViewPort != firstvisible) { + // remember which firstvisible we requested, in case the + // server has a differing opinion + lastRequestedFirstvisible = firstRowInViewPort; + client.updateVariable(paintableId, "firstvisible", + firstRowInViewPort, false); + } client.updateVariable(paintableId, "reqfirstrow", reqFirstRow, false); client.updateVariable(paintableId, "reqrows", reqRows, true); diff --git a/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html new file mode 100644 index 0000000000..904f3b0470 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html @@ -0,0 +1,43 @@ + + + + + + +New Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
New Test
openrun/com.vaadin.tests.components.table.SetCurrentPageFirstItemIndex?restartApplication
clickvaadin=runcomvaadintestscomponentstableSetCurrentPageFirstItemIndex::/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0]
clickvaadin=runcomvaadintestscomponentstableSetCurrentPageFirstItemIndex::/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0]
pause500
assertTextvaadin=runcomvaadintestscomponentstableSetCurrentPageFirstItemIndex::/VVerticalLayout[0]/Slot[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]6
+ + \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.java b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.java new file mode 100644 index 0000000000..574f1d1862 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.java @@ -0,0 +1,112 @@ +/* + * Copyright 2000-2013 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +/** + * + */ +package com.vaadin.tests.components.table; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Table; +import com.vaadin.ui.Table.ColumnGenerator; +import com.vaadin.ui.Table.ColumnHeaderMode; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @since + * @author Vaadin Ltd + */ +public class SetCurrentPageFirstItemIndex extends AbstractTestUI { + + private int index = 5; + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server. + * VaadinRequest) + */ + @Override + protected void setup(VaadinRequest request) { + VerticalLayout vl = new VerticalLayout(); + setContent(vl); + + final Table imageTable = new Table(); + vl.addComponent(imageTable); + + imageTable.setColumnHeaderMode(ColumnHeaderMode.HIDDEN); + imageTable.setPageLength(1); + imageTable.addGeneratedColumn("image", new ImageGenerator()); + imageTable.setWidth(500, Unit.PIXELS); + + for (int i = 1; i <= 25; i++) { + imageTable.addItem(new Integer(i)); + } + + imageTable.setCurrentPageFirstItemIndex(index); + + vl.addComponent(new Button("Click", new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + } + if (index != 5) { + index = 5; + imageTable.setCurrentPageFirstItemIndex(index); + } else { + index = 20; + imageTable.setCurrentPageFirstItemIndex(index); + } + } + })); + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTestDescription() + */ + @Override + protected String getTestDescription() { + return "Field lastRequestedFirstvisible should be updated out of timer."; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber() + */ + @Override + protected Integer getTicketNumber() { + return 10666; + } + + public class ImageGenerator implements ColumnGenerator { + + @Override + public Object generateCell(Table source, Object itemId, Object columnId) { + return "" + itemId; + } + } + +} -- 2.39.5