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.

HorizontalSortableCssLayoutWithWrappers.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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.AcceptAll;
  10. import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
  11. import com.vaadin.ui.Component;
  12. import com.vaadin.ui.CssLayout;
  13. import com.vaadin.ui.DragAndDropWrapper;
  14. import com.vaadin.ui.Label;
  15. import com.vaadin.ui.Window;
  16. public class HorizontalSortableCssLayoutWithWrappers extends Window {
  17. static int count;
  18. private CssLayout cssLayout = new CssLayout() {
  19. @Override
  20. protected String getCss(Component c) {
  21. return "float:left; width:60px;height:60px;background: yellow;padding:2px;";
  22. };
  23. };
  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. setSizeUndefined(); // via css
  29. setHeight("60px"); // FIXME custom component seems to be broken:
  30. // can't set height with css only
  31. setDragStartMode(DragStartMode.WRAPPER);
  32. }
  33. @Override
  34. public DropHandler getDropHandler() {
  35. return dh;
  36. }
  37. }
  38. private DropHandler dh = new DropHandler() {
  39. public AcceptCriterion getAcceptCriterion() {
  40. return AcceptAll.get();
  41. }
  42. public void drop(DragAndDropEvent dropEvent) {
  43. Transferable transferable = dropEvent.getTransferable();
  44. if (transferable instanceof TransferableImpl) {
  45. TransferableImpl ct = (TransferableImpl) transferable;
  46. Component sourceComponent = ct.getSourceComponent();
  47. if (sourceComponent instanceof WrappedLabel) {
  48. int index = 1;
  49. Iterator<Component> componentIterator = cssLayout
  50. .getComponentIterator();
  51. Component next = componentIterator.next();
  52. DropTargetDetails dropTargetData = dropEvent
  53. .getDropTargetDetails();
  54. DropTarget target = dropTargetData.getTarget();
  55. while (next != target) {
  56. if (next != sourceComponent) {
  57. index++;
  58. }
  59. next = componentIterator.next();
  60. }
  61. if (dropTargetData.getData("horizontalLocation").equals(
  62. "LEFT")) {
  63. index--;
  64. if (index < 0) {
  65. index = 0;
  66. }
  67. }
  68. cssLayout.removeComponent(sourceComponent);
  69. cssLayout.addComponent(sourceComponent, index);
  70. }
  71. }
  72. // TODO Auto-generated method stub
  73. }
  74. };
  75. public HorizontalSortableCssLayoutWithWrappers() {
  76. setCaption("Horizontally sortable csslayout via (ddwrappers):Try sorting blocks by draggin them");
  77. DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
  78. setContent(pane);
  79. pane.setSizeFull();
  80. setWidth("400px");
  81. setHeight("100px");
  82. for (int i = 0; i < 4; i++) {
  83. cssLayout.addComponent(new WrappedLabel("Block"));
  84. }
  85. }
  86. }