svn changeset:25991/svn branch:6.8 svn changeset:26075/svn branch:6.8 svn changeset:26091/svn branch:6.8 Change-Id: Ia4a6ab4cc6ff98795a6d1f9b1701a345dc3f4dc4tags/7.1.1
private SelectMode selectMode = SelectMode.NONE; | private SelectMode selectMode = SelectMode.NONE; | ||||
private final HashSet<String> selectedRowKeys = new HashSet<String>(); | |||||
public final HashSet<String> selectedRowKeys = new HashSet<String>(); | |||||
/* | /* | ||||
* When scrolling and selecting at the same time, the selections are not in | * When scrolling and selecting at the same time, the selections are not in | ||||
this.rowKey = rowKey; | this.rowKey = rowKey; | ||||
this.left = left; | this.left = left; | ||||
this.top = top; | this.top = top; | ||||
this.closeRegistration = menu.addCloseHandler(this); | |||||
closeRegistration = menu.addCloseHandler(this); | |||||
} | } | ||||
@Override | @Override |
if (!getWidget().focusedRow.isAttached() | if (!getWidget().focusedRow.isAttached() | ||||
&& !getWidget().rowRequestHandler.isRunning()) { | && !getWidget().rowRequestHandler.isRunning()) { | ||||
// focused row has been orphaned, can't focus | // focused row has been orphaned, can't focus | ||||
getWidget().focusRowFromBody(); | |||||
if (getWidget().selectedRowKeys.contains(getWidget().focusedRow | |||||
.getKey())) { | |||||
// if row cache was refreshed, focused row should be | |||||
// in selection and exists with same index | |||||
getWidget().setRowFocus( | |||||
getWidget().getRenderedRowByKey( | |||||
getWidget().focusedRow.getKey())); | |||||
} else if (getWidget().selectedRowKeys.size() > 0) { | |||||
// try to focus any row in selection | |||||
getWidget().setRowFocus( | |||||
getWidget().getRenderedRowByKey( | |||||
getWidget().selectedRowKeys.iterator() | |||||
.next())); | |||||
} else { | |||||
// try to focus any row | |||||
getWidget().focusRowFromBody(); | |||||
} | |||||
} | } | ||||
} | } | ||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |||||
<head profile="http://selenium-ide.openqa.org/profiles/test-case"> | |||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |||||
<link rel="selenium.base" href="http://localhost:8888/" /> | |||||
<title>TableFocusOnRefreshRowCache</title> | |||||
</head> | |||||
<body> | |||||
<table cellpadding="1" cellspacing="1" border="1"> | |||||
<thead> | |||||
<tr><td rowspan="1" colspan="3">TableFocusOnRefreshRowCache</td></tr> | |||||
</thead><tbody> | |||||
<tr> | |||||
<td>open</td> | |||||
<td>/run/com.vaadin.tests.components.table.TableFocusOnRefreshRowCache?restartApplication</td> | |||||
<td></td> | |||||
</tr> | |||||
<tr> | |||||
<td>scroll</td> | |||||
<td>vaadin=runcomvaadintestscomponentstableTableFocusOnRefreshRowCache::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td> | |||||
<td>3161</td> | |||||
</tr> | |||||
<tr> | |||||
<td>pause</td> | |||||
<td>500</td> | |||||
<td></td> | |||||
</tr> | |||||
<tr> | |||||
<td>mouseClick</td> | |||||
<td>vaadin=runcomvaadintestscomponentstableTableFocusOnRefreshRowCache::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[42]/domChild[0]/domChild[0]</td> | |||||
<td>186,-3151</td> | |||||
</tr> | |||||
<!-- Opera does some funky stuff with the row indices when this is run in | |||||
testbench, making it impossible to reliably test that the stylenames are | |||||
in the right location. Must instead just test that the stylename is not in | |||||
the position it was prior to fixing the bug, although that could never | |||||
fail in Opera since it looks at the wrong row | |||||
--> | |||||
<!-- | |||||
<tr> | |||||
<td>assertCSSClass</td> | |||||
<td>vaadin=runcomvaadintestscomponentstableTableFocusOnRefreshRowCache::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[35]</td> | |||||
<td>v-selected</td> | |||||
</tr> | |||||
<tr> | |||||
<td>assertCSSClass</td> | |||||
<td>vaadin=runcomvaadintestscomponentstableTableFocusOnRefreshRowCache::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[35]</td> | |||||
<td>v-table-focus</td> | |||||
</tr> | |||||
--> | |||||
<!-- Test that the first row in the view does not get focus --> | |||||
<tr> | |||||
<td>assertNotCSSClass</td> | |||||
<td>vaadin=runcomvaadintestscomponentstableTableFocusOnRefreshRowCache::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[23]</td> | |||||
<td>v-table-focus</td> | |||||
</tr> | |||||
</tbody></table> | |||||
</body> | |||||
</html> |
package com.vaadin.tests.components.table; | |||||
import com.vaadin.event.ItemClickEvent; | |||||
import com.vaadin.event.ItemClickEvent.ItemClickListener; | |||||
import com.vaadin.tests.components.TestBase; | |||||
import com.vaadin.ui.Table; | |||||
public class TableFocusOnRefreshRowCache extends TestBase { | |||||
@Override | |||||
protected void setup() { | |||||
final Table table = new Table(); | |||||
table.setSizeFull(); | |||||
table.addContainerProperty("Name", String.class, null); | |||||
for (int i = 0; i < 200; i++) { | |||||
table.addItem(new Object[] { "Item " + i }, i); | |||||
} | |||||
table.setSelectable(true); | |||||
table.addListener(new ItemClickListener() { | |||||
public void itemClick(ItemClickEvent event) { | |||||
table.refreshRowCache(); | |||||
} | |||||
}); | |||||
addComponent(table); | |||||
} | |||||
@Override | |||||
protected String getDescription() { | |||||
return "Calling Table#refreshRowCache() loses cell focus"; | |||||
} | |||||
@Override | |||||
protected Integer getTicketNumber() { | |||||
return 11797; | |||||
} | |||||
} |
<tr> | <tr> | ||||
<td>assertText</td> | <td>assertText</td> | ||||
<td>vaadin=runcomvaadintestscomponentstableMultiSelectWithRemovedRow::PID_SLog_row_0</td> | <td>vaadin=runcomvaadintestscomponentstableMultiSelectWithRemovedRow::PID_SLog_row_0</td> | ||||
<td>4. Selection: [William, Averell, Bob, Grat]</td> | |||||
<td>4. Selection: [Averell, Bob, Grat]</td> | |||||
</tr> | </tr> | ||||
<!--Sort + shift select down--> | <!--Sort + shift select down--> | ||||
<tr> | <tr> |