From: Matti Tahvonen Date: Thu, 7 May 2009 08:13:59 +0000 (+0000) Subject: extended component locator to build forward compatible locators for context menu... X-Git-Tag: 6.7.0.beta1~2943 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b36d7e04dcb55c5feb544f6355cc25019ba0d744;p=vaadin-framework.git extended component locator to build forward compatible locators for context menu clicks svn changeset:7646/svn branch:6.0 --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ComponentLocator.java b/src/com/itmill/toolkit/terminal/gwt/client/ComponentLocator.java index fee12345aa..da4aea74e3 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ComponentLocator.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ComponentLocator.java @@ -66,6 +66,15 @@ public class ComponentLocator { } if (e == null || pid == null) { + + // Still test for context menu option + String subPartName = client.getContextMenu().getSubPartName( + targetElement); + if (subPartName != null) { + // IContextMenu, singleton attached directly to rootpanel + return "/IContextMenu[0]" + SUBPART_SEPARATOR + subPartName; + + } return null; } @@ -273,8 +282,11 @@ public class ComponentLocator { String[] split = part.split("\\["); Iterator i; - if (split[0].equals("IWindow")) { + String widgetClassName = split[0]; + if (widgetClassName.equals("IWindow")) { i = client.getView().getSubWindowList().iterator(); + } else if (widgetClassName.equals("IContextMenu")) { + return client.getContextMenu(); } else { i = parent.iterator(); } @@ -290,7 +302,7 @@ public class ComponentLocator { Widget child = i.next(); String simpleName2 = Util.getSimpleName(child); - if (split[0].equals(simpleName2)) { + if (widgetClassName.equals(simpleName2)) { if (pos == 0) { w = child; ok = true; diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IContextMenu.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IContextMenu.java index 411e646a0c..ba7f5b509b 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IContextMenu.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IContextMenu.java @@ -4,12 +4,17 @@ package com.itmill.toolkit.terminal.gwt.client.ui; +import com.google.gwt.dom.client.NodeList; +import com.google.gwt.dom.client.TableRowElement; +import com.google.gwt.dom.client.TableSectionElement; +import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.PopupPanel; +import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; -public class IContextMenu extends IToolkitOverlay { +public class IContextMenu extends IToolkitOverlay implements SubPartAware { private ActionOwner actionOwner; @@ -112,4 +117,42 @@ public class IContextMenu extends IToolkitOverlay { * super.onBrowserEvent(event); } */ } + + public Element getSubPartElement(String subPart) { + int index = Integer.parseInt(subPart.substring(6)); + ApplicationConnection.getConsole().log( + "Searching element for selection index " + index); + Element wrapperdiv = menu.getElement(); + com.google.gwt.dom.client.TableSectionElement tBody = (TableSectionElement) wrapperdiv + .getFirstChildElement().getFirstChildElement(); + TableRowElement item = tBody.getRows().getItem(index); + com.google.gwt.dom.client.Element clickableDivElement = item + .getFirstChildElement().getFirstChildElement(); + return clickableDivElement.cast(); + } + + public String getSubPartName(Element subElement) { + if (getElement().isOrHasChild(subElement)) { + com.google.gwt.dom.client.Element e = subElement; + { + while (e != null && !e.getTagName().toLowerCase().equals("tr")) { + e = e.getParentElement(); + ApplicationConnection.getConsole().log("Found row"); + } + } + com.google.gwt.dom.client.TableSectionElement parentElement = (TableSectionElement) e + .getParentElement(); + NodeList rows = parentElement.getRows(); + for (int i = 0; i < rows.getLength(); i++) { + if (rows.getItem(i) == e) { + ApplicationConnection.getConsole().log( + "Found index for row" + 1); + return "option" + i; + } + } + return null; + } else { + return null; + } + } }