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.

DDTest4.java 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.vaadin.tests.dd;
  2. import com.vaadin.data.Item;
  3. import com.vaadin.data.util.IndexedContainer;
  4. import com.vaadin.demo.tutorial.addressbook.data.Person;
  5. import com.vaadin.demo.tutorial.addressbook.data.PersonContainer;
  6. import com.vaadin.event.DataBoundTransferable;
  7. import com.vaadin.event.dd.DragAndDropEvent;
  8. import com.vaadin.event.dd.DropHandler;
  9. import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
  10. import com.vaadin.event.dd.acceptCriteria.DragSourceIs;
  11. import com.vaadin.terminal.ThemeResource;
  12. import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
  13. import com.vaadin.tests.components.TestBase;
  14. import com.vaadin.tests.util.TestUtils;
  15. import com.vaadin.ui.HorizontalLayout;
  16. import com.vaadin.ui.Table;
  17. import com.vaadin.ui.Window;
  18. import com.vaadin.ui.AbstractSelect.AbstractSelectDropTargetDetails;
  19. public class DDTest4 extends TestBase {
  20. java.util.Random r = new java.util.Random(1);
  21. HorizontalLayout hl = new HorizontalLayout();
  22. Table table = new Table("Drag and drop sortable table");
  23. @Override
  24. protected void setup() {
  25. Window w = getLayout().getWindow();
  26. TestUtils
  27. .injectCSS(
  28. w,
  29. ".v-table-row-drag-middle .v-table-cell-content {"
  30. + " background-color: inherit ; border-bottom: 1px solid cyan;"
  31. + "}");
  32. /* darn reindeer has no icons */
  33. // hl.addComponent(tree1);
  34. hl.addComponent(table);
  35. // hl.addComponent(tree2);
  36. hl.setWidth("100%");
  37. hl.setSpacing(true);
  38. hl.setExpandRatio(table, 1);
  39. table.setWidth("100%");
  40. table.setPageLength(10);
  41. table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);
  42. table.setSelectable(true);
  43. populateTable();
  44. addComponent(hl);
  45. /*
  46. * Make table rows draggable
  47. */
  48. table.setDragMode(Table.DragModes.ROWS);
  49. table.setDropHandler(new DropHandler() {
  50. // accept only drags from this table
  51. AcceptCriterion crit = new DragSourceIs(table);
  52. public AcceptCriterion getAcceptCriterion() {
  53. return crit;
  54. }
  55. public void drop(DragAndDropEvent dropEvent) {
  56. AbstractSelectDropTargetDetails dropTargetData = (AbstractSelectDropTargetDetails) dropEvent
  57. .getDropTargetDetails();
  58. DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
  59. .getTransferable();
  60. Object itemIdOver = dropTargetData.getItemIdOver();
  61. Object itemId = transferable.getItemId();
  62. if (itemId == null || itemIdOver == null
  63. || itemId.equals(itemIdOver)) {
  64. return; // no move happened
  65. }
  66. // IndexedContainer goodies... (hint: don't use it in real apps)
  67. IndexedContainer containerDataSource = (IndexedContainer) table
  68. .getContainerDataSource();
  69. IndexedContainer clone = null;
  70. try {
  71. clone = (IndexedContainer) containerDataSource.clone();
  72. int newIndex = containerDataSource.indexOfId(itemIdOver) - 1;
  73. if (dropTargetData.getDropLocation() != VerticalDropLocation.TOP) {
  74. newIndex++;
  75. }
  76. if (newIndex < 0) {
  77. newIndex = 0;
  78. }
  79. containerDataSource.removeItem(itemId);
  80. Item newItem = containerDataSource.addItemAt(newIndex,
  81. itemId);
  82. Item item = clone.getItem(itemId);
  83. for (Object propId : item.getItemPropertyIds()) {
  84. newItem.getItemProperty(propId).setValue(
  85. item.getItemProperty(propId).getValue());
  86. }
  87. } catch (CloneNotSupportedException e) {
  88. // TODO Auto-generated catch block
  89. e.printStackTrace();
  90. }
  91. }
  92. });
  93. }
  94. private void populateTable() {
  95. table.addContainerProperty("Name", String.class, "");
  96. table.addContainerProperty("Weight", Integer.class, 0);
  97. PersonContainer testData = PersonContainer.createWithTestData();
  98. for (int i = 0; i < 10; i++) {
  99. Item addItem = table.addItem("Item" + i);
  100. Person p = testData.getIdByIndex(i);
  101. addItem.getItemProperty("Name").setValue(
  102. p.getFirstName() + " " + p.getLastName());
  103. addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60));
  104. }
  105. }
  106. private final static ThemeResource FOLDER = new ThemeResource(
  107. "../runo/icons/16/folder.png");
  108. private final static ThemeResource DOC = new ThemeResource(
  109. "../runo/icons/16/document.png");
  110. @Override
  111. protected String getDescription() {
  112. return "dd";
  113. }
  114. @Override
  115. protected Integer getTicketNumber() {
  116. return 119;
  117. }
  118. }