--- /dev/null
+/**
+ *
+ */
+package com.vaadin.event.dd.acceptCriteria;
+
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.PaintException;
+import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.ui.dd.VContainsDataFlawor;
+
+@ClientCriterion(VContainsDataFlawor.class)
+public final class ContainsDataFlawor extends ClientSideCriterion {
+
+ private String dataFlaworId;
+
+ /**
+ * TODO should support basic UIDL data types
+ *
+ * @param dataFlawor
+ * @param value
+ */
+ public ContainsDataFlawor(String dataFlawor) {
+ dataFlaworId = dataFlawor;
+ }
+
+ @Override
+ public void paintContent(PaintTarget target) throws PaintException {
+ super.paintContent(target);
+ target.addAttribute("p", dataFlaworId);
+ }
+
+ public boolean accepts(DragAndDropEvent dragEvent) {
+ return dragEvent.getTransferable().getDataFlawors().contains(
+ dataFlaworId);
+ }
+}
\ No newline at end of file
--- /dev/null
+/**
+ *
+ */
+package com.vaadin.event.dd.acceptCriteria;
+
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.PaintException;
+import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.ui.dd.VDropDetailEquals;
+
+@ClientCriterion(VDropDetailEquals.class)
+public final class DropDetailEquals extends ClientSideCriterion {
+
+ private String propertyName;
+ private String value;
+
+ /**
+ * TODO should support basic UIDL data types
+ *
+ * @param propertyName
+ * @param value
+ */
+ public DropDetailEquals(String propertyName, String value) {
+ this.propertyName = propertyName;
+ this.value = value;
+ }
+
+ @Override
+ public void paintContent(PaintTarget target) throws PaintException {
+ super.paintContent(target);
+ target.addAttribute("p", propertyName);
+ target.addAttribute("v", value);
+ }
+
+ public boolean accepts(DragAndDropEvent dragEvent) {
+ Object data = dragEvent.getDropTargetData().getData(propertyName);
+ return value.equals(data);
+ }
+}
\ No newline at end of file
package com.vaadin.event.dd.acceptCriteria;
import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.PaintException;
+import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.gwt.client.ui.dd.VNot;
@ClientCriterion(VNot.class)
this.acceptCriterion = acceptCriterion;
}
+ @Override
+ public void paintContent(PaintTarget target) throws PaintException {
+ super.paintContent(target);
+ acceptCriterion.paint(target);
+ }
+
public boolean accepts(DragAndDropEvent dragEvent) {
return !acceptCriterion.accepts(dragEvent);
}
--- /dev/null
+/**
+ *
+ */
+package com.vaadin.event.dd.acceptCriteria;
+
+import com.vaadin.event.ComponentTransferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.terminal.gwt.client.ui.dd.VSourceIsSameAsTarget;
+import com.vaadin.ui.Component;
+
+@ClientCriterion(VSourceIsSameAsTarget.class)
+public class SourceIsSameAsTarget extends ClientSideCriterion {
+
+ public boolean accepts(DragAndDropEvent dragEvent) {
+ if (dragEvent.getTransferable() instanceof ComponentTransferable) {
+ Component sourceComponent = ((ComponentTransferable) dragEvent
+ .getTransferable()).getSourceComponent();
+ DropTarget target = dragEvent.getDropTargetData().getTarget();
+ return sourceComponent == target;
+ }
+
+ return false;
+ }
+
+}
\ No newline at end of file
return updated;
}
- private boolean isDynamicWidth() {
+ protected boolean isDynamicWidth() {
return width == null || width.equals("");
}
- private boolean isDynamicHeight() {
+ protected boolean isDynamicHeight() {
return height == null || height.equals("");
}
if (!height.equals(this.height)) {
this.height = height;
if (!rendering) {
- client.runDescendentsLayout(this);
+ client.handleComponentRelativeSize(getWidget());
}
}
}
if (!width.equals(this.width)) {
this.width = width;
if (!rendering) {
- client.runDescendentsLayout(this);
+ client.handleComponentRelativeSize(getWidget());
}
}
}
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.RenderInformation;
import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.Util;
+import com.vaadin.terminal.gwt.client.RenderInformation.Size;
import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
import com.vaadin.terminal.gwt.client.ui.dd.VAbstractDropHandler;
import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCallback;
return dropHandler;
}
- private class CustomDropHandler extends VAbstractDropHandler {
+ protected VerticalDropLocation verticalDropLocation;
+ protected HorizontalDropLocation horizontalDropLocation;
+ private VerticalDropLocation emphasizedVDrop;
+ private HorizontalDropLocation emphasizedHDrop;
- private static final String OVER_STYLE = "v-ddwrapper-over";
- private VerticalDropLocation verticalDropLocation;
- private HorizontalDropLocation horizontalDropLocation;
+ private static final String OVER_STYLE = "v-ddwrapper-over";
+
+ public class CustomDropHandler extends VAbstractDropHandler {
@Override
public void dragEnter(VDragEvent drag) {
+ updateDropDetails(drag);
ApplicationConnection.getConsole().log("DDWrapper DragEnter");
super.dragEnter(drag);
}
@Override
public void dragLeave(VDragEvent drag) {
ApplicationConnection.getConsole().log("DDWrapper DragLeave");
- deEmphasis();
+ deEmphasis(true);
}
@Override
public void dragOver(final VDragEvent drag) {
+ updateDropDetails(drag);
validate(new VAcceptCallback() {
public void accepted(VDragEvent event) {
dragAccepted(drag);
@Override
public boolean drop(VDragEvent drag) {
ApplicationConnection.getConsole().log("Drop" + drag.sinceStart());
- deEmphasis();
+ deEmphasis(true);
Map<String, Object> dd = drag.getDropDetails();
dd.put("absoluteLeft", absoluteLeft);
dd.put("absoluteTop", absoluteTop);
- dd.put("verticalLocation", verticalDropLocation.toString());
- dd.put("horizontalLocation", horizontalDropLocation.toString());
-
- return super.drop(drag);
- }
-
- private void deEmphasis() {
if (verticalDropLocation != null) {
- VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE,
- false);
- VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
- + verticalDropLocation.toString().toLowerCase(), false);
- VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
- + horizontalDropLocation.toString().toLowerCase(),
- false);
+ dd.put("verticalLocation", verticalDropLocation.toString());
+ dd.put("horizontalLocation", horizontalDropLocation.toString());
}
+
+ return super.drop(drag);
}
@Override
emphasis(drag);
}
- private void emphasis(VDragEvent drag) {
- deEmphasis();
- verticalDropLocation = VerticalDropLocation.get(getElement(), drag
- .getCurrentGwtEvent().getClientY(), 0.2);
- horizontalDropLocation = HorizontalDropLocation.get(getElement(),
- drag.getCurrentGwtEvent().getClientX(), 0.2);
- VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE, true);
- VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
- + verticalDropLocation.toString().toLowerCase(), true);
- VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
- + horizontalDropLocation.toString().toLowerCase(), true);
-
- // TODO build (to be an example) an emphasis mode where drag image
- // is fitted before or after the content
-
- }
-
@Override
public Paintable getPaintable() {
return VDragAndDropWrapper.this;
}-*/;
+ public void updateDropDetails(VDragEvent drag) {
+ verticalDropLocation = VerticalDropLocation.get(getElement(), drag
+ .getCurrentGwtEvent().getClientY(), 0.2);
+ drag.getDropDetails().put("verticalLocation",
+ verticalDropLocation.toString());
+ horizontalDropLocation = HorizontalDropLocation.get(getElement(), drag
+ .getCurrentGwtEvent().getClientX(), 0.2);
+ drag.getDropDetails().put("horizontalLocation",
+ horizontalDropLocation.toString());
+ }
+
+ protected void deEmphasis(boolean doLayout) {
+ Size size = null;
+ if (doLayout) {
+ size = new RenderInformation.Size(getOffsetWidth(),
+ getOffsetHeight());
+ }
+ if (emphasizedVDrop != null) {
+ VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE, false);
+ VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
+ + emphasizedVDrop.toString().toLowerCase(), false);
+ VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
+ + emphasizedHDrop.toString().toLowerCase(), false);
+ }
+ if (doLayout) {
+ handleVaadinRelatedSizeChange(size);
+ }
+ }
+
+ protected void emphasis(VDragEvent drag) {
+ Size size = new RenderInformation.Size(getOffsetWidth(),
+ getOffsetHeight());
+ deEmphasis(false);
+ VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE, true);
+ VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
+ + verticalDropLocation.toString().toLowerCase(), true);
+ VDragAndDropWrapper.setStyleName(getElement(), OVER_STYLE + "-"
+ + horizontalDropLocation.toString().toLowerCase(), true);
+ emphasizedVDrop = verticalDropLocation;
+ emphasizedHDrop = horizontalDropLocation;
+
+ // TODO build (to be an example) an emphasis mode where drag image
+ // is fitted before or after the content
+ handleVaadinRelatedSizeChange(size);
+
+ }
+
+ protected void handleVaadinRelatedSizeChange(Size originalSize) {
+ if (isDynamicHeight() || isDynamicWidth()) {
+ if (!originalSize.equals(new RenderInformation.Size(
+ getOffsetWidth(), getOffsetHeight()))) {
+ Util.notifyParentOfSizeChange(VDragAndDropWrapper.this, false);
+ }
+ }
+ client.handleComponentRelativeSize(VDragAndDropWrapper.this);
+ }
+
}
--- /dev/null
+/**
+ *
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VContainsDataFlawor implements VAcceptCriteria {
+ public void accept(VDragEvent drag, UIDL configuration,
+ VAcceptCallback callback) {
+ String name = configuration.getStringAttribute("p");
+ boolean contains = drag.getTransferable().getDataFlawors().contains(
+ name);
+ if (contains) {
+ callback.accepted(drag);
+ }
+ }
+
+ public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+ return false;
+ }
+}
\ No newline at end of file
// dragleave on old
if (currentDropHandler != null) {
currentDropHandler.dragLeave(currentDrag);
+ currentDrag.getDropDetails().clear();
serverCallback = null;
}
// dragenter on new
if (target != null && target != currentDropHandler) {
if (currentDropHandler != null) {
currentDropHandler.dragLeave(currentDrag);
+ currentDrag.getDropDetails().clear();
}
currentDropHandler = target;
} else if (target == null && currentDropHandler != null) {
ApplicationConnection.getConsole().log("Invalid state!?");
currentDropHandler.dragLeave(currentDrag);
+ currentDrag.getDropDetails().clear();
currentDropHandler = null;
}
break;
if (currentDropHandler != null
&& currentDropHandler != newDragHanler) {
currentDropHandler.dragLeave(currentDrag);
+ currentDrag.getDropDetails().clear();
currentDropHandler = null;
serverCallback = null;
}
--- /dev/null
+/**
+ *
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VDropDetailEquals implements VAcceptCriteria {
+ public void accept(VDragEvent drag, UIDL configuration,
+ VAcceptCallback callback) {
+ String name = configuration.getStringAttribute("p");
+ String value = configuration.getStringAttribute("v");
+ Object object = drag.getDropDetails().get(name);
+ if (value.equals(object)) {
+ callback.accepted(drag);
+ }
+ }
+
+ 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 com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VSourceIsSameAsTarget implements VAcceptCriteria {
+ public void accept(VDragEvent drag, UIDL configuration,
+ VAcceptCallback callback) {
+ Paintable dragSource = drag.getTransferable().getDragSource();
+ Paintable paintable = VDragAndDropManager.get().getCurrentDropHandler()
+ .getPaintable();
+
+ if (paintable == dragSource) {
+ callback.accepted(drag);
+ }
+ }
+
+ public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+ return false;
+ }
+}
\ No newline at end of file
--- /dev/null
+package com.vaadin.tests.components.customcomponent;\r
+\r
+import com.vaadin.data.Property.ValueChangeEvent;\r
+import com.vaadin.tests.components.TestBase;\r
+import com.vaadin.ui.Button;\r
+import com.vaadin.ui.CustomComponent;\r
+import com.vaadin.ui.Label;\r
+import com.vaadin.ui.TextField;\r
+\r
+public class ClipContent extends TestBase {\r
+\r
+ @Override\r
+ protected void setup() {\r
+\r
+ Label text = new Label(\r
+ "1_long_line_that_should_be_clipped<br/>2_long_line_that_should_be_clipped<br/>3_long_line_that_should_be_clipped<br/>4_long_line_that_should_be_clipped<br/>",\r
+ Label.CONTENT_XHTML);\r
+\r
+ final CustomComponent cc = new CustomComponent(text);\r
+ cc.setWidth("20px");\r
+ cc.setHeight("20px");\r
+\r
+ final TextField w = new TextField("Width");\r
+ w.setValue("20px");\r
+ w.addListener(new TextField.ValueChangeListener() {\r
+ public void valueChange(ValueChangeEvent event) {\r
+ cc.setWidth((String) w.getValue());\r
+ }\r
+ });\r
+ addComponent(w);\r
+ final TextField h = new TextField("Height");\r
+ h.setValue("20px");\r
+ h.addListener(new TextField.ValueChangeListener() {\r
+ public void valueChange(ValueChangeEvent event) {\r
+ cc.setHeight((String) h.getValue());\r
+ }\r
+ });\r
+ addComponent(h);\r
+ Button b = new Button("apply");\r
+ addComponent(b);\r
+\r
+ addComponent(cc);\r
+\r
+ }\r
+\r
+ @Override\r
+ protected String getDescription() {\r
+ return "The text in CustomComponent should be clipped if it has size defined.";\r
+ }\r
+\r
+ @Override\r
+ protected Integer getTicketNumber() {\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.vaadin.tests.dd;
+
+import java.util.Iterator;
+
+import com.vaadin.event.ComponentTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptCriteria.And;
+import com.vaadin.event.dd.acceptCriteria.DropDetailEquals;
+import com.vaadin.event.dd.acceptCriteria.Not;
+import com.vaadin.event.dd.acceptCriteria.SourceIsSameAsTarget;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+/**
+ * Same as with css layout but tests size change propagation on emphasis +
+ * rules.
+ *
+ *
+ */
+public class HorizontalLayoutSortableWithWrappers extends Window {
+
+ static int count;
+
+ private HorizontalLayout layout = new HorizontalLayout();
+
+ class WrappedLabel extends DragAndDropWrapper {
+
+ private static final long serialVersionUID = 1L;
+
+ public WrappedLabel(String content) {
+ super(new Label(content + " c:" + ++count));
+ getCompositionRoot().setWidth("60px");
+ getCompositionRoot().setHeight("60px");
+ setSizeUndefined();
+ setDragStartMode(DragStartMode.WRAPPER);
+ }
+
+ @Override
+ public DropHandler getDropHandler() {
+ return dh;
+ }
+
+ }
+
+ private DropHandler dh = new DropHandler() {
+ AcceptCriterion crit = new And(new DropDetailEquals(
+ "horizontalLocation", "LEFT"), new Not(
+ new SourceIsSameAsTarget()));
+
+ public AcceptCriterion getAcceptCriterion() {
+ return crit;
+ }
+
+ public void drop(DropEvent dropEvent) {
+ Transferable transferable = dropEvent.getTransferable();
+ if (transferable instanceof ComponentTransferable) {
+ ComponentTransferable ct = (ComponentTransferable) transferable;
+ Component sourceComponent = ct.getSourceComponent();
+ if (sourceComponent instanceof WrappedLabel) {
+ int index = 1;
+ Iterator<Component> componentIterator = layout
+ .getComponentIterator();
+ Component next = componentIterator.next();
+ TargetDetails dropTargetData = dropEvent
+ .getDropTargetData();
+ DropTarget target = dropTargetData.getTarget();
+ while (next != target) {
+ if (next != sourceComponent) {
+ index++;
+ }
+ next = componentIterator.next();
+ }
+ if (dropTargetData.getData("horizontalLocation").equals(
+ "LEFT")) {
+ index--;
+ if (index < 0) {
+ index = 0;
+ }
+ }
+
+ layout.removeComponent(sourceComponent);
+ layout.addComponent(sourceComponent, index);
+ }
+ }
+ // TODO Auto-generated method stub
+
+ }
+ };
+
+ public HorizontalLayoutSortableWithWrappers() {
+ setCaption("Horizontally sortable layout via (ddwrappers):Try sorting blocks by draggin them");
+ DragAndDropWrapper pane = new DragAndDropWrapper(layout);
+ setContent(pane);
+ pane.setSizeFull();
+ setWidth("400px");
+ setHeight("100px");
+
+ for (int i = 0; i < 4; i++) {
+ layout.addComponent(new WrappedLabel("Block"));
+ }
+
+ }
+}
--- /dev/null
+package com.vaadin.tests.dd;
+
+import java.util.Iterator;
+
+import com.vaadin.event.ComponentTransferable;
+import com.vaadin.event.Transferable;
+import com.vaadin.event.dd.DropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.DropTarget;
+import com.vaadin.event.dd.TargetDetails;
+import com.vaadin.event.dd.acceptCriteria.AcceptAll;
+import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class HorizontalSortableCssLayoutWithWrappers extends Window {
+
+ static int count;
+
+ private CssLayout cssLayout = new CssLayout() {
+ @Override
+ protected String getCss(Component c) {
+ return "float:left; width:60px;height:60px;background: yellow;padding:2px;";
+ };
+ };
+
+ class WrappedLabel extends DragAndDropWrapper {
+
+ private static final long serialVersionUID = 1L;
+
+ public WrappedLabel(String content) {
+ super(new Label(content + " c:" + ++count));
+ setSizeUndefined(); // via css
+ setHeight("60px"); // FIXME custom component seems to be broken:
+ // can't set height with css only
+ setDragStartMode(DragStartMode.WRAPPER);
+ }
+
+ @Override
+ public DropHandler getDropHandler() {
+ return dh;
+ }
+
+ }
+
+ private DropHandler dh = new DropHandler() {
+
+ public AcceptCriterion getAcceptCriterion() {
+ return AcceptAll.get();
+ }
+
+ public void drop(DropEvent dropEvent) {
+ Transferable transferable = dropEvent.getTransferable();
+ if (transferable instanceof ComponentTransferable) {
+ ComponentTransferable ct = (ComponentTransferable) transferable;
+ Component sourceComponent = ct.getSourceComponent();
+ if (sourceComponent instanceof WrappedLabel) {
+ int index = 1;
+ Iterator<Component> componentIterator = cssLayout
+ .getComponentIterator();
+ Component next = componentIterator.next();
+ TargetDetails dropTargetData = dropEvent
+ .getDropTargetData();
+ DropTarget target = dropTargetData.getTarget();
+ while (next != target) {
+ if (next != sourceComponent) {
+ index++;
+ }
+ next = componentIterator.next();
+ }
+ if (dropTargetData.getData("horizontalLocation").equals(
+ "LEFT")) {
+ index--;
+ if (index < 0) {
+ index = 0;
+ }
+ }
+
+ cssLayout.removeComponent(sourceComponent);
+ cssLayout.addComponent(sourceComponent, index);
+ }
+ }
+ // TODO Auto-generated method stub
+
+ }
+ };
+
+ public HorizontalSortableCssLayoutWithWrappers() {
+ setCaption("Horizontally sortable csslayout via (ddwrappers):Try sorting blocks by draggin them");
+ DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
+ setContent(pane);
+ pane.setSizeFull();
+ setWidth("400px");
+ setHeight("100px");
+
+ for (int i = 0; i < 4; i++) {
+ cssLayout.addComponent(new WrappedLabel("Block"));
+ }
+
+ }
+}
+++ /dev/null
-package com.vaadin.tests.dd;
-
-import java.util.Iterator;
-
-import com.vaadin.event.ComponentTransferable;
-import com.vaadin.event.Transferable;
-import com.vaadin.event.dd.DropEvent;
-import com.vaadin.event.dd.DropHandler;
-import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.acceptCriteria.AcceptAll;
-import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Window;
-
-public class VerticalSortableCssLayoutWithWrappers extends Window {
-
- static int count;
-
- private CssLayout cssLayout = new CssLayout() {
- @Override
- protected String getCss(Component c) {
- return "float:left; width:60px;height:60px;background: yellow;padding:2px;";
- };
- };
-
- class WrappedLabel extends DragAndDropWrapper {
-
- private static final long serialVersionUID = 1L;
-
- public WrappedLabel(String content) {
- super(new Label(content + " c:" + ++count));
- setSizeUndefined(); // via css
- setHeight("60px"); // FIXME custom component seems to be broken:
- // can't set height with css only
- setDragStartMode(DragStartMode.WRAPPER);
- }
-
- @Override
- public DropHandler getDropHandler() {
- return dh;
- }
-
- }
-
- private DropHandler dh = new DropHandler() {
-
- public AcceptCriterion getAcceptCriterion() {
- return AcceptAll.get();
- }
-
- public void drop(DropEvent dropEvent) {
- Transferable transferable = dropEvent.getTransferable();
- if (transferable instanceof ComponentTransferable) {
- ComponentTransferable ct = (ComponentTransferable) transferable;
- Component sourceComponent = ct.getSourceComponent();
- if (sourceComponent instanceof WrappedLabel) {
- int index = 1;
- Iterator<Component> componentIterator = cssLayout
- .getComponentIterator();
- Component next = componentIterator.next();
- TargetDetails dropTargetData = dropEvent
- .getDropTargetData();
- DropTarget target = dropTargetData.getTarget();
- while (next != target) {
- if (next != sourceComponent) {
- index++;
- }
- next = componentIterator.next();
- }
- if (dropTargetData.getData("horizontalLocation").equals(
- "LEFT")) {
- index--;
- if (index < 0) {
- index = 0;
- }
- }
-
- cssLayout.removeComponent(sourceComponent);
- cssLayout.addComponent(sourceComponent, index);
- }
- }
- // TODO Auto-generated method stub
-
- }
- };
-
- public VerticalSortableCssLayoutWithWrappers() {
- setCaption("Horizontally sortable csslayout via (ddwrappers):Try sorting block by draggin them");
- DragAndDropWrapper pane = new DragAndDropWrapper(cssLayout);
- setContent(pane);
- pane.setSizeFull();
- setWidth("400px");
- setHeight("100px");
-
- for (int i = 0; i < 4; i++) {
- cssLayout.addComponent(new WrappedLabel("Block"));
- }
-
- }
-}