You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AcceptAnythingWindow.java 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.vaadin.tests.dd;
  2. import com.vaadin.event.DataBoundTransferable;
  3. import com.vaadin.event.Transferable;
  4. import com.vaadin.event.TransferableImpl;
  5. import com.vaadin.event.dd.DragAndDropEvent;
  6. import com.vaadin.event.dd.DropHandler;
  7. import com.vaadin.event.dd.acceptcriteria.AcceptAll;
  8. import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
  9. import com.vaadin.terminal.gwt.client.MouseEventDetails;
  10. import com.vaadin.ui.AbsoluteLayout;
  11. import com.vaadin.ui.Component;
  12. import com.vaadin.ui.DragAndDropWrapper;
  13. import com.vaadin.ui.Label;
  14. import com.vaadin.ui.Window;
  15. import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
  16. import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
  17. import com.vaadin.ui.DragAndDropWrapper.WrapperDropDetails;
  18. import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
  19. public class AcceptAnythingWindow extends Window {
  20. private AbsoluteLayout layout = new AbsoluteLayout();
  21. public AcceptAnythingWindow() {
  22. setCaption("Drop anything here");
  23. final DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
  24. wrapper.setDropHandler(new DropHandler() {
  25. public AcceptCriterion getAcceptCriterion() {
  26. return AcceptAll.get();
  27. }
  28. public void drop(DragAndDropEvent event) {
  29. WrapperDropDetails ed = (WrapperDropDetails) event
  30. .getDropTargetDetails();
  31. Transferable transferable = event.getTransferable();
  32. TransferableImpl ctr = (TransferableImpl) transferable;
  33. Component component = ctr.getSourceComponent();
  34. if (component == wrapper) {
  35. // if the drag source was wrapper we are interested about
  36. // the dragged component
  37. WrapperTransferable tr = (WrapperTransferable) transferable;
  38. component = tr.getDraggedComponent();
  39. // html5 drag created by wrapper set component null
  40. }
  41. if (component != null) {
  42. if (component.getParent() != layout) {
  43. if (transferable instanceof DataBoundTransferable) {
  44. // Item has been dragged, construct a Label from
  45. // Item id
  46. Label l = new Label();
  47. l.setSizeUndefined();
  48. l.setValue("ItemId : "
  49. + ((DataBoundTransferable) transferable)
  50. .getItemId());
  51. layout.addComponent(l);
  52. component = l;
  53. } else {
  54. // we have a component that is been dragged, add
  55. // it to this
  56. layout.addComponent(component);
  57. }
  58. Integer left = ed.getAbsoluteLeft();
  59. Integer top = ed.getAbsoluteTop();
  60. MouseEventDetails eventDetails = ed.getMouseEvent();
  61. int clientX = eventDetails.getClientX();
  62. int clientY = eventDetails.getClientY();
  63. try {
  64. layout.getPosition(component).setTopValue(
  65. clientY - top);
  66. layout.getPosition(component).setLeftValue(
  67. clientX - left);
  68. } catch (Exception e) {
  69. // TODO: handle exception
  70. }
  71. } else {
  72. WrapperTransferable tr = (WrapperTransferable) transferable;
  73. // drag ended inside the this Pane
  74. MouseEventDetails start = tr.getMouseDownEvent();
  75. MouseEventDetails eventDetails = ed.getMouseEvent();
  76. int deltaX = eventDetails.getClientX()
  77. - start.getClientX();
  78. int deltaY = eventDetails.getClientY()
  79. - start.getClientY();
  80. ComponentPosition p = layout.getPosition(component);
  81. p.setTopValue(p.getTopValue() + deltaY);
  82. p.setLeftValue(p.getLeftValue() + deltaX);
  83. }
  84. } else {
  85. // drag coming outside of Vaadin
  86. String object = (String) transferable.getData("Text");
  87. String content = (String) transferable
  88. .getData("fileContents");
  89. Label l = new Label();
  90. l.setCaption("Generated from HTML5 drag:");
  91. if (object != null) {
  92. l.setValue(object);
  93. } else {
  94. l.setValue("HTML5 dd");
  95. }
  96. l.setDescription(content);
  97. l.setSizeUndefined();
  98. layout.addComponent(l);
  99. }
  100. return;
  101. }
  102. });
  103. wrapper.setDragStartMode(DragStartMode.COMPONENT);
  104. wrapper.setSizeFull();
  105. setContent(wrapper);
  106. setWidth("250px");
  107. setHeight("100px");
  108. }
  109. }