--- /dev/null
+/**
+ *
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import java.util.Set;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VIdentifierIs implements VAcceptCriteria {
+ public void accept(VDragEvent drag, UIDL configuration,
+ VAcceptCallback callback) {
+ try {
+ Object data = drag.getTransferable().getData("itemId");
+ Set<String> stringArrayVariableAsSet = configuration
+ .getStringArrayVariableAsSet("keys");
+ if (stringArrayVariableAsSet.contains(data)) {
+ callback.accepted(drag);
+ }
+ } catch (Exception e) {
+ }
+ return;
+ }
+
+ public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+ return false;
+ }
+}
\ No newline at end of file
--- /dev/null
+/**
+ *
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import java.util.Set;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VIsOverId implements VAcceptCriteria {
+ public void accept(VDragEvent drag, UIDL configuration,
+ VAcceptCallback callback) {
+ try {
+ Set<String> stringArrayVariableAsSet = configuration
+ .getStringArrayVariableAsSet("keys");
+ if (stringArrayVariableAsSet.contains(drag.getDropDetails().get(
+ "itemIdOver"))) {
+ callback.accepted(drag);
+ }
+ } catch (Exception e) {
+ }
+ return;
+ }
+
+ public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+ return false;
+ }
+}
\ No newline at end of file
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.TargetDetailsImpl;
+import com.vaadin.event.dd.acceptCriteria.ClientCriterion;
+import com.vaadin.event.dd.acceptCriteria.ClientSideCriterion;
import com.vaadin.terminal.KeyMapper;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.gwt.client.ui.dd.VIdentifierIs;
+import com.vaadin.terminal.gwt.client.ui.dd.VIsOverId;
+import com.vaadin.ui.Tree.Location;
/**
* <p>
}
+ /**
+ * Criterion for selects that support drop (Tree and Table). With this
+ * criterion drop is accepted on given identifier or set of identifiers.
+ */
+ @ClientCriterion(VIsOverId.class)
+ public static class IsOverId extends AbstractItemSetCriterion {
+
+ public IsOverId(AbstractSelect select, Object... itemId) {
+ super(select, itemId);
+ }
+
+ public boolean accepts(DragAndDropEvent dragEvent) {
+ AbstractSelectDropDetails dropTargetData = (AbstractSelectDropDetails) dragEvent
+ .getDropTargetData();
+ return itemIds.contains(dropTargetData.getItemIdOver());
+ }
+
+ }
+
+ private static abstract class AbstractItemSetCriterion extends
+ ClientSideCriterion {
+ protected final Collection<Object> itemIds = new HashSet<Object>();
+ private AbstractSelect select;
+
+ public AbstractItemSetCriterion(AbstractSelect select, Object... itemId) {
+ if (itemIds == null || select == null) {
+ throw new IllegalArgumentException(
+ "Accepted item identifiers must be accepted.");
+ }
+ Collections.addAll(itemIds, itemId);
+ this.select = select;
+ }
+
+ @Override
+ public void paintContent(PaintTarget target) throws PaintException {
+ super.paintContent(target);
+ String[] keys = new String[itemIds.size()];
+ int i = 0;
+ for (Object itemId : itemIds) {
+ String key = select.itemIdMapper.key(itemId);
+ keys[i++] = key;
+ }
+ target.addVariable(select, "keys", keys);
+ }
+
+ }
+
+ /**
+ * Criterion for selects that support drop (Tree and Table). With this
+ * criterion drop is accepted only if {@link Transferable} (from this
+ * {@link AbstractSelect}) contains given item identifier or identifiers.
+ */
+ @ClientCriterion(VIdentifierIs.class)
+ public static class IdentifierIs extends AbstractItemSetCriterion {
+ public IdentifierIs(AbstractSelect select, Object... itemId) {
+ super(select, itemId);
+ }
+
+ public boolean accepts(DragAndDropEvent dragEvent) {
+ DataBoundTransferable transferable = (DataBoundTransferable) dragEvent
+ .getTransferable();
+ return itemIds.contains(transferable.getItemId());
+ }
+
+ }
+
+ public class AbstractSelectDropDetails extends TargetDetailsImpl {
+
+ private Object idOver;
+
+ AbstractSelectDropDetails(Map<String, Object> rawVariables) {
+ super(rawVariables);
+ // eagar fetch itemid, mapper may be emptied
+ String keyover = (String) getData("itemIdOver");
+ if (keyover != null) {
+ idOver = itemIdMapper.get(keyover);
+ }
+ }
+
+ public Object getItemIdOver() {
+ return idOver;
+ }
+
+ public Location getDropLocation() {
+ String s = (String) getData("detail");
+ if ("TOP".equals(s)) {
+ return Location.TOP;
+ } else if ("BOTTOM".equals(s)) {
+ return Location.BOTTOM;
+ } else {
+ return Location.MIDDLE;
+ }
+ }
+
+ }
+
}
import com.vaadin.event.dd.DragSource;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.TargetDetailsImpl;
import com.vaadin.terminal.KeyMapper;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.VScrollTable;
-import com.vaadin.ui.Tree.Location;
/**
* <p>
this.dropHandler = dropHandler;
}
- /*
- * TODO add propertyId
- */
- public class TableTargetDetails extends TargetDetailsImpl {
- private Object idOver;
-
- public TableTargetDetails(Map<String, Object> rawDropData) {
- super(rawDropData);
- // eagar fetch itemid, mapper may be emptied
- String keyover = (String) getData("itemIdOver");
- if (keyover != null) {
- idOver = itemIdMapper.get(keyover);
- }
- }
-
- public Object getItemIdOver() {
- return idOver;
- }
-
- public Location getDropLocation() {
- String s = (String) getData("detail");
- if ("TOP".equals(s)) {
- return Location.TOP;
- } else if ("BOTTOM".equals(s)) {
- return Location.BOTTOM;
- } else {
- return Location.MIDDLE;
- }
- }
-
- @Override
- public Table getTarget() {
- return (Table) super.getTarget();
- }
-
- }
-
- public TargetDetails translateDragDropDetails(
+ public AbstractSelectDropDetails translateDragDropDetails(
Map<String, Object> clientVariables) {
- return new TableTargetDetails(clientVariables);
+ return new AbstractSelectDropDetails(clientVariables);
}
}
import com.vaadin.event.dd.DragSource;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetailsImpl;
import com.vaadin.event.dd.acceptCriteria.ClientCriterion;
import com.vaadin.event.dd.acceptCriteria.ServerSideCriterion;
import com.vaadin.terminal.KeyMapper;
TOP, BOTTOM, MIDDLE;
}
- public class TreeDropDetails extends TargetDetailsImpl {
-
- private Object idOver;
+ public class TreeDropDetails extends AbstractSelectDropDetails {
TreeDropDetails(Map<String, Object> rawVariables) {
super(rawVariables);
- // eagar fetch itemid, mapper may be emptied
- String keyover = (String) getData("itemIdOver");
- if (keyover != null) {
- idOver = itemIdMapper.get(keyover);
- }
- }
-
- public Object getItemIdOver() {
- return idOver;
- }
-
- public Location getDropLocation() {
- String s = (String) getData("detail");
- if ("TOP".equals(s)) {
- return Location.TOP;
- } else if ("BOTTOM".equals(s)) {
- return Location.BOTTOM;
- } else {
- return Location.MIDDLE;
- }
}
@Override
* .event.dd.DragAndDropEvent)
*/
public boolean accepts(DragAndDropEvent dragEvent) {
- TreeDropDetails dropTargetData = (TreeDropDetails) dragEvent
+ AbstractSelectDropDetails dropTargetData = (AbstractSelectDropDetails) dragEvent
.getDropTargetData();
tree = (Tree) dragEvent.getDropTargetData().getTarget();
allowedItemIds = getAllowedItemIds(dragEvent, tree);
import com.vaadin.ui.Link;
import com.vaadin.ui.Table;
import com.vaadin.ui.Tree;
+import com.vaadin.ui.AbstractSelect.AbstractSelectDropDetails;
import com.vaadin.ui.Table.DragModes;
import com.vaadin.ui.Tree.Location;
-import com.vaadin.ui.Tree.TreeDropDetails;
/**
* DD playground. Better quality example/prototype codes in {@link DDTest2}.
}
public void drop(DropEvent event) {
- TreeDropDetails details = (TreeDropDetails) event
+ AbstractSelectDropDetails details = (AbstractSelectDropDetails) event
.getDropTargetData();
// TODO set properties, so same sorter could be used in Table
Transferable transferable = event.getTransferable();
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.Tree;
import com.vaadin.ui.Window;
-import com.vaadin.ui.Tree.TreeDropDetails;
+import com.vaadin.ui.AbstractSelect.AbstractSelectDropDetails;
public class DDTest2 extends TestBase {
data = "-no Text data flawor-";
}
tree3.addItem(data);
- TreeDropDetails dropTargetData = (TreeDropDetails) dropEvent
+ AbstractSelect.AbstractSelectDropDetails dropTargetData = (AbstractSelect.AbstractSelectDropDetails) dropEvent
.getDropTargetData();
tree3.setParent(data, dropTargetData.getItemIdOver());
* As we also accept only drops on folders, we know dropDetails
* is from Tree and it contains itemIdOver.
*/
- TreeDropDetails details = (TreeDropDetails) event
+ AbstractSelectDropDetails details = (AbstractSelectDropDetails) event
.getDropTargetData();
Object idOver = details.getItemIdOver();
tree1.setParent(itemId, idOver);
dropHandler = new DropHandler() {
public void drop(DropEvent event) {
- TreeDropDetails details = (TreeDropDetails) event
+ AbstractSelectDropDetails details = (AbstractSelectDropDetails) event
.getDropTargetData();
Transferable transferable = event.getTransferable();
import com.vaadin.ui.Table;
import com.vaadin.ui.Tree;
import com.vaadin.ui.Window;
-import com.vaadin.ui.Table.TableTargetDetails;
+import com.vaadin.ui.AbstractSelect.AbstractSelectDropDetails;
import com.vaadin.ui.Tree.Location;
public class DDTest4 extends TestBase {
}
public void drop(DropEvent dropEvent) {
- Table.TableTargetDetails dropTargetData = (TableTargetDetails) dropEvent
+ AbstractSelectDropDetails dropTargetData = (AbstractSelectDropDetails) dropEvent
.getDropTargetData();
DataBoundTransferable transferable = (DataBoundTransferable) dropEvent
.getTransferable();
protected void setup() {
Window w = getLayout().getWindow();
- VerticalSortableCssLayoutWithWrappers verticalSortableCssLayoutWithWrappers = new VerticalSortableCssLayoutWithWrappers();
+ HorizontalSortableCssLayoutWithWrappers verticalSortableCssLayoutWithWrappers = new HorizontalSortableCssLayoutWithWrappers();
w.addWindow(verticalSortableCssLayoutWithWrappers);
verticalSortableCssLayoutWithWrappers.setPositionX(200);
verticalSortableCssLayoutWithWrappers.setPositionY(40); /*