/** * Sencha GXT 3.0.0b - Sencha for GWT * Copyright(c) 2007-2012, Sencha, Inc. * licensing@sencha.com * * http://www.sencha.com/products/gxt/license/ */ package com.sencha.gxt.explorer.client.dnd; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.dnd.core.client.DndDragStartEvent; import com.sencha.gxt.dnd.core.client.DndDropEvent; import com.sencha.gxt.dnd.core.client.DragSource; import com.sencha.gxt.dnd.core.client.DropTarget; import com.sencha.gxt.examples.resources.client.ExampleStyles; import com.sencha.gxt.explorer.client.model.Example.Detail; import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.container.FlowLayoutContainer; import com.sencha.gxt.widget.core.client.container.MarginData; import com.sencha.gxt.widget.core.client.event.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; @Detail(name = "Basic DND", icon = "basicdnd", category = "Drag and Drop") public class BasicDndExample implements IsWidget, EntryPoint { @Override public Widget asWidget() { FlowLayoutContainer con = new FlowLayoutContainer(); HorizontalPanel hp = new HorizontalPanel(); hp.setSpacing(10); final FlowLayoutContainer container = new FlowLayoutContainer(); container.setBorders(true); container.setPixelSize(200, 200); DropTarget target = new DropTarget(container) { @Override protected void onDragDrop(DndDropEvent event) { super.onDragDrop(event); HTML html = (HTML) event.getData(); container.add(html); } }; target.setGroup("test"); target.setOverStyle("drag-ok"); final FlowLayoutContainer sourceContainer = new FlowLayoutContainer(); sourceContainer.setWidth(100); addSources(sourceContainer); TextButton reset = new TextButton("Reset"); reset.addSelectHandler(new SelectHandler() { @Override public void onSelect(SelectEvent event) { container.clear(); sourceContainer.clear(); addSources(sourceContainer); } }); hp.add(container); hp.add(sourceContainer); con.add(hp); con.add(reset, new MarginData(10)); return con; } @Override public void onModuleLoad() { RootPanel.get().add(this); } private void addSources(FlowLayoutContainer container) { for (int i = 0; i < 5; i++) { final SafeHtmlBuilder builder = new SafeHtmlBuilder(); builder.appendHtmlConstant("<div style=\"border:1px solid #ddd;cursor:default\" class=\"" + SafeHtmlUtils.htmlEscape(ExampleStyles.get().paddedText()) + "\">"); builder.appendHtmlConstant("Drag Me " + i); builder.appendHtmlConstant("</div>"); final HTML html = new HTML(builder.toSafeHtml()); container.add(html, new MarginData(3)); DragSource source = new DragSource(html) { @Override protected void onDragStart(DndDragStartEvent event) { super.onDragStart(event); // by default drag is allowed event.setData(html); event.getStatusProxy().update(builder.toSafeHtml()); } }; // group is optional source.setGroup("test"); } } }