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.6KB

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