Browse Source

removed component transferable (integrated to transferable), changed one test to use draganddropwrapper instead of dragdroppane (to be removed)

svn changeset:11407/svn branch:6.3_dd
tags/6.7.0.beta1
Matti Tahvonen 14 years ago
parent
commit
1640902d0c

+ 1
- 1
src/com/vaadin/event/DataBoundTransferable.java View File

@@ -4,7 +4,7 @@ import java.util.Map;

import com.vaadin.ui.Component;

public abstract class DataBoundTransferable extends ComponentTransferable {
public abstract class DataBoundTransferable extends TransferableImpl {

public DataBoundTransferable(Component sourceComponent,
Map<String, Object> rawVariables) {

+ 7
- 0
src/com/vaadin/event/Transferable.java View File

@@ -2,6 +2,8 @@ package com.vaadin.event;

import java.util.Collection;

import com.vaadin.ui.Component;

public interface Transferable {

public Object getData(String dataFlawor);
@@ -10,4 +12,9 @@ public interface Transferable {

public Collection<String> getDataFlawors();

/**
* @return the component that created the Transferable
*/
public Component getSourceComponent();

}

src/com/vaadin/event/ComponentTransferable.java → src/com/vaadin/event/TransferableImpl.java View File

@@ -6,11 +6,11 @@ import java.util.Map;

import com.vaadin.ui.Component;

public class ComponentTransferable implements Transferable {
public class TransferableImpl implements Transferable {
private Map<String, Object> rawVariables = new HashMap<String, Object>();
private Component sourceComponent;

public ComponentTransferable(Component sourceComponent,
public TransferableImpl(Component sourceComponent,
Map<String, Object> rawVariables) {
this.sourceComponent = sourceComponent;
this.rawVariables = rawVariables;

+ 3
- 3
src/com/vaadin/event/dd/acceptCriteria/ComponentFilter.java View File

@@ -3,7 +3,7 @@
*/
package com.vaadin.event.dd.acceptCriteria;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
@@ -28,8 +28,8 @@ public class ComponentFilter extends ClientSideCriterion {
}

public boolean accepts(DragAndDropEvent dragEvent) {
if (dragEvent.getTransferable() instanceof ComponentTransferable) {
Component sourceComponent = ((ComponentTransferable) dragEvent
if (dragEvent.getTransferable() instanceof TransferableImpl) {
Component sourceComponent = ((TransferableImpl) dragEvent
.getTransferable()).getSourceComponent();
for (Component c : component) {
if (c == sourceComponent) {

+ 3
- 3
src/com/vaadin/event/dd/acceptCriteria/SourceIsSameAsTarget.java View File

@@ -3,7 +3,7 @@
*/
package com.vaadin.event.dd.acceptCriteria;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropTarget;
import com.vaadin.terminal.gwt.client.ui.dd.VSourceIsSameAsTarget;
@@ -13,8 +13,8 @@ import com.vaadin.ui.Component;
public class SourceIsSameAsTarget extends ClientSideCriterion {

public boolean accepts(DragAndDropEvent dragEvent) {
if (dragEvent.getTransferable() instanceof ComponentTransferable) {
Component sourceComponent = ((ComponentTransferable) dragEvent
if (dragEvent.getTransferable() instanceof TransferableImpl) {
Component sourceComponent = ((TransferableImpl) dragEvent
.getTransferable()).getSourceComponent();
DropTarget target = dragEvent.getDropTargetData().getTarget();
return sourceComponent == target;

+ 5
- 0
src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapper.java View File

@@ -10,6 +10,7 @@ import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.RenderInformation;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -68,6 +69,9 @@ public class VDragAndDropWrapper extends VCustomComponent implements
paintable = VDragAndDropWrapper.this;
}

transferable.setData("mouseDown", new MouseEventDetails(
event.getNativeEvent()).serialize());

startDrag.createDragImage(
((Widget) paintable).getElement(), true);
event.preventDefault(); // prevent text selection
@@ -112,6 +116,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
}
ApplicationConnection.getConsole().log("HTML 5 Drag Enter");
VTransferable transferable = new VTransferable();
transferable.setDragSource(this);

vaadinDragEvent = VDragAndDropManager.get().startDrag(transferable,
event, false);

+ 1
- 2
src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java View File

@@ -534,8 +534,7 @@ public class VDragAndDropManager {
mouseEventDetails.serialize());
} catch (Exception e) {
// NOP, (at least oophm on Safari) can't serialize html dd event
// to
// mouseevent
// to mouseevent
}
} else {
currentDrag.getDropDetails().put("mouseEvent", null);

+ 4
- 27
src/com/vaadin/terminal/gwt/server/DragAndDropService.java View File

@@ -1,11 +1,9 @@
package com.vaadin.terminal.gwt.server;

import java.io.PrintWriter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DragSource;
@@ -179,30 +177,9 @@ public class DragAndDropService implements VariableOwner {
if (sourceComponent != null && sourceComponent instanceof DragSource) {
transferable = ((DragSource) sourceComponent)
.getTransferable(variables);
} else {
if (transferable == null) {
if (sourceComponent != null) {
transferable = new ComponentTransferable(sourceComponent,
variables);
} else {
transferable = new Transferable() {
private Map<String, Object> td = new HashMap<String, Object>();

public Object getData(String dataFlawor) {
return td.get(dataFlawor);
}

public void setData(String dataFlawor, Object value) {
td.put(dataFlawor, value);
}

public Collection<String> getDataFlawors() {
return td.keySet();
}

};
}
}
}
if (transferable == null) {
transferable = new TransferableImpl(sourceComponent, variables);
}

return transferable;

+ 64
- 6
src/com/vaadin/ui/DragAndDropWrapper.java View File

@@ -2,23 +2,27 @@ package com.vaadin.ui;

import java.util.Map;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragSource;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.DropTarget;
import com.vaadin.event.dd.DropTargetDetails;
import com.vaadin.event.dd.DropTargetDetailsImpl;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.VDragAndDropWrapper;
import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;

@ClientWidget(VDragAndDropWrapper.class)
public class DragAndDropWrapper extends CustomComponent implements DropTarget,
DragSource {

public class DDWrapperTransferable extends ComponentTransferable {
public class WrapperTransferable extends TransferableImpl {

public DDWrapperTransferable(Component sourceComponent,
public WrapperTransferable(Component sourceComponent,
Map<String, Object> rawVariables) {
super(sourceComponent, rawVariables);
}
@@ -33,6 +37,61 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
Component object = (Component) getData("component");
return object;
}

/**
* @return the mouse down event that started the drag and drop operation
*/
public MouseEventDetails getMouseDownEvent() {
return MouseEventDetails.deSerialize((String) getData("mouseDown"));
}

}

public class WrapperDropDetails extends DropTargetDetailsImpl {

/**
*
*/
private static final long serialVersionUID = 1L;

public WrapperDropDetails(Map<String, Object> rawDropData) {
super(rawDropData);
}

/**
* @return the absolute position of wrapper on the page
*/
public Integer getAbsoluteLeft() {
return (Integer) getData("absoluteLeft");
}

/**
*
* @return the absolute position of wrapper on the page
*/
public Integer getAbsoluteTop() {
return (Integer) getData("absoluteTop");
}

/**
* @return details about the actual event that caused the event details.
* Practically mouse move or mouse up.
*/
public MouseEventDetails getMouseEvent() {
return MouseEventDetails
.deSerialize((String) getData("mouseEvent"));
}

public VerticalDropLocation verticalDropLocation() {
return VerticalDropLocation
.valueOf((String) getData("verticalLocation"));
}

public HorizontalDropLocation horizontalDropLocation() {
return HorizontalDropLocation
.valueOf((String) getData("horizontalLocation"));
}

}

public enum DragStartMode {
@@ -71,12 +130,11 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,

public DropTargetDetails translateDragDropDetails(
Map<String, Object> clientVariables) {
// TODO Auto-generated method stub
return null;
return new WrapperDropDetails(clientVariables);
}

public Transferable getTransferable(final Map<String, Object> rawVariables) {
return new DDWrapperTransferable(this, rawVariables);
return new WrapperTransferable(this, rawVariables);
}

public void setDragStartMode(DragStartMode dragStartMode) {

+ 6
- 3
src/com/vaadin/ui/DragDropPane.java View File

@@ -2,7 +2,7 @@ package com.vaadin.ui;

import java.util.Map;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.DataBoundTransferable;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragAndDropEvent;
@@ -36,7 +36,10 @@ import com.vaadin.terminal.gwt.client.MouseEventDetails;
* layouts wouldn't need changes (and have regression risk/ performance
* penalty).
*
* @deprecated use {@link DragAndDropWrapper} instead
*
*/
@Deprecated
@SuppressWarnings("serial")
@ClientWidget(com.vaadin.terminal.gwt.client.ui.VDragDropPane.class)
public class DragDropPane extends AbsoluteLayout implements DropTarget {
@@ -76,8 +79,8 @@ public class DragDropPane extends AbsoluteLayout implements DropTarget {

DragEventDetails ed = (DragEventDetails) event.getDropTargetData();
Transferable transferable = event.getTransferable();
if (transferable instanceof ComponentTransferable) {
ComponentTransferable ctr = (ComponentTransferable) transferable;
if (transferable instanceof TransferableImpl) {
TransferableImpl ctr = (TransferableImpl) transferable;
// use "component" (from DragDropPane) if available, else take
// the source component
Component component = (Component) ctr.getData("component");

+ 1
- 0
src/com/vaadin/ui/Tree.java View File

@@ -1210,6 +1210,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
.getDropTargetData();
tree = (Tree) dragEvent.getDropTargetData().getTarget();
allowedItemIds = getAllowedItemIds(dragEvent, tree);

return allowedItemIds.contains(dropTargetData.getItemIdOver());
}


+ 126
- 5
tests/src/com/vaadin/tests/dd/AcceptAnythingWindow.java View File

@@ -1,17 +1,138 @@
package com.vaadin.tests.dd;

import com.vaadin.ui.DragDropPane;
import com.vaadin.event.DataBoundTransferable;
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.acceptCriteria.AcceptAll;
import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.Label;
import com.vaadin.ui.Window;
import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
import com.vaadin.ui.DragAndDropWrapper.WrapperDropDetails;
import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;

public class AcceptAnythingWindow extends Window {

private AbsoluteLayout layout = new AbsoluteLayout();

public AcceptAnythingWindow() {
setCaption("Drop anything here");
DragDropPane pane = new DragDropPane();
setContent(pane);
pane.setSizeFull();

final DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
wrapper.setDropHandler(new DropHandler() {

public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}

public void drop(DragAndDropEvent event) {
WrapperDropDetails ed = (WrapperDropDetails) event
.getDropTargetData();
Transferable transferable = event.getTransferable();
TransferableImpl ctr = (TransferableImpl) transferable;
// use "component" (from DragDropPane) if available, else
// take
// the source component
Component component = ctr.getSourceComponent();
if (component == wrapper) {
WrapperTransferable tr = (WrapperTransferable) transferable;
component = tr.getDraggedComponent();
}

if (component != null) {

if (component.getParent() != layout) {
if (transferable instanceof DataBoundTransferable) {
// Item has been dragged, construct a Label from
// Item id
Label l = new Label();
l.setSizeUndefined();
l.setValue("ItemId : "
+ ((DataBoundTransferable) transferable)
.getItemId());
layout.addComponent(l);
component = l;

} else {
// we have a component that is been dragged, add
// it
// to
// this
layout.addComponent(component);
}

Integer left = ed.getAbsoluteLeft();
Integer top = ed.getAbsoluteTop();

MouseEventDetails eventDetails = ed.getMouseEvent();

int clientX = eventDetails.getClientX();
int clientY = eventDetails.getClientY();

try {
layout.getPosition(component).setTopValue(
clientY - top);
layout.getPosition(component).setLeftValue(
clientX - left);
} catch (Exception e) {
// TODO: handle exception
}
} else {

WrapperTransferable tr = (WrapperTransferable) transferable;
// drag ended inside the this Pane

MouseEventDetails start = tr.getMouseDownEvent();
MouseEventDetails eventDetails = ed.getMouseEvent();

int deltaX = eventDetails.getClientX()
- start.getClientX();
int deltaY = eventDetails.getClientY()
- start.getClientY();

ComponentPosition p = layout.getPosition(component);
p.setTopValue(p.getTopValue() + deltaY);
p.setLeftValue(p.getLeftValue() + deltaX);

}

} else {
// drag coming outside of Vaadin
String object = (String) transferable.getData("text/plain");

String content = (String) transferable
.getData("fileContents");

Label l = new Label();
l.setCaption("Generated from HTML5 drag:");
if (object != null) {
l.setValue(object);
} else {
l.setValue("HTML5 dd");
}

l.setDescription(content);
l.setSizeUndefined();

layout.addComponent(l);

}
return;
}
});

wrapper.setDragStartMode(DragStartMode.COMPONENT);
wrapper.setSizeFull();
setContent(wrapper);

setWidth("250px");
setHeight("100px");
}

}

+ 3
- 3
tests/src/com/vaadin/tests/dd/AcceptFromComponent.java View File

@@ -1,6 +1,6 @@
package com.vaadin.tests.dd;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
@@ -24,8 +24,8 @@ public class AcceptFromComponent extends Window {

public boolean accepts(DragAndDropEvent dragEvent) {
Transferable transferable = dragEvent.getTransferable();
if (transferable instanceof ComponentTransferable) {
ComponentTransferable componentTransferrable = (ComponentTransferable) transferable;
if (transferable instanceof TransferableImpl) {
TransferableImpl componentTransferrable = (TransferableImpl) transferable;
if (componentTransferrable.getSourceComponent() == tree1) {
return true;
}

+ 3
- 3
tests/src/com/vaadin/tests/dd/DDTest1.java View File

@@ -4,7 +4,7 @@ import java.util.Collection;

import com.vaadin.data.Item;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.DataBoundTransferable;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragAndDropEvent;
@@ -70,8 +70,8 @@ public class DDTest1 extends TestBase {
// e.printStackTrace();
// }
// System.out.println("Done get to work.");
if (transferable instanceof ComponentTransferable) {
ComponentTransferable ct = (ComponentTransferable) transferable;
if (transferable instanceof TransferableImpl) {
TransferableImpl ct = (TransferableImpl) transferable;

Component component = (Component) ct
.getData("component");

+ 14
- 8
tests/src/com/vaadin/tests/dd/DDTest2.java View File

@@ -1,8 +1,6 @@
package com.vaadin.tests.dd;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import com.vaadin.data.Container;
import com.vaadin.data.Item;
@@ -19,6 +17,7 @@ import com.vaadin.event.dd.acceptCriteria.ComponentFilter;
import com.vaadin.event.dd.acceptCriteria.IsDatabound;
import com.vaadin.event.dd.acceptCriteria.Or;
import com.vaadin.event.dd.acceptCriteria.OverTreeNode;
import com.vaadin.event.dd.acceptCriteria.ServerSideCriterion;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.tests.components.TestBase;
@@ -28,6 +27,7 @@ import com.vaadin.ui.Table;
import com.vaadin.ui.Tree;
import com.vaadin.ui.Window;
import com.vaadin.ui.AbstractSelect.AbstractSelectDropDetails;
import com.vaadin.ui.Tree.TreeDropDetails;

public class DDTest2 extends TestBase {

@@ -70,13 +70,19 @@ public class DDTest2 extends TestBase {
* explicitly defining them here), but demonstrates lazy initialization
* option if rules are heavy.
*/
final AcceptCriterion crit = new Tree.TreeDropCriterion() {
final AcceptCriterion crit = new ServerSideCriterion() {
public boolean accepts(DragAndDropEvent dragEvent) {

@Override
protected Set<Object> getAllowedItemIds(DragAndDropEvent dragEvent,
Tree tree) {
HashSet<Object> hashSet = new HashSet<Object>(tree.getItemIds());
return hashSet;
TreeDropDetails dropTargetData = (TreeDropDetails) dragEvent
.getDropTargetData();

Object itemIdOver = dropTargetData.getItemIdOver();

int i = r.nextInt();
if (i % 2 == 0) {
return true;
}
return false;
}
};


+ 3
- 3
tests/src/com/vaadin/tests/dd/DDTest5.java View File

@@ -15,7 +15,7 @@ import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Window;
import com.vaadin.ui.DragAndDropWrapper.DDWrapperTransferable;
import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
import com.vaadin.ui.DragAndDropWrapper.DragStartMode;

public class DDTest5 extends TestBase {
@@ -98,8 +98,8 @@ public class DDTest5 extends TestBase {
* here)
*/

if (dropEvent.getTransferable() instanceof DDWrapperTransferable) {
DDWrapperTransferable transferable = (DDWrapperTransferable) dropEvent
if (dropEvent.getTransferable() instanceof WrapperTransferable) {
WrapperTransferable transferable = (WrapperTransferable) dropEvent
.getTransferable();
Component sourceComponent = transferable
.getSourceComponent();

+ 3
- 3
tests/src/com/vaadin/tests/dd/HorizontalLayoutSortableWithWrappers.java View File

@@ -2,7 +2,7 @@ package com.vaadin.tests.dd;

import java.util.Iterator;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
@@ -61,8 +61,8 @@ public class HorizontalLayoutSortableWithWrappers extends Window {

public void drop(DragAndDropEvent dropEvent) {
Transferable transferable = dropEvent.getTransferable();
if (transferable instanceof ComponentTransferable) {
ComponentTransferable ct = (ComponentTransferable) transferable;
if (transferable instanceof TransferableImpl) {
TransferableImpl ct = (TransferableImpl) transferable;
Component sourceComponent = ct.getSourceComponent();
if (sourceComponent instanceof WrappedLabel) {
int index = 1;

+ 3
- 3
tests/src/com/vaadin/tests/dd/HorizontalSortableCssLayoutWithWrappers.java View File

@@ -2,7 +2,7 @@ package com.vaadin.tests.dd;

import java.util.Iterator;

import com.vaadin.event.ComponentTransferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.Transferable;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
@@ -54,8 +54,8 @@ public class HorizontalSortableCssLayoutWithWrappers extends Window {

public void drop(DragAndDropEvent dropEvent) {
Transferable transferable = dropEvent.getTransferable();
if (transferable instanceof ComponentTransferable) {
ComponentTransferable ct = (ComponentTransferable) transferable;
if (transferable instanceof TransferableImpl) {
TransferableImpl ct = (TransferableImpl) transferable;
Component sourceComponent = ct.getSourceComponent();
if (sourceComponent instanceof WrappedLabel) {
int index = 1;

Loading…
Cancel
Save