]> source.dussan.org Git - vaadin-framework.git/commitdiff
extended component locator to build forward compatible locators for context menu...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 7 May 2009 08:13:59 +0000 (08:13 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 7 May 2009 08:13:59 +0000 (08:13 +0000)
svn changeset:7646/svn branch:6.0

src/com/itmill/toolkit/terminal/gwt/client/ComponentLocator.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IContextMenu.java

index fee12345aaac553bc1097c7997c6d80c474212d2..da4aea74e3b8165fab420b71af72fb817fbe04b3 100644 (file)
@@ -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<? extends Widget> 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;
index 411e646a0cd0f2974a3a08df79b54116013f9dc6..ba7f5b509b30a6a5513bc03d26b3f286ec6b67a0 100644 (file)
@@ -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<TableRowElement> 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;
+        }
+    }
 }