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.

HorizontalLayoutSortableWithWrappers.java 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.vaadin.tests.dd;
  2. import java.util.Iterator;
  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.DropTarget;
  8. import com.vaadin.event.dd.DropTargetDetails;
  9. import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
  10. import com.vaadin.event.dd.acceptcriteria.And;
  11. import com.vaadin.event.dd.acceptcriteria.DropTargetDetailEquals;
  12. import com.vaadin.event.dd.acceptcriteria.IsSameSourceAndTarget;
  13. import com.vaadin.event.dd.acceptcriteria.Not;
  14. import com.vaadin.ui.Component;
  15. import com.vaadin.ui.DragAndDropWrapper;
  16. import com.vaadin.ui.HorizontalLayout;
  17. import com.vaadin.ui.Label;
  18. import com.vaadin.ui.Window;
  19. /**
  20. * Same as with css layout but tests size change propagation on emphasis +
  21. * rules.
  22. *
  23. *
  24. */
  25. public class HorizontalLayoutSortableWithWrappers extends Window {
  26. static int count;
  27. private HorizontalLayout layout = new HorizontalLayout();
  28. class WrappedLabel extends DragAndDropWrapper {
  29. private static final long serialVersionUID = 1L;
  30. public WrappedLabel(String content) {
  31. super(new Label(content + " c:" + ++count));
  32. getCompositionRoot().setWidth("60px");
  33. getCompositionRoot().setHeight("60px");
  34. setSizeUndefined();
  35. setDragStartMode(DragStartMode.WRAPPER);
  36. }
  37. @Override
  38. public DropHandler getDropHandler() {
  39. return dh;
  40. }
  41. }
  42. private DropHandler dh = new DropHandler() {
  43. AcceptCriterion crit = new And(new DropTargetDetailEquals(
  44. "horizontalLocation", "LEFT"), new Not(IsSameSourceAndTarget
  45. .get()));
  46. public AcceptCriterion getAcceptCriterion() {
  47. return crit;
  48. }
  49. public void drop(DragAndDropEvent dropEvent) {
  50. Transferable transferable = dropEvent.getTransferable();
  51. if (transferable instanceof TransferableImpl) {
  52. TransferableImpl ct = (TransferableImpl) transferable;
  53. Component sourceComponent = ct.getSourceComponent();
  54. if (sourceComponent instanceof WrappedLabel) {
  55. int index = 1;
  56. Iterator<Component> componentIterator = layout
  57. .getComponentIterator();
  58. Component next = componentIterator.next();
  59. DropTargetDetails dropTargetData = dropEvent
  60. .getDropTargetDetails();
  61. DropTarget target = dropTargetData.getTarget();
  62. while (next != target) {
  63. if (next != sourceComponent) {
  64. index++;
  65. }
  66. next = componentIterator.next();
  67. }
  68. if (dropTargetData.getData("horizontalLocation").equals(
  69. "LEFT")) {
  70. index--;
  71. if (index < 0) {
  72. index = 0;
  73. }
  74. }
  75. layout.removeComponent(sourceComponent);
  76. layout.addComponent(sourceComponent, index);
  77. }
  78. }
  79. // TODO Auto-generated method stub
  80. }
  81. };
  82. public HorizontalLayoutSortableWithWrappers() {
  83. setCaption("Horizontally sortable layout via (ddwrappers): Try sorting blocks by dragging them");
  84. DragAndDropWrapper pane = new DragAndDropWrapper(layout);
  85. setContent(pane);
  86. pane.setSizeFull();
  87. setWidth("400px");
  88. setHeight("100px");
  89. for (int i = 0; i < 4; i++) {
  90. layout.addComponent(new WrappedLabel("Block"));
  91. }
  92. }
  93. }