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.

AcceptFromComponent.java 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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.AcceptCriterion;
  8. import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
  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.Tree;
  15. import com.vaadin.ui.Window;
  16. import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
  17. import com.vaadin.ui.DragAndDropWrapper.WrapperDropDetails;
  18. import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
  19. public class AcceptFromComponent extends Window {
  20. private AbsoluteLayout layout;
  21. public AcceptFromComponent(final Tree tree1) {
  22. setCaption("Checks the source is tree1 on server");
  23. layout = new AbsoluteLayout();
  24. DragAndDropWrapper wrapper = new DragAndDropWrapper(layout);
  25. setContent(wrapper);
  26. wrapper.setSizeFull();
  27. layout.setSizeFull();
  28. setWidth("450px");
  29. setHeight("150px");
  30. final ServerSideCriterion serverSideCriterion = new ServerSideCriterion() {
  31. public boolean accept(DragAndDropEvent dragEvent) {
  32. Transferable transferable = dragEvent.getTransferable();
  33. if (transferable instanceof TransferableImpl) {
  34. TransferableImpl componentTransferrable = (TransferableImpl) transferable;
  35. if (componentTransferrable.getSourceComponent() == tree1) {
  36. return true;
  37. }
  38. }
  39. return false;
  40. }
  41. };
  42. wrapper.setDropHandler(new DropHandler() {
  43. public AcceptCriterion getAcceptCriterion() {
  44. return serverSideCriterion;
  45. }
  46. public void drop(DragAndDropEvent event) {
  47. WrapperDropDetails ed = (WrapperDropDetails) event
  48. .getDropTargetDetails();
  49. Transferable ctr = event.getTransferable();
  50. if (ctr.getSourceComponent() != null) {
  51. // use "component" (from DragDropPane) if available, else
  52. // take
  53. // the source component
  54. Component component = (Component) ctr.getData("component");
  55. if (component == null) {
  56. component = ctr.getSourceComponent();
  57. }
  58. if (component.getParent() != layout) {
  59. if (ctr instanceof DataBoundTransferable) {
  60. // Item has been dragged, construct a Label from
  61. // Item id
  62. Label l = new Label();
  63. l.setSizeUndefined();
  64. l
  65. .setValue("ItemId : "
  66. + ((DataBoundTransferable) ctr)
  67. .getItemId());
  68. layout.addComponent(l);
  69. component = l;
  70. } else {
  71. // we have a component that is been dragged, add
  72. // it
  73. // to
  74. // this
  75. layout.addComponent(component);
  76. }
  77. Integer left = ed.getAbsoluteLeft();
  78. Integer top = ed.getAbsoluteTop();
  79. MouseEventDetails eventDetails = ed.getMouseEvent();
  80. int clientX = eventDetails.getClientX();
  81. int clientY = eventDetails.getClientY();
  82. try {
  83. layout.getPosition(component).setTopValue(
  84. clientY - top);
  85. layout.getPosition(component).setLeftValue(
  86. clientX - left);
  87. } catch (Exception e) {
  88. // TODO: handle exception
  89. }
  90. } else {
  91. // drag started and ended inside the this Pane
  92. DragAndDropWrapper.WrapperTransferable tr = (WrapperTransferable) event
  93. .getTransferable();
  94. MouseEventDetails start = tr.getMouseDownEvent();
  95. MouseEventDetails eventDetails = ed.getMouseEvent();
  96. int deltaX = eventDetails.getClientX()
  97. - start.getClientX();
  98. int deltaY = eventDetails.getClientY()
  99. - start.getClientY();
  100. ComponentPosition p = layout.getPosition(component);
  101. p.setTopValue(p.getTopValue() + deltaY);
  102. p.setLeftValue(p.getLeftValue() + deltaX);
  103. }
  104. } else {
  105. // drag coming outside of Vaadin
  106. String object = (String) ctr.getData("text/plain");
  107. String content = (String) ctr.getData("fileContents");
  108. Label l = new Label();
  109. l.setCaption("Generated from HTML5 drag:");
  110. if (object != null) {
  111. l.setValue(object);
  112. } else {
  113. l.setValue("HTML5 dd");
  114. }
  115. l.setDescription(content);
  116. l.setSizeUndefined();
  117. layout.addComponent(l);
  118. }
  119. return;
  120. }
  121. });
  122. }
  123. }