123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- package com.vaadin.tests.dd;
-
- import java.util.Iterator;
-
- import com.vaadin.event.dd.DragAndDropEvent;
- import com.vaadin.event.dd.DropHandler;
- import com.vaadin.event.dd.DropTarget;
- import com.vaadin.event.dd.acceptcriteria.AcceptAll;
- import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
- import com.vaadin.tests.components.TestBase;
- import com.vaadin.ui.Component;
- import com.vaadin.ui.CssLayout;
- import com.vaadin.ui.DragAndDropWrapper;
- import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
- import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
- import com.vaadin.ui.HorizontalLayout;
- import com.vaadin.ui.Label;
- import com.vaadin.ui.UI;
-
- public class DDTest5 extends TestBase {
-
- java.util.Random r = new java.util.Random(1);
-
- HorizontalLayout hl = new HorizontalLayout();
-
- private DragAndDropWrapper dragAndDropWrapper2;
-
- private DropHandler dh;
-
- private static int count;
-
- class WrappedLabel extends DragAndDropWrapper {
-
- private static final long serialVersionUID = 1L;
-
- public WrappedLabel(String content) {
- super(new Label(content + " c:" + ++count));
- setDragStartMode(DragStartMode.WRAPPER);
- }
-
- @Override
- public DropHandler getDropHandler() {
- return dh;
- }
-
- }
-
- @Override
- protected void setup() {
- UI w = getLayout().getUI();
-
- HorizontalSortableCssLayoutWithWrappers verticalSortableCssLayoutWithWrappers = new HorizontalSortableCssLayoutWithWrappers();
- w.addWindow(verticalSortableCssLayoutWithWrappers);
- verticalSortableCssLayoutWithWrappers.setPositionX(200);
- /*
- * FIXME: subwindow horizontal position does not work if only x set
- */
- verticalSortableCssLayoutWithWrappers.setPositionY(40);
-
- Label l;
-
- l = new Label("Drag me");
- DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(l);
- dragAndDropWrapper.setDragStartMode(DragStartMode.COMPONENT);
- dragAndDropWrapper.setWidth("100px");
- dragAndDropWrapper.setHeight("100px");
- getLayout().addComponent(dragAndDropWrapper);
-
- l = new Label("Drag me too");
- dragAndDropWrapper = new DragAndDropWrapper(l);
- dragAndDropWrapper.setDragStartMode(DragStartMode.WRAPPER);
- dragAndDropWrapper.setWidth("100px");
- dragAndDropWrapper.setHeight("100px");
- getLayout().addComponent(dragAndDropWrapper);
-
- final CssLayout cssLayout = new CssLayout();
- cssLayout.setHeight("300px");
-
- dragAndDropWrapper2 = new DragAndDropWrapper(cssLayout);
- dragAndDropWrapper2.setCaption(
- "Drop here or sort with dd (wrapper(csslayout(n*wrapper(label))))");
-
- dh = new DropHandler() {
-
- @Override
- public AcceptCriterion getAcceptCriterion() {
- return AcceptAll.get();
- }
-
- @Override
- public void drop(DragAndDropEvent dropEvent) {
-
- /*
- * TODO wrap componentns in wrappers (so we can build reordering
- * here)
- */
-
- if (dropEvent
- .getTransferable() instanceof WrapperTransferable) {
- WrapperTransferable transferable = (WrapperTransferable) dropEvent
- .getTransferable();
- Component sourceComponent = transferable
- .getSourceComponent();
-
- Component draggedComponent = transferable
- .getDraggedComponent();
-
- DropTarget target = dropEvent.getTargetDetails()
- .getTarget();
-
- WrappedLabel wrappedLabel = new WrappedLabel(
- draggedComponent.toString());
- if (target instanceof WrappedLabel) {
- int i = 1; // add next to reference by default
- Iterator<Component> componentIterator = cssLayout
- .getComponentIterator();
- Component next = componentIterator.next();
- while (next != target && componentIterator.hasNext()) {
- if (next != sourceComponent) {
- // don't count on index if component is being
- // moved
- i++;
- }
- next = componentIterator.next();
- }
-
- if (sourceComponent instanceof WrappedLabel) {
- cssLayout.removeComponent(sourceComponent);
- wrappedLabel = (WrappedLabel) sourceComponent;
- }
- if (dropEvent.getTargetDetails()
- .getData("verticalLocation").equals("TOP")) {
- // before reference if dropped on topmost part
- i--;
- if (i < 0) {
- i = 0;
- }
- }
- cssLayout.addComponent(wrappedLabel, i);
-
- } else {
- cssLayout.addComponent(wrappedLabel);
- }
-
- } else {
- // no component, add label with "Text"
-
- String data = (String) dropEvent.getTransferable()
- .getData("text/plain");
- if (data == null || "".equals(data)) {
- data = "-- no Text --";
- }
- cssLayout.addComponent(new WrappedLabel(data));
-
- }
-
- }
- };
-
- dragAndDropWrapper2.setDropHandler(dh);
-
- getLayout().addComponent(dragAndDropWrapper2);
-
- }
-
- @Override
- protected String getDescription() {
- return "dd: DragAndDropWrapper to build various use cases completely on server side";
- }
-
- @Override
- protected Integer getTicketNumber() {
- return 119;
- }
-
- }
|