Quellcode durchsuchen

Fix for #7230

svn changeset:20895/svn branch:6.7
tags/6.7.0.rc1
Jonatan Kronqvist vor 12 Jahren
Ursprung
Commit
7f4ff9d20f

+ 35
- 0
src/com/vaadin/terminal/gwt/client/Util.java Datei anzeigen

@@ -1264,4 +1264,39 @@ public class Util {
return false;
}
}

/**
* Scrolls an element into view vertically only. Modified version of
* Element.scrollIntoView.
*
* @param elem
* The element to scroll into view
*/
public static native void scrollIntoViewVertically(Element elem)
/*-{
var top = elem.offsetTop;
var height = elem.offsetHeight;
if (elem.parentNode != elem.offsetParent) {
top -= elem.parentNode.offsetTop;
}
var cur = elem.parentNode;
while (cur && (cur.nodeType == 1)) {
if (top < cur.scrollTop) {
cur.scrollTop = top;
}
if (top + height > cur.scrollTop + cur.clientHeight) {
cur.scrollTop = (top + height) - cur.clientHeight;
}
var offsetTop = cur.offsetTop;
if (cur.parentNode != cur.offsetParent) {
offsetTop -= cur.parentNode.offsetTop;
}
top += offsetTop - cur.scrollTop;
cur = cur.parentNode;
}
}-*/;
}

+ 1
- 36
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java Datei anzeigen

@@ -6164,44 +6164,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
* The row to ensure is visible
*/
private void ensureRowIsVisible(VScrollTableRow row) {
scrollIntoViewVertically(row.getElement());
Util.scrollIntoViewVertically(row.getElement());
}

/**
* Scrolls an element into view vertically only. Modified version of
* Element.scrollIntoView.
*
* @param elem
* The element to scroll into view
*/
private native void scrollIntoViewVertically(Element elem)
/*-{
var top = elem.offsetTop;
var height = elem.offsetHeight;
if (elem.parentNode != elem.offsetParent) {
top -= elem.parentNode.offsetTop;
}
var cur = elem.parentNode;
while (cur && (cur.nodeType == 1)) {
if (top < cur.scrollTop) {
cur.scrollTop = top;
}
if (top + height > cur.scrollTop + cur.clientHeight) {
cur.scrollTop = (top + height) - cur.clientHeight;
}
var offsetTop = cur.offsetTop;
if (cur.parentNode != cur.offsetParent) {
offsetTop -= cur.parentNode.offsetTop;
}
top += offsetTop - cur.scrollTop;
cur = cur.parentNode;
}
}-*/;

/**
* Handles the keyboard events handled by the table
*

+ 1
- 1
src/com/vaadin/terminal/gwt/client/ui/VTree.java Datei anzeigen

@@ -1291,7 +1291,7 @@ public class VTree extends FocusElementPanel implements Paintable,
* Scrolls the caption into view
*/
public void scrollIntoView() {
nodeCaptionDiv.scrollIntoView();
Util.scrollIntoViewVertically(nodeCaptionDiv);
}

}

+ 87
- 0
tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScroll Datei anzeigen

@@ -0,0 +1,87 @@
<?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="" />
<title>TreeKeyboardNavigationScroll</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">New Test</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/run/com.vaadin.tests.components.tree.TreeKeyboardNavigationScrolls?restartApplication</td>
<td></td>
</tr>
<tr>
<td>mouseClick</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]</td>
<td>4,3</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>right</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>right</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>right</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>pressSpecialKey</td>
<td>vaadin=runcomvaadintestscomponentstreeTreeKeyboardNavigationScrolls::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]/domChild[1]</td>
<td>down</td>
</tr>
<tr>
<td>screenCapture</td>
<td></td>
<td>noscroll</td>
</tr>

</tbody></table>
</body>
</html>

+ 54
- 0
tests/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java Datei anzeigen

@@ -0,0 +1,54 @@
/*
@ITMillApache2LicenseForJavaFiles@
*/
package com.vaadin.tests.components.tree;

import com.vaadin.data.Container;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.data.validator.AbstractValidator;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Tree;

public class TreeKeyboardNavigationScrolls extends TestBase {

@Override
protected void setup() {
Tree tree = new Tree();
tree.setContainerDataSource(generateHierarchicalContainer());
tree.setImmediate(true);
tree.addValidator(new AbstractValidator("failed") {
public boolean isValid(Object value) {
return false;
}

});
addComponent(tree);
}

private Container generateHierarchicalContainer() {
HierarchicalContainer cont = new HierarchicalContainer();
for (int i = 1; i < 6; i++) {
cont.addItem(i);
for (int j = 1; j < 3; j++) {
String id = i
+ " foo bar baz make this node really wide so that we don't have to fiddle with resizing the browser window -> what would you do if you had one of your legs on backwards? it's legs time! everybody get your legs! "
+ j;
cont.addItem(id);
cont.setChildrenAllowed(id, false);
cont.setParent(id, i);
}
}
return cont;
}

@Override
protected String getDescription() {
return "The tree scrolls right if the focused node is too wide when navigating with the keyboard";
}

@Override
protected Integer getTicketNumber() {
return 7230;
}

}

Laden…
Abbrechen
Speichern