]> source.dussan.org Git - vaadin-framework.git/commitdiff
#7708 Added code for handling tooltip events in VDragAndDropWrapper + test
authorArtur Signell <artur.signell@itmill.com>
Wed, 5 Oct 2011 13:23:06 +0000 (13:23 +0000)
committerArtur Signell <artur.signell@itmill.com>
Wed, 5 Oct 2011 13:23:06 +0000 (13:23 +0000)
svn changeset:21580/svn branch:6.7

src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java
tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html [new file with mode: 0644]
tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java [new file with mode: 0644]

index 896662436f1624169e9bdb89bc11036b765cf5b0..7fef345586bc2ccbee97c5a350f62e8438582925 100644 (file)
@@ -32,6 +32,7 @@ import com.vaadin.terminal.gwt.client.RenderInformation;
 import com.vaadin.terminal.gwt.client.RenderInformation.Size;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
+import com.vaadin.terminal.gwt.client.VTooltip;
 import com.vaadin.terminal.gwt.client.ui.dd.DDUtil;
 import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
 import com.vaadin.terminal.gwt.client.ui.dd.VAbstractDropHandler;
@@ -59,6 +60,8 @@ public class VDragAndDropWrapper extends VCustomComponent implements
 
     public VDragAndDropWrapper() {
         super();
+        sinkEvents(VTooltip.TOOLTIP_EVENTS);
+
         hookHtml5Events(getElement());
         setStyleName(CLASSNAME);
         addDomHandler(new MouseDownHandler() {
@@ -82,6 +85,15 @@ public class VDragAndDropWrapper extends VCustomComponent implements
         sinkEvents(Event.TOUCHEVENTS);
     }
 
+    @Override
+    public void onBrowserEvent(Event event) {
+        super.onBrowserEvent(event);
+
+        if (client != null) {
+            client.handleTooltipEvent(event, this);
+        }
+    }
+
     /**
      * Starts a drag and drop operation from mousedown or touchstart event if
      * required conditions are met.
diff --git a/tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html b/tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html
new file mode 100644 (file)
index 0000000..13d6312
--- /dev/null
@@ -0,0 +1,52 @@
+<?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>New Test</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.draganddropwrapper.DragAndDropWrapperTooltips?restartApplication</td>
+       <td></td>
+</tr>
+<tr>
+       <td>showTooltip</td>
+       <td>vaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[2]</td>
+       <td>0,0</td>
+</tr>
+<tr>
+       <td>screenCapture</td>
+       <td></td>
+       <td>tooltip-initial</td>
+</tr>
+<tr>
+       <td>drag</td>
+       <td>vaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[3]</td>
+       <td>30,41</td>
+</tr>
+<tr>
+       <td>drop</td>
+       <td>vaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[1]</td>
+       <td>4,42</td>
+</tr>
+<tr>
+       <td>showTooltip</td>
+       <td>vaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[0]/VLabel[0]</td>
+       <td>0,0</td>
+</tr>
+<tr>
+       <td>screenCapture</td>
+       <td></td>
+       <td>tooltip-after-drag</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java b/tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java
new file mode 100644 (file)
index 0000000..b147392
--- /dev/null
@@ -0,0 +1,131 @@
+package com.vaadin.tests.components.draganddropwrapper;
+
+import java.util.Iterator;
+
+import com.vaadin.event.Transferable;
+import com.vaadin.event.TransferableImpl;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class DragAndDropWrapperTooltips extends TestBase {
+
+    private final String BASE = ".greenblock {vertical-align: middle; float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;color: white;}";
+    private final String B2 = ".b2 {background-color: red !important;}";
+    private final String B3 = ".b3 {background-color: yellow !important;color: black;}";
+    private final String B4 = ".b4 {background-color: blue !important;}";
+    private final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}";
+    private DragAndDropWrapper dragAndDropWrapper;
+
+    @Override
+    protected void setup() {
+        TestUtils.injectCSS(getMainWindow(), BASE + B4 + B2 + B3
+                + HIDEDRAGSOURCE);
+
+        VerticalLayout l = new VerticalLayout();
+        l.setWidth("400px");
+        l.setHeight("100px");
+        dragAndDropWrapper = new DragAndDropWrapper(cssLayout);
+        dragAndDropWrapper
+                .setDescription("Tooltip for the wrapper wrapping all the draggable layouts");
+        dragAndDropWrapper.setSizeFull();
+        l.addComponent(dragAndDropWrapper);
+
+        addComponent(l);
+
+        for (int i = 1; i <= 4; i++) {
+            WrappedLabel wl = new WrappedLabel("Block");
+            wl.addStyleName("b" + i);
+            cssLayout.addComponent(wl);
+        }
+
+    }
+
+    int count;
+
+    private CssLayout cssLayout = new CssLayout() {
+    };
+
+    class WrappedLabel extends DragAndDropWrapper {
+
+        private static final long serialVersionUID = 1L;
+
+        public WrappedLabel(String content) {
+            super(new Label(content + " " + ++count));
+            getCompositionRoot().setSizeUndefined();
+            setHeight("60px"); // FIXME custom component seems to be broken:
+            // can't set height with css only
+            setWidth("60px");
+            setDragStartMode(DragStartMode.WRAPPER);
+            addStyleName("greenblock");
+        }
+
+        @Override
+        public DropHandler getDropHandler() {
+            return dh;
+        }
+
+    }
+
+    private DropHandler dh = new DropHandler() {
+
+        public AcceptCriterion getAcceptCriterion() {
+            return AcceptAll.get();
+        }
+
+        public void drop(DragAndDropEvent dropEvent) {
+            Transferable transferable = dropEvent.getTransferable();
+            if (transferable instanceof TransferableImpl) {
+                TransferableImpl ct = (TransferableImpl) transferable;
+                Component sourceComponent = ct.getSourceComponent();
+                if (sourceComponent instanceof WrappedLabel) {
+                    int index = 1;
+                    Iterator<Component> componentIterator = cssLayout
+                            .getComponentIterator();
+                    Component next = componentIterator.next();
+                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
+                    DropTarget target = dropTargetData.getTarget();
+                    while (next != target) {
+                        if (next != sourceComponent) {
+                            index++;
+                        }
+                        next = componentIterator.next();
+                    }
+                    if (dropTargetData.getData("horizontalLocation").equals(
+                            "LEFT")) {
+                        index--;
+                        if (index < 0) {
+                            index = 0;
+                        }
+                    }
+
+                    cssLayout.removeComponent(sourceComponent);
+                    cssLayout.addComponent(sourceComponent, index);
+
+                    dragAndDropWrapper
+                            .setDescription("Drag was performed and tooltip was changed");
+                }
+            }
+        }
+    };
+
+    @Override
+    protected String getDescription() {
+        return "A tooltip should be shown when hovering the DragAndDropWrapper containing all the draggable layouts";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 7708;
+    }
+}