Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

DDTest5.java 6.7KB

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