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;
public VDragAndDropWrapper() {
super();
+ sinkEvents(VTooltip.TOOLTIP_EVENTS);
+
hookHtml5Events(getElement());
setStyleName(CLASSNAME);
addDomHandler(new MouseDownHandler() {
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.
--- /dev/null
+<?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>
--- /dev/null
+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;
+ }
+}