package com.smartgwt.sample.showcase.client.effects.dragdrop; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.DragDataAction; import com.smartgwt.client.util.EventHandler; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.TransferImgButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.DragStartEvent; import com.smartgwt.client.widgets.events.DragStartHandler; import com.smartgwt.client.widgets.layout.HStack; import com.smartgwt.sample.showcase.client.PanelFactory; import com.smartgwt.sample.showcase.client.ShowcasePanel; import com.smartgwt.sample.showcase.client.data.PartData; public class RecordsAcrossWindowsSample extends ShowcasePanel { private static final String DESCRIPTION = "This sample demonstrates dragging data between two different browser windows." + "<p>" + "Open a second browser window (or browser tab) with this same sample running. Drag " + "records from the grid and drop them on the grid shown in the other browser." + "<p>" + "Depending on your browser and operating system, it may be necessary to hover over the " + "second browser tab or over an application icon to cause the tab or browser to come to " + "the front so you can drop on it." + "<p>" + "Data is transferred directly from one browser instance to another using HTML5 " + "techniques. This allows you to build applications that span multiple browser windows or " + "tabs, and makes it easier to take advantage of multiple physical screens."; public static class Factory implements PanelFactory { private String id; public ShowcasePanel create() { final RecordsAcrossWindowsSample panel = new RecordsAcrossWindowsSample(); id = panel.getID(); return panel; } public String getID() { return id; } public String getDescription() { return DESCRIPTION; } } @Override public Canvas getViewPanel() { final PartsListGrid myList1 = new PartsListGrid(); myList1.setID("myList1"); Record[] data = PartData.getRecords(); myList1.setData(data); myList1.setCanDragRecordsOut(true); myList1.setCanReorderRecords(true); myList1.setUseNativeDrag(true); myList1.setDragDataAction(DragDataAction.COPY); myList1.setDragType("partsListRecord"); myList1.addDragStartHandler(new DragStartHandler() { @Override public void onDragStart(DragStartEvent event) { final Record[] dragData = myList1.getDragData(); if (dragData != null && dragData.length != 0) { final Record record = dragData[0]; EventHandler.setDragTrackerImage("pieces/16/" + record.getAttributeAsString("partSrc"), 12, 12); } } }); final PartsListGrid myList2 = new PartsListGrid(); myList2.setID("myList2"); myList2.setCanAcceptDroppedRecords(true); myList2.setCanReorderRecords(true); final TransferImgButton transferImgButton = new TransferImgButton(TransferImgButton.RIGHT); transferImgButton.setID("transferButton"); transferImgButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { myList2.transferSelectedData(myList1); } }); final HStack hstack = new HStack(10); hstack.setHeight(160); hstack.setMembers(myList1, transferImgButton, myList2); return hstack; } public String getIntro() { return DESCRIPTION; } protected boolean isTopIntro() { return true; } }