package com.vaadin.tests.dnd; import java.util.ArrayList; import java.util.List; import com.vaadin.annotations.Theme; import com.vaadin.annotations.Widgetset; import com.vaadin.server.Page; import com.vaadin.server.VaadinRequest; import com.vaadin.shared.ui.dnd.DropEffect; import com.vaadin.shared.ui.dnd.EffectAllowed; import com.vaadin.shared.ui.dnd.criteria.ComparisonOperator; import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.ui.CheckBox; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.NativeSelect; import com.vaadin.ui.dnd.DragSourceExtension; import com.vaadin.ui.dnd.DropTargetExtension; @Theme("valo") @Widgetset("com.vaadin.DefaultWidgetSet") public class DragAndDropCardShuffle extends AbstractTestUIWithLog { // Create cards private final Label ace = new Label("A"); private final Label jack = new Label("J"); private final Label queen = new Label("Q"); private final Label king = new Label("K"); // Create desk private HorizontalLayout desk = new HorizontalLayout(); private final List> sources = new ArrayList<>(); private final List> targets = new ArrayList<>(); @Override protected void setup(VaadinRequest request) { NativeSelect effectAllowed = new NativeSelect<>( "Effect Allowed (source)"); effectAllowed.setItems(EffectAllowed.values()); effectAllowed.setValue(EffectAllowed.UNINITIALIZED); effectAllowed.setEmptySelectionAllowed(false); effectAllowed.addValueChangeListener(event -> sources .forEach(source -> source.setEffectAllowed(event.getValue()))); NativeSelect dropEffect = new NativeSelect<>( "Drop Effect (target)"); dropEffect.setItems(DropEffect.values()); dropEffect.addValueChangeListener(event -> targets .forEach(target -> target.setDropEffect(event.getValue()))); CheckBox enableMobileSupport = new CheckBox("Mobile Support", false); enableMobileSupport.addValueChangeListener(event -> { setMobileHtml5DndEnabled(event.getValue()); removeExtensions(); setupExtensions(); }); setupExtensions(); desk.addComponents(ace, jack, queen, king); addComponents(new HorizontalLayout(effectAllowed, dropEffect, enableMobileSupport), desk); // Add styling setStyle(); } private void setupExtensions() { // Create UI and add extensions ace.setStyleName("card"); addDragSourceExtension(ace, 14); addDropTargetExtension(ace, 14); jack.setStyleName("card"); addDragSourceExtension(jack, 11); addDropTargetExtension(jack, 11); queen.setStyleName("card"); addDragSourceExtension(queen, 12); addDropTargetExtension(queen, 12); king.setStyleName("card"); addDragSourceExtension(king, 13); addDropTargetExtension(king, 13); } private void removeExtensions() { ace.removeExtension(ace.getExtensions().iterator().next()); ace.removeExtension(ace.getExtensions().iterator().next()); jack.removeExtension(jack.getExtensions().iterator().next()); jack.removeExtension(jack.getExtensions().iterator().next()); queen.removeExtension(queen.getExtensions().iterator().next()); queen.removeExtension(queen.getExtensions().iterator().next()); king.removeExtension(king.getExtensions().iterator().next()); king.removeExtension(king.getExtensions().iterator().next()); } private void addDragSourceExtension(Label source, int cardValue) { // Create and attach extension DragSourceExtension