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.

TableClickAndDragOnIconAndComponents.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package com.vaadin.tests.components.table;
  2. import com.vaadin.data.Item;
  3. import com.vaadin.data.util.IndexedContainer;
  4. import com.vaadin.event.DataBoundTransferable;
  5. import com.vaadin.event.dd.DragAndDropEvent;
  6. import com.vaadin.event.dd.DropHandler;
  7. import com.vaadin.event.dd.acceptcriteria.AcceptAll;
  8. import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
  9. import com.vaadin.server.Resource;
  10. import com.vaadin.server.ThemeResource;
  11. import com.vaadin.server.VaadinRequest;
  12. import com.vaadin.tests.components.AbstractTestUI;
  13. import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
  14. import com.vaadin.ui.Component;
  15. import com.vaadin.ui.Embedded;
  16. import com.vaadin.ui.Label;
  17. import com.vaadin.ui.Table;
  18. import com.vaadin.ui.Table.ColumnGenerator;
  19. import com.vaadin.ui.Table.RowHeaderMode;
  20. import com.vaadin.ui.Table.TableDragMode;
  21. import com.vaadin.ui.TextField;
  22. public class TableClickAndDragOnIconAndComponents extends AbstractTestUI {
  23. private static final long serialVersionUID = -2534880024131980135L;
  24. private Table table;
  25. @Override
  26. protected void setup(VaadinRequest request) {
  27. table = new Table();
  28. table.addContainerProperty("foo", String.class, "foo");
  29. table.addContainerProperty("red", String.class, "red");
  30. table.addContainerProperty("icon", Resource.class, null);
  31. table.setSelectable(true);
  32. table.setRowHeaderMode(RowHeaderMode.ICON_ONLY);
  33. table.setItemIconPropertyId("icon");
  34. table.setId("testable-table");
  35. addComponent(table);
  36. for (int i = 0; i < 5; i++) {
  37. addItemAfter(i + "foo", null);
  38. }
  39. table.addGeneratedColumn("Label", new ColumnGenerator() {
  40. private static final long serialVersionUID = -5042109683675242407L;
  41. @Override
  42. public Component generateCell(Table source, Object itemId,
  43. Object columnId) {
  44. Item item = source.getItem(itemId);
  45. return new Label("" + item.getItemProperty("foo").getValue());
  46. }
  47. });
  48. table.addGeneratedColumn("textField", new ColumnGenerator() {
  49. private static final long serialVersionUID = -5042109683675242407L;
  50. @Override
  51. public Component generateCell(Table source, Object itemId,
  52. Object columnId) {
  53. Item item = source.getItem(itemId);
  54. TextField textfield = new TextField();
  55. textfield.setValue(String.valueOf(item.getItemProperty("foo")
  56. .getValue()));
  57. return textfield;
  58. }
  59. });
  60. table.addGeneratedColumn("readOnlyTextField", new ColumnGenerator() {
  61. private static final long serialVersionUID = -5042109683675242407L;
  62. @Override
  63. public Component generateCell(Table source, Object itemId,
  64. Object columnId) {
  65. Item item = source.getItem(itemId);
  66. TextField textfield = new TextField();
  67. textfield.setValue(String.valueOf(item.getItemProperty("foo")
  68. .getValue()));
  69. textfield.setReadOnly(true);
  70. return textfield;
  71. }
  72. });
  73. table.addGeneratedColumn("embedded", new ColumnGenerator() {
  74. private static final long serialVersionUID = -5042109683675242407L;
  75. @Override
  76. public Component generateCell(Table source, Object itemId,
  77. Object columnId) {
  78. Embedded embedded = new Embedded(null, new ThemeResource(
  79. "../runo/icons/16/ok.png"));
  80. return embedded;
  81. }
  82. });
  83. table.setDragMode(TableDragMode.ROW);
  84. table.setDropHandler(new DropHandler() {
  85. @Override
  86. public AcceptCriterion getAcceptCriterion() {
  87. return AcceptAll.get();
  88. }
  89. @Override
  90. public void drop(DragAndDropEvent event) {
  91. DataBoundTransferable t = (DataBoundTransferable) event
  92. .getTransferable();
  93. Object dragged = t.getItemId();
  94. AbstractSelectTargetDetails dropData = ((AbstractSelectTargetDetails) event
  95. .getTargetDetails());
  96. Object target = dropData.getItemIdOver();
  97. if (dragged == target || target == null) {
  98. return;
  99. }
  100. IndexedContainer container = (IndexedContainer) table
  101. .getContainerDataSource();
  102. container.removeItem(dragged);
  103. addItemAfter(dragged, target);
  104. }
  105. });
  106. }
  107. @SuppressWarnings("unchecked")
  108. private void addItemAfter(Object itemId, Object afterItemId) {
  109. Item item;
  110. if (afterItemId != null) {
  111. item = table.addItemAfter(afterItemId, itemId);
  112. } else {
  113. item = table.addItem(itemId);
  114. }
  115. item.getItemProperty("foo").setValue("foo " + itemId);
  116. item.getItemProperty("red").setValue("red " + itemId);
  117. item.getItemProperty("icon").setValue(
  118. new ThemeResource("../runo/icons/16/ok.png"));
  119. }
  120. @Override
  121. protected String getTestDescription() {
  122. return "Tests that you can click on a row icon in a table to select the row, or to drag the row. Verifies also that the table doesn't capture the click events meant for components inside the table";
  123. }
  124. @Override
  125. protected Integer getTicketNumber() {
  126. return 7026;
  127. }
  128. }