/* ************************************************************************
qxwebdriver-java
http://github.com/qooxdoo/qxwebdriver-java
Copyright:
2012-2013 1&1 Internet AG, Germany, http://www.1und1.de
License:
LGPL: http://www.gnu.org/licenses/lgpl.html
EPL: http://www.eclipse.org/org/documents/epl-v10.php
See the license.txt file in the project's top-level directory for details.
Authors:
* Daniel Wagner (danielwagner)
************************************************************************ */
package org.oneandone.qxwebdriver.ui.menu;
import java.util.List;
import org.oneandone.qxwebdriver.By;
import org.oneandone.qxwebdriver.QxWebDriver;
import org.oneandone.qxwebdriver.ui.Scrollable;
import org.oneandone.qxwebdriver.ui.Widget;
import org.oneandone.qxwebdriver.ui.Selectable;
import org.oneandone.qxwebdriver.ui.core.scroll.ScrollPane;
import org.openqa.selenium.WebElement;
/**
* Represents a <a href="http://demo.qooxdoo.org/current/apiviewer/#qx.ui.menu.Menu">Menu</a>
* widget
*/
public class Menu extends org.oneandone.qxwebdriver.ui.core.WidgetImpl implements Selectable, Scrollable {
//TODO: Nested menus
public Menu(WebElement element, QxWebDriver webDriver) {
super(element, webDriver);
}
public void selectItem(Integer index) {
getSelectableItem(index).click();
}
@Override
public void selectItem(String regex) {
getSelectableItem(regex).click();
}
@Override
public Widget getSelectableItem(Integer index) {
Boolean hasSlideBar = hasChildControl("slidebar");
if (hasSlideBar) {
System.err.println("Menu item selection by index is currently " +
"only supported for non-scrolling menus!");
return null;
}
else {
List<Widget> children = getChildren();
return children.get(index);
}
}
@Override
public Widget getSelectableItem(String label) {
By itemLocator = By.qxh("*/[@label=" + label + "]");
Boolean hasSlideBar = hasChildControl("slidebar");
if (hasSlideBar) {
scrollTo("y", 0);
return scrollToChild("y", itemLocator);
}
else {
return findWidget(itemLocator);
}
}
public ScrollPane getScrollPane() {
Widget slideBar = getChildControl("slidebar");
return (ScrollPane) slideBar.getChildControl("scrollpane");
}
@Override
public void scrollTo(String direction, Integer position) {
ScrollPane scrollPane = getScrollPane();
scrollPane.scrollTo(direction, position);
}
@Override
public Widget scrollToChild(String direction, org.openqa.selenium.By locator) {
ScrollPane scrollPane = getScrollPane();
return scrollPane.scrollToChild(direction, locator);
}
@Override
public Long getMaximum(String direction) {
ScrollPane scrollPane = getScrollPane();
return scrollPane.getMaximum(direction);
}
@Override
public Long getScrollPosition(String direction) {
ScrollPane scrollPane = getScrollPane();
return scrollPane.getScrollPosition(direction);
}
}