I recently upgraded to SmartGWT 5.0. After that, I noticed that the "drag and drop" behavior has changed. Specifically, I noticed that a tileRecord will keep flashing once it is dragged from a source tileGrid to a target tileGrid. I am including a simple test program below that can reproduce the problem.
The problem was not there when I was using SmartGWT 3.1; but it there now that I am using SmartGWT 5.0. I tried two different snapshots of 5.0 and both had the same problem.
5.0-p20141218
5.0-p20150129
We tried both Firefox and Chrome and both had the same problem.
The problem was not there when I was using SmartGWT 3.1; but it there now that I am using SmartGWT 5.0. I tried two different snapshots of 5.0 and both had the same problem.
5.0-p20141218
5.0-p20150129
Code:
package foo.bar; import java.util.ArrayList; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.DragDataAction; import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.widgets.events.DragStopEvent; import com.smartgwt.client.widgets.events.DragStopHandler; import com.smartgwt.client.widgets.events.DropOverEvent; import com.smartgwt.client.widgets.events.DropOverHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.layout.VStack; import com.smartgwt.client.widgets.tile.TileGrid; import com.smartgwt.client.widgets.tile.TileRecord; import com.smartgwt.client.widgets.tile.events.RecordClickEvent; import com.smartgwt.client.widgets.tile.events.RecordClickHandler; import com.smartgwt.client.widgets.tile.events.RecordDoubleClickEvent; import com.smartgwt.client.widgets.tile.events.RecordDoubleClickHandler; import com.smartgwt.client.widgets.viewer.DetailViewerField; /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This issue appears from version 5.0: 5.0-p20141218 // The same code works fine in smartget3.1 // // Issue: // I created 2 tiles: sourceTileList and an empty targetTileList // User can drag and drop tile from source to target. // Whenever user click, doubleClikc or drag/drop a tile, the System.out will print out a message to console. // // === How to repeat the problem: // When user drag and drop the tile "AAAAA" to target, both source and target start flashing. /////////////////////////////////////////////////////////////////////////////////////////////////////////////// public class TestVersion50 implements EntryPoint { private TileGrid sourceList = null; private TileGrid targetList = null; private final HLayout hLayout = new HLayout(10); @Override public void onModuleLoad() { VLayout vLayout = new VLayout(20); vLayout.setMargin(10); vLayout.setWidth100(); vLayout.setHeight100(); createDragDropList(); vLayout.addMember(hLayout); vLayout.draw(); } private void createDragDropList(){ sourceList = new TileGrid(){ @Override protected String getTileHTML(Record record) { String tileHTML = super.getTileHTML(record); String title = record.getAttribute("title"); return "<div title=\"" + title + "\">" + tileHTML + "<div/>"; } }; sourceList.setWidth("55%"); sourceList.setHeight("100%"); sourceList.setTileWidth(100); sourceList.setTileHeight(100); sourceList.setWrapValues(true); sourceList.setCanAcceptDrop(false); sourceList.setCanDragTilesOut(true); sourceList.setDragDataAction(DragDataAction.COPY); sourceList.setCanReorderTiles(false); sourceList.setCanDrag(false); // this call make the new dim added to the end, not the beginning. sourceList.setShowEdges(true); sourceList.setPreventDuplicates(true); sourceList.setShowAllRecords(true); sourceList.setSelectionType(SelectionStyle.SINGLE); sourceList.addRecordDoubleClickHandler(new RecordDoubleClickHandler(){ @Override public void onRecordDoubleClick(RecordDoubleClickEvent event) { System.out.println("Click on sourceList: onRecordDoubleClick"); } }); ArrayList<TileRecord> arr = new ArrayList<TileRecord>(); TileRecord onerec; onerec = new TileRecord(); onerec.setAttribute("dimensionName", "AAAAA"); onerec.setAttribute("dimensionEnumName", "AAAAA"); onerec.setAttribute("title", "AAAAA"); arr.add(onerec); DetailViewerField pictureField = new DetailViewerField("dimensionIcon"); pictureField.setType("image"); pictureField.setImageURLPrefix(""); DetailViewerField nameField = new DetailViewerField("dimensionName"); sourceList.setFields(pictureField, nameField); sourceList.setData( arr.toArray (new TileRecord[arr.size()]) ); sourceList.addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(RecordClickEvent event) { System.out.println("Click on sourceList: onRecordClick"); } }); targetList = new TileGrid(); targetList.setWidth("40%"); targetList.setHeight("100%"); targetList.setTileWidth(100); targetList.setTileHeight(100); targetList.setCanAcceptDrop(true); targetList.setCanDragTilesOut(true); targetList.setDragDataAction(DragDataAction.MOVE); targetList.setCanReorderTiles(false); targetList.setCanDrag(false); // this call make the new dim added to the end, not the beginning. targetList.setShowEdges(true); targetList.setPreventDuplicates(true); DetailViewerField pictureField2 = new DetailViewerField("savedIcon"); pictureField2.setType("image"); pictureField2.setImageURLPrefix(""); DetailViewerField nameField2 = new DetailViewerField("dimensionName"); targetList.setFields(pictureField2, nameField2); targetList.setData(new Record[]{}); targetList.addRecordDoubleClickHandler(new RecordDoubleClickHandler(){ @Override public void onRecordDoubleClick(RecordDoubleClickEvent event) { System.out.println("Click on targetList: onRecordDoubleClick"); } }); targetList.addDropOverHandler(new DropOverHandler(){ @Override public void onDropOver(DropOverEvent event) { System.out.println("Click on targetList: addDropOverHandler"); } } ); targetList.addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(RecordClickEvent event) { System.out.println("Click on targetList: onRecordClick"); } }); targetList.addDragStopHandler(new DragStopHandler(){ @Override public void onDragStop(DragStopEvent event) { System.out.println("Click on targetList: onDragStop"); } }); VStack transferStack = new VStack(3); transferStack.setHeight(400); transferStack.setWidth("16%"); transferStack.setAlign(VerticalAlignment.CENTER); hLayout.addMember(sourceList); hLayout.addMember(targetList); return; } }
Comment