From 5e80aef92f382aa58451188f147573bc35cf123b Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Wed, 5 Oct 2011 13:23:06 +0000 Subject: [PATCH] #7708 Added code for handling tooltip events in VDragAndDropWrapper + test svn changeset:21580/svn branch:6.7 --- .../gwt/client/ui/VDragAndDropWrapper.java | 12 ++ .../DragAndDropWrapperTooltips.html | 52 +++++++ .../DragAndDropWrapperTooltips.java | 131 ++++++++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html create mode 100644 tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java diff --git a/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java b/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java index 896662436f..7fef345586 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java @@ -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 index 0000000000..13d6312cf7 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html @@ -0,0 +1,52 @@ + + + + + + +New Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
New Test
open/run/com.vaadin.tests.components.draganddropwrapper.DragAndDropWrapperTooltips?restartApplication
showTooltipvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[2]0,0
screenCapturetooltip-initial
dragvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[3]30,41
dropvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[1]4,42
showTooltipvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VDragAndDropWrapper[0]/VCssLayout[0]/VCssLayout$FlowPane[0]/VDragAndDropWrapper[0]/VLabel[0]0,0
screenCapturetooltip-after-drag
+ + 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 index 0000000000..b147392480 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java @@ -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 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; + } +} -- 2.39.5