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.

DDTest5.java 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.vaadin.tests.dd;
  2. import java.util.Iterator;
  3. import com.vaadin.event.dd.DragAndDropEvent;
  4. import com.vaadin.event.dd.DropHandler;
  5. import com.vaadin.event.dd.DropTarget;
  6. import com.vaadin.event.dd.acceptcriteria.AcceptAll;
  7. import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
  8. import com.vaadin.tests.components.TestBase;
  9. import com.vaadin.ui.Component;
  10. import com.vaadin.ui.CssLayout;
  11. import com.vaadin.ui.DragAndDropWrapper;
  12. import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
  13. import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
  14. import com.vaadin.ui.HorizontalLayout;
  15. import com.vaadin.ui.Label;
  16. import com.vaadin.ui.UI;
  17. public class DDTest5 extends TestBase {
  18. java.util.Random r = new java.util.Random(1);
  19. HorizontalLayout hl = new HorizontalLayout();
  20. private DragAndDropWrapper dragAndDropWrapper2;
  21. private DropHandler dh;
  22. private static int count;
  23. class WrappedLabel extends DragAndDropWrapper {
  24. private static final long serialVersionUID = 1L;
  25. public WrappedLabel(String content) {
  26. super(new Label(content + " c:" + ++count));
  27. setDragStartMode(DragStartMode.WRAPPER);
  28. }
  29. @Override
  30. public DropHandler getDropHandler() {
  31. return dh;
  32. }
  33. }
  34. @Override
  35. protected void setup() {
  36. UI w = getLayout().getUI();
  37. HorizontalSortableCssLayoutWithWrappers verticalSortableCssLayoutWithWrappers = new HorizontalSortableCssLayoutWithWrappers();
  38. w.addWindow(verticalSortableCssLayoutWithWrappers);
  39. verticalSortableCssLayoutWithWrappers.setPositionX(200);
  40. /*
  41. * FIXME: subwindow horizontal position does not work if only x set
  42. */
  43. verticalSortableCssLayoutWithWrappers.setPositionY(40);
  44. Label l;
  45. l = new Label("Drag me");
  46. DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(l);
  47. dragAndDropWrapper.setDragStartMode(DragStartMode.COMPONENT);
  48. dragAndDropWrapper.setWidth("100px");
  49. dragAndDropWrapper.setHeight("100px");
  50. getLayout().addComponent(dragAndDropWrapper);
  51. l = new Label("Drag me too");
  52. dragAndDropWrapper = new DragAndDropWrapper(l);
  53. dragAndDropWrapper.setDragStartMode(DragStartMode.WRAPPER);
  54. dragAndDropWrapper.setWidth("100px");
  55. dragAndDropWrapper.setHeight("100px");
  56. getLayout().addComponent(dragAndDropWrapper);
  57. final CssLayout cssLayout = new CssLayout();
  58. cssLayout.setHeight("300px");
  59. dragAndDropWrapper2 = new DragAndDropWrapper(cssLayout);
  60. dragAndDropWrapper2.setCaption(
  61. "Drop here or sort with dd (wrapper(csslayout(n*wrapper(label))))");
  62. dh = new DropHandler() {
  63. @Override
  64. public AcceptCriterion getAcceptCriterion() {
  65. return AcceptAll.get();
  66. }
  67. @Override
  68. public void drop(DragAndDropEvent dropEvent) {
  69. /*
  70. * TODO wrap componentns in wrappers (so we can build reordering
  71. * here)
  72. */
  73. if (dropEvent
  74. .getTransferable() instanceof WrapperTransferable) {
  75. WrapperTransferable transferable = (WrapperTransferable) dropEvent
  76. .getTransferable();
  77. Component sourceComponent = transferable
  78. .getSourceComponent();
  79. Component draggedComponent = transferable
  80. .getDraggedComponent();
  81. DropTarget target = dropEvent.getTargetDetails()
  82. .getTarget();
  83. WrappedLabel wrappedLabel = new WrappedLabel(
  84. draggedComponent.toString());
  85. if (target instanceof WrappedLabel) {
  86. int i = 1; // add next to reference by default
  87. Iterator<Component> componentIterator = cssLayout
  88. .getComponentIterator();
  89. Component next = componentIterator.next();
  90. while (next != target && componentIterator.hasNext()) {
  91. if (next != sourceComponent) {
  92. // don't count on index if component is being
  93. // moved
  94. i++;
  95. }
  96. next = componentIterator.next();
  97. }
  98. if (sourceComponent instanceof WrappedLabel) {
  99. cssLayout.removeComponent(sourceComponent);
  100. wrappedLabel = (WrappedLabel) sourceComponent;
  101. }
  102. if (dropEvent.getTargetDetails()
  103. .getData("verticalLocation").equals("TOP")) {
  104. // before reference if dropped on topmost part
  105. i--;
  106. if (i < 0) {
  107. i = 0;
  108. }
  109. }
  110. cssLayout.addComponent(wrappedLabel, i);
  111. } else {
  112. cssLayout.addComponent(wrappedLabel);
  113. }
  114. } else {
  115. // no component, add label with "Text"
  116. String data = (String) dropEvent.getTransferable()
  117. .getData("text/plain");
  118. if (data == null || "".equals(data)) {
  119. data = "-- no Text --";
  120. }
  121. cssLayout.addComponent(new WrappedLabel(data));
  122. }
  123. }
  124. };
  125. dragAndDropWrapper2.setDropHandler(dh);
  126. getLayout().addComponent(dragAndDropWrapper2);
  127. }
  128. @Override
  129. protected String getDescription() {
  130. return "dd: DragAndDropWrapper to build various use cases completely on server side";
  131. }
  132. @Override
  133. protected Integer getTicketNumber() {
  134. return 119;
  135. }
  136. }