diff options
author | Sebastian Nyholm <sebastian@vaadin.com> | 2014-05-27 14:46:47 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-08-18 11:34:03 +0000 |
commit | 1020faa337eddeb07f141cb7ef12fbb20bd2ded2 (patch) | |
tree | 3fe93c549eed111988c9c8f5d057b8cbadd5c9f0 /server | |
parent | a960cfd12b8fb42ae78e39ffb61c04e3a3b831bf (diff) | |
download | vaadin-framework-1020faa337eddeb07f141cb7ef12fbb20bd2ded2.tar.gz vaadin-framework-1020faa337eddeb07f141cb7ef12fbb20bd2ded2.zip |
Fixes DragAndDropWrapper does not support choosing a custom component as the drag image (#13836)
Amend : Fixes the comments for the last commit.
Amend 2: Fixes a nullpointer found in a certain test scenario
Change-Id: I72327f5f8ab9e46d88e1ebed8f1db3a7da39d7d8
Diffstat (limited to 'server')
-rw-r--r-- | server/src/com/vaadin/ui/DragAndDropWrapper.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/DragAndDropWrapper.java b/server/src/com/vaadin/ui/DragAndDropWrapper.java index 3d3356b338..0e2e8f6d2f 100644 --- a/server/src/com/vaadin/ui/DragAndDropWrapper.java +++ b/server/src/com/vaadin/ui/DragAndDropWrapper.java @@ -180,10 +180,17 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget, * the wrapper will no longer work. */ HTML5, + + /** + * Uses the component defined in + * {@link #setDragImageComponent(Component)} as the drag image. + */ + COMPONENT_OTHER, } private final Map<String, Object> html5DataFlavors = new LinkedHashMap<String, Object>(); private DragStartMode dragStartMode = DragStartMode.NONE; + private Component dragImageComponent = null; private Set<String> sentIds = new HashSet<String>(); @@ -227,6 +234,19 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget, public void paintContent(PaintTarget target) throws PaintException { target.addAttribute(DragAndDropWrapperConstants.DRAG_START_MODE, dragStartMode.ordinal()); + + if (dragStartMode.equals(DragStartMode.COMPONENT_OTHER)) { + if (dragImageComponent != null) { + target.addAttribute( + DragAndDropWrapperConstants.DRAG_START_COMPONENT_ATTRIBUTE, + dragImageComponent.getConnectorId()); + } else { + throw new IllegalArgumentException( + "DragStartMode.COMPONENT_OTHER set but no component " + + "was defined. Please set a component using DragAnd" + + "DropWrapper.setDragStartComponent(Component)."); + } + } if (getDropHandler() != null) { getDropHandler().getAcceptCriterion().paint(target); } @@ -300,6 +320,27 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget, return dragStartMode; } + /** + * Sets the component that will be used as the drag image. Only used when + * wrapper is set to {@link DragStartMode#COMPONENT_OTHER} + * + * @param dragImageComponent + */ + public void setDragImageComponent(Component dragImageComponent) { + this.dragImageComponent = dragImageComponent; + markAsDirty(); + } + + /** + * Gets the component that will be used as the drag image. Only used when + * wrapper is set to {@link DragStartMode#COMPONENT_OTHER} + * + * @return <code>null</code> if no component is set. + */ + public Component getDragImageComponent() { + return dragImageComponent; + } + final class ProxyReceiver implements StreamVariable { private String id; |