package com.smartgwt.sample.showcase.client.autotest.effects.dragdrop;
import java.util.HashMap;
import java.util.Map;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.util.EventHandler;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.events.DragStartEvent;
import com.smartgwt.client.widgets.events.DragStartHandler;
import com.smartgwt.client.widgets.layout.Layout;
import com.smartgwt.client.widgets.layout.PortalLayout;
import com.smartgwt.client.widgets.layout.Portlet;
import com.smartgwt.client.widgets.layout.VStack;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
public class TestablePortletAcrossWindowsSample extends ShowcasePanel {
public static class Factory implements PanelFactory {
private String id;
public ShowcasePanel create() {
final TestablePortletAcrossWindowsSample panel = new TestablePortletAcrossWindowsSample();
id = panel.getID();
return panel;
}
public String getID() {
return id;
}
public String getDescription() {
return null;
}
}
private static final Map<String, String> SRC_MAP = new HashMap<String, String>();
static {
SRC_MAP.put("Blue", "pawn_blue.png");
SRC_MAP.put("Green", "pawn_green.png");
SRC_MAP.put("Yellow", "pawn_yellow.png");
}
private static final class Part extends Img {
public Part(String src) {
setWidth(48);
setHeight(48);
setPadding(12);
setLayoutAlign(Alignment.CENTER);
setAppImgDir("pieces/48/");
setSrc(src);
}
}
private static final class CustomPortalLayout extends PortalLayout {
public CustomPortalLayout() {
setWidth100();
setHeight("50%");
setNumColumns(3);
final Canvas columnProperties = new Canvas();
columnProperties.setDropTypes("partPortlet");
setAutoChildProperties("column", columnProperties);
}
@Override
public Canvas getDropPortlet(Canvas dragTarget, Integer colNum, Integer rowNum, Integer dropPosition) {
if (dragTarget instanceof Portlet) return dragTarget;
final String portletName = (String)EventHandler.getNativeDragData();
if (portletName != null) {
return createPortlet(portletName);
}
return null;
}
}
private static Portlet createPortlet(final String portletName) {
final String src = SRC_MAP.get(portletName);
if (src == null) return null;
final Portlet portlet = new Portlet();
portlet.setTitle(portletName);
portlet.setCanDrag(true);
portlet.setDragType("partPortlet");
portlet.setUseNativeDrag(true);
portlet.addItem(new Part(src));
portlet.addDragStartHandler(new DragStartHandler() {
@Override
public void onDragStart(DragStartEvent event) {
EventHandler.setNativeDragData(portletName, portletName);
EventHandler.setDragTrackerImage("pieces/48/" + src, 28, 38);
}
});
return portlet;
}
@Override
public Canvas getViewPanel() {
final PortalLayout portalLayout = new CustomPortalLayout();
portalLayout.setID("portalLayout");
portalLayout.addPortlet(createPortlet("Blue"), 0, 0);
portalLayout.addPortlet(createPortlet("Green"), 1, 0);
portalLayout.addPortlet(createPortlet("Yellow"), 2, 0);
final PortalLayout portalLayout2 = new CustomPortalLayout();
portalLayout2.setID("portalLayout2");
final Layout mainLayout = new VStack(15);
mainLayout.setWidth100();
mainLayout.setHeight100();
mainLayout.setMembers(portalLayout, portalLayout2);
return mainLayout;
}
}